<div dir="auto"><div>Bah... It's definitely illegal.  I had fix glslang myself.  I have some NIR reworks planned that would make this work "properly" but it's a bit more complicated than this hack.  That said, I'm very reluctant to fix app bugs in our driver.  There are a lot of ways apps can go wrong with Vulkan and we don't want to start down the road of hacking around them.<br><div class="gmail_extra"><br><div class="gmail_quote">On Dec 22, 2016 22:57, "Dave Airlie" <<a href="mailto:airlied@gmail.com">airlied@gmail.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Dave Airlie <<a href="mailto:airlied@redhat.com">airlied@redhat.com</a>><br>
<br>
Doom appears to generate SPIR-V that loads/store samplers before<br>
passing them to functions, this confuses NIR, but I'm not sure<br>
it's illegal.<br>
<br>
Workaround this by replacing the value on store with the access<br>
chain from the src.<br>
<br>
This gets doom a bit further.<br>
<br>
Signed-off-by: Dave Airlie <<a href="mailto:airlied@redhat.com">airlied@redhat.com</a>><br>
---<br>
 src/compiler/spirv/vtn_<wbr>variables.c | 8 ++++++++<br>
 1 file changed, 8 insertions(+)<br>
<br>
diff --git a/src/compiler/spirv/vtn_<wbr>variables.c b/src/compiler/spirv/vtn_<wbr>variables.c<br>
index be64dd9..f6672c0 100644<br>
--- a/src/compiler/spirv/vtn_<wbr>variables.c<br>
+++ b/src/compiler/spirv/vtn_<wbr>variables.c<br>
@@ -1437,6 +1437,14 @@ vtn_handle_variables(struct vtn_builder *b, SpvOp opcode,<br>
    case SpvOpStore: {<br>
       struct vtn_access_chain *dest =<br>
          vtn_value(b, w[1], vtn_value_type_access_chain)-><wbr>access_chain;<br>
+<br>
+      if (glsl_get_base_type(dest->var-<wbr>>type->type) == GLSL_TYPE_SAMPLER) {<br>
+         struct vtn_value *val = vtn_untyped_value(b, w[2]);<br>
+         dest->var = val->access_chain->var;<br>
+         b->values[w[1]].value_type = vtn_value_type_invalid;<br>
+         vtn_push_value(b, w[1], vtn_value_type_access_chain)-><wbr>access_chain = val->access_chain;<br>
+         return;<br>
+      }<br>
       struct vtn_ssa_value *src = vtn_ssa_value(b, w[2]);<br>
       vtn_variable_store(b, src, dest);<br>
       break;<br>
<font color="#888888">--<br>
2.7.4<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></blockquote></div><br></div></div></div>