diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2017-08-23 13:19:45 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2018-03-29 14:16:12 -0700 |
commit | 21cb5e378c4e72bfbca655872d5879aa81ab6c23 (patch) | |
tree | fb053f4feefc367b78d300c2077c45b221f47d65 | |
parent | c32b68f7f49ede69583e6d446efb1f55ddba6855 (diff) |
glsl/spirv: Emit GLSL geometry shader special output variables in SPIR-V
-rw-r--r-- | src/compiler/glsl/glsl_to_spirv.cpp | 6 | ||||
-rw-r--r-- | src/compiler/glsl/tests/emit_spirv_variables_test.cpp | 28 |
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, |