vkd3d-shader: Get descriptor info for descriptor arrays.

Signed-off-by: Conor McCarthy <cmccarthy@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Conor McCarthy 2021-07-23 23:01:38 +10:00 committed by Alexandre Julliard
parent 85eff9373d
commit a97d090010
3 changed files with 8 additions and 3 deletions

View File

@ -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;
};

View File

@ -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;
}

View File

@ -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;