anv: descriptor: make descriptor writing take a stream allocator
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Tue, 17 Jan 2017 17:43:08 +0000 (17:43 +0000)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 2 Mar 2017 10:34:06 +0000 (10:34 +0000)
This allows us to allocate surface states from the command buffer when
pushing descriptor sets rather than allocating them through a
descriptor set pool.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_descriptor_set.c
src/intel/vulkan/anv_private.h

index 2f72c604d56c4a3fd648db0b3308737673704ab5..e4224743eec646f539b87c43b353a73296fdbc27 100644 (file)
@@ -643,6 +643,7 @@ anv_descriptor_set_write_buffer_view(struct anv_descriptor_set *set,
 void
 anv_descriptor_set_write_buffer(struct anv_descriptor_set *set,
                                 struct anv_device *device,
+                                struct anv_state_stream *alloc_stream,
                                 VkDescriptorType type,
                                 struct anv_buffer *buffer,
                                 uint32_t binding,
@@ -672,6 +673,13 @@ anv_descriptor_set_write_buffer(struct anv_descriptor_set *set,
    else
       bview->range = range;
 
+   /* If we're writing descriptors through a push command, we need to allocate
+    * the surface state from the command buffer. Otherwise it will be
+    * allocated by the descriptor pool when calling
+    * vkAllocateDescriptorSets. */
+   if (alloc_stream)
+      bview->surface_state = anv_state_stream_alloc(alloc_stream, 64, 64);
+
    anv_fill_buffer_surface_state(device, bview->surface_state,
                                  bview->format,
                                  bview->offset, bview->range, 1);
@@ -736,6 +744,7 @@ void anv_UpdateDescriptorSets(
 
             anv_descriptor_set_write_buffer(set,
                                             device,
+                                            NULL,
                                             write->descriptorType,
                                             buffer,
                                             write->dstBinding,
index 20376248868cc5abe41effbf8905889014cd6d72..2df69c9a3504bb8dd6d85ef90ba66d0b3322b78c 100644 (file)
@@ -960,6 +960,7 @@ anv_descriptor_set_write_buffer_view(struct anv_descriptor_set *set,
 void
 anv_descriptor_set_write_buffer(struct anv_descriptor_set *set,
                                 struct anv_device *device,
+                                struct anv_state_stream *alloc_stream,
                                 VkDescriptorType type,
                                 struct anv_buffer *buffer,
                                 uint32_t binding,