summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2016-11-10 22:31:32 -0800
committerEmil Velikov <emil.l.velikov@gmail.com>2016-11-24 16:34:40 +0000
commit90bf0cb3132304be406efb153a9dcdc245335a26 (patch)
tree79cb262abb5e645489edfbb2cd2f7f3cd426c07f
parent4c21d20dcf6df4eb83a403e9796f5196a8512377 (diff)
downloadexternal_mesa3d-90bf0cb3132304be406efb153a9dcdc245335a26.zip
external_mesa3d-90bf0cb3132304be406efb153a9dcdc245335a26.tar.gz
external_mesa3d-90bf0cb3132304be406efb153a9dcdc245335a26.tar.bz2
nir/spirv: Fix handling of gl_PrimitiveId
Before, we were always treating it as an output which bogus. The only stage in which this it can be an output is the geometry stage. In all other stages, it's an input which, in the back-end, we actually want to be a system value. Cc: "13.0" <mesa-stable@lists.freedesktop.org> Reviewed-by: Dave Airlie <airlied@redhat.com> (cherry picked from commit 955714759257e81f01f013c84d2bd7f14a0ec04f)
-rw-r--r--src/compiler/spirv/vtn_variables.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c
index 634058c..b66ceb2 100644
--- a/src/compiler/spirv/vtn_variables.c
+++ b/src/compiler/spirv/vtn_variables.c
@@ -805,8 +805,12 @@ vtn_get_builtin_location(struct vtn_builder *b,
set_mode_system_value(mode);
break;
case SpvBuiltInPrimitiveId:
- *location = VARYING_SLOT_PRIMITIVE_ID;
- *mode = nir_var_shader_out;
+ if (*mode == nir_var_shader_out) {
+ *location = VARYING_SLOT_PRIMITIVE_ID;
+ } else {
+ *location = SYSTEM_VALUE_PRIMITIVE_ID;
+ set_mode_system_value(mode);
+ }
break;
case SpvBuiltInInvocationId:
*location = SYSTEM_VALUE_INVOCATION_ID;