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

Author: Jesse Natalie <[email protected]>
Date:   Mon Mar 27 11:08:50 2023 -0700

dzn: Align descriptor sets in the bindless buffer

Fixes: 5d2b4ee4 ("dzn: Allocate descriptor sets in buffers for bindless mode")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22225>

---

 src/microsoft/vulkan/dzn_descriptor_set.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/microsoft/vulkan/dzn_descriptor_set.c 
b/src/microsoft/vulkan/dzn_descriptor_set.c
index e822a465d6f..7a83d77146e 100644
--- a/src/microsoft/vulkan/dzn_descriptor_set.c
+++ b/src/microsoft/vulkan/dzn_descriptor_set.c
@@ -1591,8 +1591,10 @@ dzn_descriptor_set_init(struct dzn_descriptor_set *set,
    if (!reuse) {
       dzn_foreach_pool_type(type) {
          set->heap_offsets[type] = pool->free_offset[type];
+         if (device->bindless)
+            set->heap_offsets[type] = ALIGN(set->heap_offsets[type], 2);
          set->heap_sizes[type] = layout->range_desc_count[type] + 
variable_descriptor_count[type];
-         set->pool->free_offset[type] += set->heap_sizes[type];
+         set->pool->free_offset[type] = set->heap_offsets[type] + 
set->heap_sizes[type];
       }
    }
 
@@ -1725,6 +1727,12 @@ dzn_descriptor_pool_create(struct dzn_device *device,
 
    if (device->bindless) {
       if (pool->desc_count[0]) {
+         /* Include extra descriptors so that we can align each allocated 
descriptor set to a 16-byte boundary */
+         static_assert(D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT / sizeof(struct 
dxil_spirv_bindless_entry) == 2,
+                       "Ensure only one extra descriptor is needed to produce 
correct alignments");
+         uint32_t extra_descriptors = pool->set_count - 1;
+         pool->desc_count[0] += extra_descriptors;
+
          /* Going to raw APIs to avoid allocating descriptors for this */
          D3D12_RESOURCE_DESC buf_desc = {
             .Dimension = D3D12_RESOURCE_DIMENSION_BUFFER,

Reply via email to