[PATCH vkd3d v3 4/5] vkd3d-shader: Get descriptor info for descriptor arrays.
Conor McCarthy
cmccarthy at codeweavers.com
Fri Jul 23 08:01:38 CDT 2021
Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
include/vkd3d_shader.h | 5 ++++-
libs/vkd3d-shader/spirv.c | 4 +++-
libs/vkd3d-shader/vkd3d_shader_main.c | 2 +-
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 0e011343..6cdbaf1e 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -1137,7 +1137,10 @@ 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 d4debc86..ac88e283 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -5571,13 +5571,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.32.0
More information about the wine-devel
mailing list