vk/meta: Clean up temporary objects
[mesa.git] / src / vulkan / private.h
index 38b908aa6b3c5b3272bf73e3d223a9112ccac80d..873efaa48f511a9d9ed851910d830dab428bc684 100644 (file)
@@ -234,9 +234,6 @@ struct anv_state_stream {
 
 void anv_block_pool_init(struct anv_block_pool *pool,
                          struct anv_device *device, uint32_t block_size);
-void anv_block_pool_init_slave(struct anv_block_pool *pool,
-                               struct anv_block_pool *master_pool,
-                               uint32_t num_blocks);
 void anv_block_pool_finish(struct anv_block_pool *pool);
 uint32_t anv_block_pool_alloc(struct anv_block_pool *pool);
 void anv_block_pool_free(struct anv_block_pool *pool, uint32_t offset);
@@ -305,6 +302,7 @@ struct anv_meta_state {
 
    struct {
       VkPipeline                                pipeline;
+      VkPipelineLayout                          pipeline_layout;
       VkDescriptorSetLayout                     ds_layout;
    } blit;
 
@@ -331,11 +329,13 @@ struct anv_device {
 
     struct anv_block_pool                       instruction_block_pool;
     struct anv_block_pool                       surface_state_block_pool;
-    struct anv_block_pool                       binding_table_block_pool;
     struct anv_state_pool                       surface_state_pool;
 
     struct anv_meta_state                       meta_state;
 
+    struct anv_state                            float_border_colors;
+    struct anv_state                            uint32_border_colors;
+
     struct anv_compiler *                       compiler;
     struct anv_aub_writer *                     aub_writer;
     pthread_mutex_t                             mutex;
@@ -528,23 +528,10 @@ struct anv_dynamic_cb_state {
 
 };
 
-struct anv_query_pool_slot {
-   uint64_t begin;
-   uint64_t end;
-   uint64_t available;
-};
-
-struct anv_query_pool {
-   struct anv_object                            base;
-   VkQueryType                                  type;
-   uint32_t                                     slots;
-   struct anv_bo                                bo;
-};
-
 struct anv_descriptor_slot {
-   bool dynamic;
+   int8_t dynamic_slot;
    uint8_t index;
-} entries[0];
+};
 
 struct anv_descriptor_set_layout {
    struct {
@@ -556,6 +543,7 @@ struct anv_descriptor_set_layout {
 
    uint32_t count;
    uint32_t num_dynamic_buffers;
+   uint32_t shader_stages;
    struct anv_descriptor_slot entries[0];
 };
 
@@ -597,21 +585,18 @@ struct anv_buffer {
 };
 
 #define ANV_CMD_BUFFER_PIPELINE_DIRTY           (1 << 0)
-#define ANV_CMD_BUFFER_DESCRIPTOR_SET_DIRTY     (1 << 1)
 #define ANV_CMD_BUFFER_RS_DIRTY                 (1 << 2)
 #define ANV_CMD_BUFFER_DS_DIRTY                 (1 << 3)
 #define ANV_CMD_BUFFER_CB_DIRTY                 (1 << 4)
-   
-struct anv_bindings {
-   struct {
-      struct anv_buffer *buffer;
-      VkDeviceSize offset;
-   }                                            vb[MAX_VBS];
 
-   struct {
-      uint32_t                                  surfaces[256];
-      struct { uint32_t dwords[4]; }            samplers[16];
-   }                                            descriptors[VK_NUM_SHADER_STAGE];
+struct anv_vertex_binding {
+   struct anv_buffer *                          buffer;
+   VkDeviceSize                                 offset;
+};
+
+struct anv_descriptor_set_binding {
+   struct anv_descriptor_set *                  set;
+   uint32_t                                     dynamic_offsets[128];
 };
 
 struct anv_cmd_buffer {
@@ -628,24 +613,24 @@ struct anv_cmd_buffer {
    uint32_t                                     bo_count;
    struct anv_batch                             batch;
    struct anv_batch_bo *                        last_batch_bo;
-   struct anv_bo                                surface_bo;
+   struct anv_batch_bo *                        surface_batch_bo;
    uint32_t                                     surface_next;
    struct anv_reloc_list                        surface_relocs;
-   struct anv_state_stream                      binding_table_state_stream;
    struct anv_state_stream                      surface_state_stream;
    struct anv_state_stream                      dynamic_state_stream;
 
    /* State required while building cmd buffer */
    uint32_t                                     vb_dirty;
    uint32_t                                     dirty;
+   uint32_t                                     descriptors_dirty;
    struct anv_pipeline *                        pipeline;
    struct anv_framebuffer *                     framebuffer;
    struct anv_dynamic_rs_state *                rs_state;
    struct anv_dynamic_ds_state *                ds_state;
    struct anv_dynamic_vp_state *                vp_state;
    struct anv_dynamic_cb_state *                cb_state;
-   struct anv_bindings *                        bindings;
-   struct anv_bindings                          default_bindings;
+   struct anv_vertex_binding                    vertex_bindings[MAX_VBS];
+   struct anv_descriptor_set_binding            descriptors[MAX_SETS];
 };
 
 void anv_cmd_buffer_dump(struct anv_cmd_buffer *cmd_buffer);
@@ -721,12 +706,13 @@ anv_pipeline_create(VkDevice device,
                     const struct anv_pipeline_create_info *extra,
                     VkPipeline *pPipeline);
 
-struct anv_compiler *anv_compiler_create(int fd);
+struct anv_compiler *anv_compiler_create(struct anv_device *device);
 void anv_compiler_destroy(struct anv_compiler *compiler);
 int anv_compiler_run(struct anv_compiler *compiler, struct anv_pipeline *pipeline);
 void anv_compiler_free(struct anv_pipeline *pipeline);
 
 struct anv_format {
+   const char *                                 name;
    uint16_t                                     format;
    uint8_t                                      cpp;
    uint8_t                                      channels;
@@ -753,9 +739,26 @@ struct anv_image {
    VkDeviceSize                                 offset;
 
    struct anv_swap_chain *                      swap_chain;
+
+   /**
+    * \name Alignment of miptree images, in units of pixels.
+    *
+    * These fields contain the actual alignment values, not the values the
+    * hardware expects. For example, if h_align is 4, then program the hardware
+    * with HALIGN_4.
+    *
+    * \see RENDER_SURFACE_STATE.SurfaceHorizontalAlignment
+    * \see RENDER_SURFACE_STATE.SurfaceVerticalAlignment
+    * \{
+    */
+   uint8_t h_align;
+   uint8_t v_align;
+   /** \} */
 };
 
 struct anv_surface_view {
+   struct anv_object                            base;
+
    struct anv_state                             surface_state;
    struct anv_bo *                              bo;
    uint32_t                                     offset;
@@ -783,6 +786,9 @@ void anv_color_attachment_view_init(struct anv_surface_view *view,
                                     const VkColorAttachmentViewCreateInfo* pCreateInfo,
                                     struct anv_cmd_buffer *cmd_buffer);
 
+void anv_surface_view_destroy(struct anv_device *device,
+                              struct anv_object *obj, VkObjectType obj_type);
+
 struct anv_sampler {
    uint32_t state[4];
 };
@@ -827,14 +833,12 @@ struct anv_render_pass {
 };
 
 void anv_device_init_meta(struct anv_device *device);
+void anv_device_finish_meta(struct anv_device *device);
 
 void
 anv_cmd_buffer_clear(struct anv_cmd_buffer *cmd_buffer,
                      struct anv_render_pass *pass);
 
-void
-anv_cmd_buffer_fill_render_targets(struct anv_cmd_buffer *cmd_buffer);
-
 void *
 anv_lookup_entrypoint(const char *name);