Conor McCarthy : vkd3d-shader: Get descriptor info for descriptor arrays.
Alexandre Julliard
julliard at winehq.org
Mon Jul 26 15:28:33 CDT 2021
Module: vkd3d
Branch: master
Commit: a97d090010c7a0aa7c8a0009334b3a1fab9f8aac
URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=a97d090010c7a0aa7c8a0009334b3a1fab9f8aac
Author: Conor McCarthy <cmccarthy at codeweavers.com>
Date: Fri Jul 23 23:01:38 2021 +1000
vkd3d-shader: Get descriptor info for descriptor arrays.
Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 0e01134..6cdbaf1 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 f164322..ea02004 100644
--- a/libs/vkd3d-shader/spirv.c
+++ b/libs/vkd3d-shader/spirv.c
@@ -5541,13 +5541,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 54654f3..1a566a7 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;
More information about the wine-cvs
mailing list