diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h index 5482beb1..789a4bfb 100644 --- a/include/vkd3d_shader.h +++ b/include/vkd3d_shader.h @@ -137,6 +137,8 @@ struct vkd3d_shader_parameter } u; }; +#define VKD3D_SHADER_DESCRIPTOR_RANGE_UNBOUNDED (~0u) + struct vkd3d_shader_resource_binding { enum vkd3d_shader_descriptor_type type; diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index 850c4101..be4f6e63 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -2399,7 +2399,9 @@ static const struct vkd3d_shader_resource_binding *vkd3d_dxbc_compiler_get_resou if (!vkd3d_dxbc_compiler_check_shader_visibility(compiler, current->shader_visibility)) continue; - if (current->type == descriptor_type && current->register_index == reg_idx && current->register_space == reg_space) + if (descriptor_type == current->type && reg_space == current->register_space && reg_idx >= current->register_index + && (current->register_count == VKD3D_SHADER_DESCRIPTOR_RANGE_UNBOUNDED + || reg_idx < current->register_index + current->register_count)) return current; }