[PATCH vkd3d v2 5/6] vkd3d-shader: Get descriptor info for descriptor arrays.

Conor McCarthy conor.mccarthy6 at bigpond.com
Sun Jul 18 23:47:44 CDT 2021


From: Conor McCarthy <cmccarthy at codeweavers.com>

Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 include/vkd3d_shader.h                | 3 ++-
 libs/vkd3d-shader/spirv.c             | 4 +++-
 libs/vkd3d-shader/vkd3d_shader_main.c | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 03225d37..77758a2b 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -1137,7 +1137,8 @@ struct vkd3d_shader_descriptor_info
      * \ref vkd3d_shader_descriptor_info_flag.
      */
     unsigned int flags;
-    /** Size of this descriptor array, or 1 if a single descriptor. */
+    /** Size of this descriptor array, or 1 if a single descriptor.
+     ** For an unbounded array this value is ~0u. */
     unsigned int count;
 };
 
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c
index 07e79111..98714faa 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -5559,13 +5559,15 @@ static const struct vkd3d_shader_descriptor_info *vkd3d_dxbc_compiler_get_descri
         const struct vkd3d_shader_register_range *range)
 {
     const struct vkd3d_shader_scan_descriptor_info *descriptor_info = compiler->scan_descriptor_info;
+    unsigned int register_last = (range->last == ~0u) ? range->first : range->last;
     const struct vkd3d_shader_descriptor_info *d;
     unsigned int i;
 
     for (i = 0; i < descriptor_info->descriptor_count; ++i)
     {
         d = &descriptor_info->descriptors[i];
-        if (d->type == type && d->register_space == range->space && d->register_index == range->first)
+        if (d->type == type && d->register_space == range->space && d->register_index <= range->first
+                    && (d->count == ~0u || d->count > register_last - d->register_index))
             return d;
     }
 
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 54654f3f..1a566a7b 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -601,7 +601,7 @@ static bool vkd3d_shader_scan_add_descriptor(struct vkd3d_shader_scan_context *c
     d->resource_type = resource_type;
     d->resource_data_type = resource_data_type;
     d->flags = flags;
-    d->count = 1;
+    d->count = (range->last == ~0u) ? ~0u : range->last - range->first + 1;
     ++info->descriptor_count;
 
     return true;
-- 
2.31.1




More information about the wine-devel mailing list