nir/spirv: Fix handling of gl_PrimitiveId
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 11 Nov 2016 06:31:32 +0000 (22:31 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 17 Nov 2016 04:07:23 +0000 (20:07 -0800)
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>
src/compiler/spirv/vtn_variables.c

index bbcca14610702e6cea6df538adb3afe43b5bfa59..c064de8d683d98ccc043b0140304872b89aacb2d 100644 (file)
@@ -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;