From 12dee851a3108aabaa80b5c05a633b4bb3d4023b Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 17 Jan 2017 17:43:08 +0000 Subject: [PATCH] anv: descriptor: make descriptor writing take a stream allocator 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 Reviewed-by: Jason Ekstrand --- src/intel/vulkan/anv_descriptor_set.c | 9 +++++++++ src/intel/vulkan/anv_private.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 2f72c60..e4224743 100644 --- a/src/intel/vulkan/anv_descriptor_set.c +++ b/src/intel/vulkan/anv_descriptor_set.c @@ -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, diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 2037624..2df69c9 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -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, -- 2.7.4