Module: Mesa Branch: main Commit: 4c363acf94a04a9a885ed4025e628520354186dc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4c363acf94a04a9a885ed4025e628520354186dc
Author: Konstantin Seurer <konstantin.seu...@gmail.com> Date: Fri Nov 17 13:39:52 2023 +0100 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 <dadschoo...@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26252> --- src/compiler/spirv/spirv_to_nir.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index b2b910cb7a5..2b3ed49c035 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -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;