vkd3d-shader/ir: Merge tess factor used masks together.

Encountered with the domain shader in
test_domain_shader_one_patch_constant_input().
This commit is contained in:
Elizabeth Figura
2025-05-12 14:08:40 -05:00
committed by Henri Verbeet
parent d4032f7d09
commit d40422592a
Notes: Henri Verbeet 2025-05-14 15:26:55 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1493

View File

@@ -2048,23 +2048,27 @@ static enum vkd3d_result shader_signature_map_patch_constant_index_ranges(struct
for (i = 0; i < s->element_count; i += register_count) for (i = 0; i < s->element_count; i += register_count)
{ {
uint32_t used_mask;
e = &s->elements[i]; e = &s->elements[i];
register_count = 1; register_count = 1;
if (!e->sysval_semantic) if (!e->sysval_semantic)
continue; continue;
used_mask = e->used_mask;
for (j = i + 1; j < s->element_count; ++j, ++register_count) for (j = i + 1; j < s->element_count; ++j, ++register_count)
{ {
f = &s->elements[j]; f = &s->elements[j];
if (f->register_index != e->register_index + register_count || !sysval_semantics_should_merge(e, f)) if (f->register_index != e->register_index + register_count || !sysval_semantics_should_merge(e, f))
break; break;
used_mask |= f->used_mask;
} }
if (register_count < 2) if (register_count < 2)
continue; continue;
if ((ret = range_map_set_register_range(normaliser, range_map, if ((ret = range_map_set_register_range(normaliser, range_map,
e->register_index, register_count, e->mask, e->used_mask, false)) < 0) e->register_index, register_count, e->mask, used_mask, false)) < 0)
return ret; return ret;
} }