Home | History | Annotate | Line # | Download | only in vulkan
      1 /*
      2  * Copyright 2019 Google LLC
      3  * SPDX-License-Identifier: MIT
      4  *
      5  * based in part on anv and radv which are:
      6  * Copyright  2015 Intel Corporation
      7  * Copyright  2016 Red Hat.
      8  * Copyright  2016 Bas Nieuwenhuizen
      9  */
     10 
     11 #ifndef VN_COMMAND_BUFFER_H
     12 #define VN_COMMAND_BUFFER_H
     13 
     14 #include "vn_common.h"
     15 
     16 #include "vn_cs.h"
     17 
     18 struct vn_command_pool {
     19    struct vn_object_base base;
     20 
     21    VkAllocationCallbacks allocator;
     22    uint32_t queue_family_index;
     23 
     24    struct list_head command_buffers;
     25 };
     26 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_command_pool,
     27                                base.base,
     28                                VkCommandPool,
     29                                VK_OBJECT_TYPE_COMMAND_POOL)
     30 
     31 enum vn_command_buffer_state {
     32    VN_COMMAND_BUFFER_STATE_INITIAL,
     33    VN_COMMAND_BUFFER_STATE_RECORDING,
     34    VN_COMMAND_BUFFER_STATE_EXECUTABLE,
     35    VN_COMMAND_BUFFER_STATE_INVALID,
     36 };
     37 
     38 struct vn_command_buffer_builder {
     39    /* for scrubbing VK_IMAGE_LAYOUT_PRESENT_SRC_KHR */
     40    uint32_t image_barrier_count;
     41    VkImageMemoryBarrier *image_barriers;
     42 
     43    const struct vn_render_pass *render_pass;
     44    const struct vn_framebuffer *framebuffer;
     45    const struct vn_image **present_src_images;
     46 };
     47 
     48 struct vn_command_buffer {
     49    struct vn_object_base base;
     50 
     51    struct vn_device *device;
     52 
     53    VkAllocationCallbacks allocator;
     54    VkCommandBufferLevel level;
     55    uint32_t queue_family_index;
     56 
     57    struct list_head head;
     58 
     59    struct vn_command_buffer_builder builder;
     60 
     61    enum vn_command_buffer_state state;
     62    struct vn_cs_encoder cs;
     63 };
     64 VK_DEFINE_HANDLE_CASTS(vn_command_buffer,
     65                        base.base,
     66                        VkCommandBuffer,
     67                        VK_OBJECT_TYPE_COMMAND_BUFFER)
     68 
     69 #endif /* VN_COMMAND_BUFFER_H */
     70