Module: Mesa
Branch: staging/23.3
Commit: a53c9acd822f9f9e31cc295be6c01bae388b3e98
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a53c9acd822f9f9e31cc295be6c01bae388b3e98

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>
(cherry picked from commit 4c363acf94a04a9a885ed4025e628520354186dc)

---

 .pick_status.json                 | 2 +-
 src/compiler/spirv/spirv_to_nir.c | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index e8838595de7..ba9a2edf7b5 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -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
diff --git a/src/compiler/spirv/spirv_to_nir.c 
b/src/compiler/spirv/spirv_to_nir.c
index 2587c866723..5f36118c704 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;

Reply via email to