From: Jason Ekstrand Date: Fri, 11 Nov 2016 06:31:32 +0000 (-0800) Subject: nir/spirv: Fix handling of gl_PrimitiveId X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=955714759257e81f01f013c84d2bd7f14a0ec04f;p=mesa.git 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" Reviewed-by: Dave Airlie --- diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index bbcca146107..c064de8d683 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -806,8 +806,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;