diff options
-rw-r--r-- | src/intel/vulkan/anv_descriptor_set.c | 9 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_descriptor_set.c b/src/intel/vulkan/anv_descriptor_set.c index 2f72c604d56..e4224743eec 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 20376248868..2df69c9a350 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, |