vtn: Allow for OpCopyLogical with different but compatible types

> Result Type must not equal the type of Operand (see OpCopyObject),
> but Result Type must logically match the Operand type.

Allow for this by setting the expected type and making sure, that both
types match.

cc: mesa-stable

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10163
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26252>
(cherry picked from commit 4c363acf94)
This commit is contained in:
Konstantin Seurer 2023-11-17 13:39:52 +01:00 committed by Eric Engestrom
parent 1c476c7742
commit a53c9acd82
2 changed files with 6 additions and 2 deletions

View file

@ -174,7 +174,7 @@
"description": "vtn: Allow for OpCopyLogical with different but compatible types",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -4375,9 +4375,13 @@ vtn_handle_composite(struct vtn_builder *b, SpvOp opcode,
w + 5, count - 5);
break;
case SpvOpCopyLogical:
case SpvOpCopyLogical: {
ssa = vtn_composite_copy(b, vtn_ssa_value(b, w[3]));
struct vtn_type *dst_type = vtn_get_value_type(b, w[2]);
vtn_assert(vtn_types_compatible(b, type, dst_type));
ssa->type = glsl_get_bare_type(dst_type->type);
break;
}
case SpvOpCopyObject:
vtn_copy_value(b, w[3], w[2]);
return;