diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-11-10 22:31:32 -0800 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2016-11-24 16:34:40 +0000 |
commit | 90bf0cb3132304be406efb153a9dcdc245335a26 (patch) | |
tree | 79cb262abb5e645489edfbb2cd2f7f3cd426c07f | |
parent | 4c21d20dcf6df4eb83a403e9796f5196a8512377 (diff) | |
download | external_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.c | 8 |
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; |