Mesa (main): radv: Split off cmd_buffer variant of descriptor set updates

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 4 07:53:06 UTC 2021


Module: Mesa
Branch: main
Commit: 4865cb6514e4109a6e344ffd9c139afc568abef8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4865cb6514e4109a6e344ffd9c139afc568abef8

Author: Joshua Ashton <joshua at froggi.es>
Date:   Thu Oct 14 13:15:51 2021 +0100

radv: Split off cmd_buffer variant of descriptor set updates

Assumes cmd_buffer != NULL for this path to eliminate the checks in the generic code.

Signed-off-by: Joshua Ashton <joshua at froggi.es>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13342>

---

 src/amd/vulkan/radv_cmd_buffer.c     | 12 ++++++------
 src/amd/vulkan/radv_descriptor_set.c | 29 +++++++++++++++++++++--------
 src/amd/vulkan/radv_private.h        | 10 +++++-----
 3 files changed, 32 insertions(+), 19 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index c805ff1220f..9fea76deebc 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -4672,9 +4672,9 @@ radv_meta_push_descriptor_set(struct radv_cmd_buffer *cmd_buffer,
    push_set->header.va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
    push_set->header.va += bo_offset;
 
-   radv_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
-                               radv_descriptor_set_to_handle(push_set), descriptorWriteCount,
-                               pDescriptorWrites, 0, NULL);
+   radv_cmd_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
+                                   radv_descriptor_set_to_handle(push_set), descriptorWriteCount,
+                                   pDescriptorWrites, 0, NULL);
 
    radv_set_descriptor_set(cmd_buffer, pipelineBindPoint, push_set, set);
 }
@@ -4705,9 +4705,9 @@ radv_CmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, VkPipelineBindPoint
       assert(writeset->descriptorType != VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT);
    }
 
-   radv_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
-                               radv_descriptor_set_to_handle(push_set), descriptorWriteCount,
-                               pDescriptorWrites, 0, NULL);
+   radv_cmd_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
+                                   radv_descriptor_set_to_handle(push_set), descriptorWriteCount,
+                                   pDescriptorWrites, 0, NULL);
 
    radv_set_descriptor_set(cmd_buffer, pipelineBindPoint, push_set, set);
    descriptors_state->push_dirty = true;
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
index 222b3ca2977..f0ff13822aa 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -1117,12 +1117,12 @@ write_accel_struct(void *ptr, VkAccelerationStructureKHR _accel_struct)
    memcpy(ptr, &va, sizeof(va));
 }
 
-void
-radv_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
-                            VkDescriptorSet dstSetOverride, uint32_t descriptorWriteCount,
-                            const VkWriteDescriptorSet *pDescriptorWrites,
-                            uint32_t descriptorCopyCount,
-                            const VkCopyDescriptorSet *pDescriptorCopies)
+static ALWAYS_INLINE void
+radv_update_descriptor_sets_impl(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
+                                 VkDescriptorSet dstSetOverride, uint32_t descriptorWriteCount,
+                                 const VkWriteDescriptorSet *pDescriptorWrites,
+                                 uint32_t descriptorCopyCount,
+                                 const VkCopyDescriptorSet *pDescriptorCopies)
 {
    uint32_t i, j;
    for (i = 0; i < descriptorWriteCount; i++) {
@@ -1293,8 +1293,21 @@ radv_UpdateDescriptorSets(VkDevice _device, uint32_t descriptorWriteCount,
 {
    RADV_FROM_HANDLE(radv_device, device, _device);
 
-   radv_update_descriptor_sets(device, NULL, VK_NULL_HANDLE, descriptorWriteCount,
-                               pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
+   radv_update_descriptor_sets_impl(device, NULL, VK_NULL_HANDLE, descriptorWriteCount,
+                                    pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
+}
+
+void
+radv_cmd_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
+                                VkDescriptorSet dstSetOverride, uint32_t descriptorWriteCount,
+                                const VkWriteDescriptorSet *pDescriptorWrites,
+                                uint32_t descriptorCopyCount,
+                                const VkCopyDescriptorSet *pDescriptorCopies)
+{
+   /* Assume cmd_buffer != NULL to optimize out cmd_buffer checks in generic code above. */
+   assume(cmd_buffer != NULL);
+   radv_update_descriptor_sets_impl(device, cmd_buffer, dstSetOverride, descriptorWriteCount,
+                                    pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
 }
 
 VkResult
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 4fc60d66aff..8d981f1cebd 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -2577,11 +2577,11 @@ bool radv_queue_internal_submit(struct radv_queue *queue, struct radeon_cmdbuf *
 void radv_set_descriptor_set(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bind_point,
                              struct radv_descriptor_set *set, unsigned idx);
 
-void radv_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
-                                 VkDescriptorSet overrideSet, uint32_t descriptorWriteCount,
-                                 const VkWriteDescriptorSet *pDescriptorWrites,
-                                 uint32_t descriptorCopyCount,
-                                 const VkCopyDescriptorSet *pDescriptorCopies);
+void radv_cmd_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
+                                     VkDescriptorSet overrideSet, uint32_t descriptorWriteCount,
+                                     const VkWriteDescriptorSet *pDescriptorWrites,
+                                     uint32_t descriptorCopyCount,
+                                     const VkCopyDescriptorSet *pDescriptorCopies);
 
 void radv_update_descriptor_set_with_template(struct radv_device *device,
                                               struct radv_cmd_buffer *cmd_buffer,



More information about the mesa-commit mailing list