Mesa (master): nir: Only do gl_FrontFacing workaround in glsl_to_nir for the FS.

Kenneth Graunke kwg at kemper.freedesktop.org
Mon Mar 9 05:37:23 UTC 2015


Module: Mesa
Branch: master
Commit: 8dcc1f2c10b3dc6ded38e7a6c302f60061ba587c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8dcc1f2c10b3dc6ded38e7a6c302f60061ba587c

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Fri Mar  6 01:24:30 2015 -0800

nir: Only do gl_FrontFacing workaround in glsl_to_nir for the FS.

Vertex shaders can have shader inputs where location happens to be
VARYING_SLOT_FACE.  Without predicating this on the shader stage,
we suddenly end up with load_front_face intrinsics in vertex shaders,
which is nonsensical.

Fixes spec/arb_vertex_buffer_object/pos-array when using NIR for VS.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>

---

 src/glsl/nir/glsl_to_nir.cpp |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
index ddad207..047cb51 100644
--- a/src/glsl/nir/glsl_to_nir.cpp
+++ b/src/glsl/nir/glsl_to_nir.cpp
@@ -251,7 +251,8 @@ nir_visitor::visit(ir_variable *ir)
       break;
 
    case ir_var_shader_in:
-      if (ir->data.location == VARYING_SLOT_FACE) {
+      if (stage == MESA_SHADER_FRAGMENT &&
+          ir->data.location == VARYING_SLOT_FACE) {
          /* For whatever reason, GLSL IR makes gl_FrontFacing an input */
          var->data.location = SYSTEM_VALUE_FRONT_FACE;
          var->data.mode = nir_var_system_value;




More information about the mesa-commit mailing list