summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2017-08-23 13:19:45 -0700
committerIan Romanick <ian.d.romanick@intel.com>2018-03-29 14:16:12 -0700
commit21cb5e378c4e72bfbca655872d5879aa81ab6c23 (patch)
treefb053f4feefc367b78d300c2077c45b221f47d65
parentc32b68f7f49ede69583e6d446efb1f55ddba6855 (diff)
glsl/spirv: Emit GLSL geometry shader special output variables in SPIR-V
-rw-r--r--src/compiler/glsl/glsl_to_spirv.cpp6
-rw-r--r--src/compiler/glsl/tests/emit_spirv_variables_test.cpp28
2 files changed, 33 insertions, 1 deletions
diff --git a/src/compiler/glsl/glsl_to_spirv.cpp b/src/compiler/glsl/glsl_to_spirv.cpp
index 8c3ab18bf92..7dab88d56ef 100644
--- a/src/compiler/glsl/glsl_to_spirv.cpp
+++ b/src/compiler/glsl/glsl_to_spirv.cpp
@@ -668,6 +668,11 @@ _mesa_spirv_program::emit_variable(const ir_variable *var,
/* FINISHME: Handle gl_ClipDistance / gl_CullDistance. */
break;
+ case VARYING_SLOT_PRIMITIVE_ID:
+ assert(stage == MESA_SHADER_GEOMETRY);
+ builtin = SpvBuiltInPrimitiveId;
+ break;
+
case VARYING_SLOT_LAYER:
if (stage != MESA_SHADER_GEOMETRY)
capabilities.enable(SpvCapabilityShaderViewportIndexLayerEXT);
@@ -697,7 +702,6 @@ _mesa_spirv_program::emit_variable(const ir_variable *var,
/* FINISHME: Handle gl_BoundingBox. */
break;
- case VARYING_SLOT_PRIMITIVE_ID:
case VARYING_SLOT_FACE:
case VARYING_SLOT_PNTC:
case VARYING_SLOT_EDGE:
diff --git a/src/compiler/glsl/tests/emit_spirv_variables_test.cpp b/src/compiler/glsl/tests/emit_spirv_variables_test.cpp
index 446cf000dd4..4fa94a34644 100644
--- a/src/compiler/glsl/tests/emit_spirv_variables_test.cpp
+++ b/src/compiler/glsl/tests/emit_spirv_variables_test.cpp
@@ -999,6 +999,14 @@ TEST_F(validate_emit_geometry_variable, input_gl_PrimitiveIDIn)
0x00000007);
}
+TEST_F(validate_emit_geometry_variable, output_gl_PrimitiveID)
+{
+ check_builtin_output(shader_output(VARYING_SLOT_PRIMITIVE_ID,
+ glsl_type::int_type,
+ "gl_PrimitiveID"),
+ 0x00000007);
+}
+
TEST_F(validate_emit_fragment_variable, input_gl_PrimitiveID)
{
spv->capabilities.enable(SpvCapabilityGeometry);
@@ -1039,6 +1047,16 @@ TEST_F(validate_emit_fragment_variable, input_gl_Layer)
0x00000009);
}
+TEST_F(validate_emit_geometry_variable, output_gl_Layer)
+{
+ check_builtin_output(shader_output(VARYING_SLOT_LAYER,
+ glsl_type::int_type,
+ "gl_Layer"),
+ 0x00000009);
+
+ EXPECT_TRUE(spv->capabilities.is_enabled(SpvCapabilityGeometry));
+}
+
TEST_F(validate_emit_vertex_variable, output_gl_ViewportIndex)
{
spv->capabilities.enable(SpvCapabilityGeometry);
@@ -1055,6 +1073,16 @@ TEST_F(validate_emit_vertex_variable, output_gl_ViewportIndex)
EXPECT_TRUE(spv->capabilities.is_enabled(SpvCapabilityShaderViewportIndexLayerEXT));
}
+TEST_F(validate_emit_geometry_variable, output_gl_ViewportIndex)
+{
+ check_builtin_output(shader_output(VARYING_SLOT_VIEWPORT,
+ glsl_type::int_type,
+ "gl_ViewportIndex"),
+ 0x0000000a);
+
+ EXPECT_TRUE(spv->capabilities.is_enabled(SpvCapabilityMultiViewport));
+}
+
TEST_F(validate_emit_fragment_variable, input_gl_ViewportIndex)
{
check_builtin_input(shader_input(VARYING_SLOT_VIEWPORT,