mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/ir: Set merged signature element interpolation mode only from used elements.
This commit is contained in:
parent
759362b527
commit
83851133c5
Notes:
Alexandre Julliard
2024-01-18 23:20:00 +01:00
Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/536
@ -840,6 +840,7 @@ static bool shader_signature_merge(struct shader_signature *s, uint8_t range_map
|
||||
unsigned int i, j, element_count, new_count, register_count;
|
||||
struct signature_element *elements;
|
||||
struct signature_element *e, *f;
|
||||
bool used;
|
||||
|
||||
element_count = s->element_count;
|
||||
if (!(elements = vkd3d_malloc(element_count * sizeof(*elements))))
|
||||
@ -860,6 +861,8 @@ static bool shader_signature_merge(struct shader_signature *s, uint8_t range_map
|
||||
if (range_map_get_register_count(range_map, e->register_index, e->mask) > 1)
|
||||
continue;
|
||||
|
||||
used = e->used_mask;
|
||||
|
||||
for (; j < element_count; ++j)
|
||||
{
|
||||
f = &elements[j];
|
||||
@ -877,6 +880,16 @@ static bool shader_signature_merge(struct shader_signature *s, uint8_t range_map
|
||||
e->mask |= f->mask;
|
||||
e->used_mask |= f->used_mask;
|
||||
e->semantic_index = min(e->semantic_index, f->semantic_index);
|
||||
|
||||
/* The first element may have no interpolation mode if it is unused. Elements which
|
||||
* actually have different interpolation modes are assigned different registers. */
|
||||
if (f->used_mask && !used)
|
||||
{
|
||||
if (e->interpolation_mode && e->interpolation_mode != f->interpolation_mode)
|
||||
FIXME("Mismatching interpolation modes %u and %u.\n", e->interpolation_mode, f->interpolation_mode);
|
||||
else
|
||||
e->interpolation_mode = f->interpolation_mode;
|
||||
}
|
||||
}
|
||||
}
|
||||
element_count = new_count;
|
||||
|
@ -37943,7 +37943,6 @@ static void test_unused_interpolated_input(void)
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
|
||||
|
||||
get_resource_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
|
||||
todo
|
||||
check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 0);
|
||||
release_resource_readback(&rb);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user