vkd3d-shader/msl: Allow binding to descriptor arrays.

This requires merging adjacent bindings in the Metal shader runner,
mostly like 805a4bc1e8 did for the
d3d12 backend.
This commit is contained in:
Giovanni Mascellani
2025-10-20 22:57:40 +02:00
committed by Henri Verbeet
parent 82619e81c3
commit eaabd2ffd7
Notes: Henri Verbeet 2025-10-30 20:00:07 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1757
2 changed files with 28 additions and 7 deletions

View File

@@ -226,14 +226,22 @@ static bool msl_get_binding(const struct msl_generator *gen, const struct vkd3d_
continue;
if (binding->register_space != descriptor->register_space)
continue;
if (binding->register_index != register_idx)
if (binding->register_index > descriptor->register_index)
continue;
if (descriptor->count != ~0u && binding->binding.count < descriptor->count)
continue;
if (descriptor->count != ~0u
&& binding->binding.count - descriptor->count < descriptor->register_index - binding->register_index)
continue;
if (descriptor->count == ~0u
&& binding->binding.count <= descriptor->register_index - binding->register_index)
continue;
if (!msl_check_shader_visibility(gen, binding->shader_visibility))
continue;
if ((binding->flags & flags) != flags)
continue;
*idx = binding->binding.binding;
*idx = register_idx + binding->binding.binding - binding->register_index;
return true;
}