vkd3d-shader/spirv: Do not require VKD3D_SHADER_BINDING_FLAG_IMAGE for sampler descriptors.

This commit is contained in:
Henri Verbeet
2025-06-19 17:15:39 +02:00
parent 83979ec07a
commit e5bf48a2ba
Notes: Henri Verbeet 2025-06-23 20:18:40 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1579
2 changed files with 8 additions and 4 deletions

View File

@@ -3522,8 +3522,12 @@ static struct vkd3d_shader_descriptor_binding spirv_compiler_get_descriptor_bind
goto done; goto done;
} }
resource_type_flag = resource_type == VKD3D_SHADER_RESOURCE_BUFFER if (resource_type == VKD3D_SHADER_RESOURCE_NONE)
? VKD3D_SHADER_BINDING_FLAG_BUFFER : VKD3D_SHADER_BINDING_FLAG_IMAGE; resource_type_flag = 0;
else if (resource_type == VKD3D_SHADER_RESOURCE_BUFFER)
resource_type_flag = VKD3D_SHADER_BINDING_FLAG_BUFFER;
else
resource_type_flag = VKD3D_SHADER_BINDING_FLAG_IMAGE;
if (is_uav_counter) if (is_uav_counter)
{ {
@@ -3567,7 +3571,7 @@ static struct vkd3d_shader_descriptor_binding spirv_compiler_get_descriptor_bind
{ {
const struct vkd3d_shader_resource_binding *current = &shader_interface->bindings[i]; const struct vkd3d_shader_resource_binding *current = &shader_interface->bindings[i];
if (!(current->flags & resource_type_flag)) if ((current->flags & resource_type_flag) != resource_type_flag)
continue; continue;
if (!spirv_compiler_check_shader_visibility(compiler, current->shader_visibility)) if (!spirv_compiler_check_shader_visibility(compiler, current->shader_visibility))

View File

@@ -438,7 +438,7 @@ static bool compile_d3d_code(struct vulkan_shader_runner *runner,
binding->register_space = 0; binding->register_space = 0;
binding->register_index = runner->r.samplers[i].slot; binding->register_index = runner->r.samplers[i].slot;
binding->shader_visibility = VKD3D_SHADER_VISIBILITY_ALL; binding->shader_visibility = VKD3D_SHADER_VISIBILITY_ALL;
binding->flags = VKD3D_SHADER_BINDING_FLAG_IMAGE; binding->flags = 0;
binding->binding.set = 0; binding->binding.set = 0;
binding->binding.binding = runner->samplers[i].binding; binding->binding.binding = runner->samplers[i].binding;
binding->binding.count = 1; binding->binding.count = 1;