Test execution modes set only in Tess Control Shader
This change adds 9 tests that set execution modes just in Control
Shader and check if TessCoord builtin has correct value in Evaluation
shader.
Components: Vulkan
VK-GL-CTS issue: 2194
Affects:
dEQP-VK.tessellation.tesscoord.*_execution_mode_in_tesc
Change-Id: I5d7aaf04e867ddeef6e7cdd77775bb967d4189bb
diff --git a/android/cts/master/vk-master-2020-03-01.txt b/android/cts/master/vk-master-2020-03-01.txt
index 250c23c..9d8a94e 100644
--- a/android/cts/master/vk-master-2020-03-01.txt
+++ b/android/cts/master/vk-master-2020-03-01.txt
@@ -156989,6 +156989,15 @@
dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16_r16_3plane_444_unorm.128_128_8
dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16_r16_3plane_444_unorm.503_137_3
dEQP-VK.sparse_resources.shader_intrinsics.2d_array_sparse_gather.g16_b16_r16_3plane_444_unorm.11_37_3
+dEQP-VK.tessellation.tesscoord.triangles_equal_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.triangles_fractional_odd_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.triangles_fractional_even_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.quads_equal_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.quads_fractional_odd_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.quads_fractional_even_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.isolines_equal_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.isolines_fractional_odd_spacing_execution_mode_in_tesc
+dEQP-VK.tessellation.tesscoord.isolines_fractional_even_spacing_execution_mode_in_tesc
dEQP-VK.rasterization.primitives.no_stipple.strict_lines
dEQP-VK.rasterization.primitives.no_stipple.strict_line_strip
dEQP-VK.rasterization.primitives.no_stipple.strict_lines_wide
diff --git a/android/cts/master/vk-master.txt b/android/cts/master/vk-master.txt
index ca0b81f..80699b0 100644
--- a/android/cts/master/vk-master.txt
+++ b/android/cts/master/vk-master.txt
Binary files differ
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp
index 1c6e5e7..ee71ae4 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationCoordinatesTests.cpp
@@ -62,10 +62,12 @@
bool operator() (const T& a, const T& b) const { return a.size() < b.size(); }
};
-std::string getCaseName (const TessPrimitiveType primitiveType, const SpacingMode spacingMode)
+std::string getCaseName (const TessPrimitiveType primitiveType, const SpacingMode spacingMode, bool executionModeInEvaluationShader)
{
std::ostringstream str;
str << getTessPrimitiveTypeShaderName(primitiveType) << "_" << getSpacingModeShaderName(spacingMode);
+ if (!executionModeInEvaluationShader)
+ str << "_execution_mode_in_tesc";
return str.str();
}
@@ -365,7 +367,8 @@
public:
TessCoordTest (tcu::TestContext& testCtx,
const TessPrimitiveType primitiveType,
- const SpacingMode spacingMode);
+ const SpacingMode spacingMode,
+ const bool executionModeInEvaluationShader = true);
void initPrograms (SourceCollections& programCollection) const;
TestInstance* createInstance (Context& context) const;
@@ -373,83 +376,249 @@
private:
const TessPrimitiveType m_primitiveType;
const SpacingMode m_spacingMode;
+ const bool m_executionModeInEvaluationShader;
};
TessCoordTest::TessCoordTest (tcu::TestContext& testCtx,
const TessPrimitiveType primitiveType,
- const SpacingMode spacingMode)
- : TestCase (testCtx, getCaseName(primitiveType, spacingMode), "")
- , m_primitiveType (primitiveType)
- , m_spacingMode (spacingMode)
+ const SpacingMode spacingMode,
+ const bool executionModeInEvaluationShader)
+ : TestCase (testCtx, getCaseName(primitiveType, spacingMode, executionModeInEvaluationShader), "")
+ , m_primitiveType (primitiveType)
+ , m_spacingMode (spacingMode)
+ , m_executionModeInEvaluationShader (executionModeInEvaluationShader)
{
}
void TessCoordTest::initPrograms (SourceCollections& programCollection) const
{
- // Vertex shader - no inputs
+ if (m_executionModeInEvaluationShader)
{
- std::ostringstream src;
- src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n"
- << "\n"
- << "void main (void)\n"
- << "{\n"
- << "}\n";
+ // Vertex shader - no inputs
+ {
+ std::ostringstream src;
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << "}\n";
- programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+ programCollection.glslSources.add("vert") << glu::VertexSource(src.str());
+ }
+
+ // Tessellation control shader
+ {
+ std::ostringstream src;
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n"
+ << "#extension GL_EXT_tessellation_shader : require\n"
+ << "\n"
+ << "layout(vertices = 1) out;\n"
+ << "\n"
+ << "layout(set = 0, binding = 0, std430) readonly restrict buffer TessLevels {\n"
+ << " float inner0;\n"
+ << " float inner1;\n"
+ << " float outer0;\n"
+ << " float outer1;\n"
+ << " float outer2;\n"
+ << " float outer3;\n"
+ << "} sb_levels;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " gl_TessLevelInner[0] = sb_levels.inner0;\n"
+ << " gl_TessLevelInner[1] = sb_levels.inner1;\n"
+ << "\n"
+ << " gl_TessLevelOuter[0] = sb_levels.outer0;\n"
+ << " gl_TessLevelOuter[1] = sb_levels.outer1;\n"
+ << " gl_TessLevelOuter[2] = sb_levels.outer2;\n"
+ << " gl_TessLevelOuter[3] = sb_levels.outer3;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("tesc") << glu::TessellationControlSource(src.str());
+ }
+
+ // Tessellation evaluation shader
+ {
+ std::ostringstream src;
+ src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n"
+ << "#extension GL_EXT_tessellation_shader : require\n"
+ << "\n"
+ << "layout(" << getTessPrimitiveTypeShaderName(m_primitiveType) << ", "
+ << getSpacingModeShaderName(m_spacingMode) << ", point_mode) in;\n" << "\n"
+ << "layout(set = 0, binding = 1, std430) coherent restrict buffer Output {\n"
+ << " int numInvocations;\n"
+ << " vec3 tessCoord[];\n" // alignment is 16 bytes, same as vec4
+ << "} sb_out;\n"
+ << "\n"
+ << "void main (void)\n"
+ << "{\n"
+ << " int index = atomicAdd(sb_out.numInvocations, 1);\n"
+ << " sb_out.tessCoord[index] = gl_TessCoord;\n"
+ << "}\n";
+
+ programCollection.glslSources.add("tese") << glu::TessellationEvaluationSource(src.str());
+ }
}
-
- // Tessellation control shader
+ else
{
- std::ostringstream src;
- src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n"
- << "#extension GL_EXT_tessellation_shader : require\n"
- << "\n"
- << "layout(vertices = 1) out;\n"
- << "\n"
- << "layout(set = 0, binding = 0, std430) readonly restrict buffer TessLevels {\n"
- << " float inner0;\n"
- << " float inner1;\n"
- << " float outer0;\n"
- << " float outer1;\n"
- << " float outer2;\n"
- << " float outer3;\n"
- << "} sb_levels;\n"
- << "\n"
- << "void main (void)\n"
- << "{\n"
- << " gl_TessLevelInner[0] = sb_levels.inner0;\n"
- << " gl_TessLevelInner[1] = sb_levels.inner1;\n"
- << "\n"
- << " gl_TessLevelOuter[0] = sb_levels.outer0;\n"
- << " gl_TessLevelOuter[1] = sb_levels.outer1;\n"
- << " gl_TessLevelOuter[2] = sb_levels.outer2;\n"
- << " gl_TessLevelOuter[3] = sb_levels.outer3;\n"
- << "}\n";
+ // note: spirv code for all stages coresponds to glsl version above
- programCollection.glslSources.add("tesc") << glu::TessellationControlSource(src.str());
- }
+ programCollection.spirvAsmSources.add("vert")
+ << "OpCapability Shader\n"
+ "%glsl_ext_inst = OpExtInstImport \"GLSL.std.450\"\n"
+ "OpMemoryModel Logical GLSL450\n"
+ "OpEntryPoint Vertex %main_fun \"main\"\n"
+ "%type_void = OpTypeVoid\n"
+ "%type_void_f = OpTypeFunction %type_void\n"
+ "%main_fun = OpFunction %type_void None %type_void_f\n"
+ "%main_label = OpLabel\n"
+ "OpReturn\n"
+ "OpFunctionEnd\n";
- // Tessellation evaluation shader
- {
- std::ostringstream src;
- src << glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_310_ES) << "\n"
- << "#extension GL_EXT_tessellation_shader : require\n"
- << "\n"
- << "layout(" << getTessPrimitiveTypeShaderName(m_primitiveType) << ", "
- << getSpacingModeShaderName(m_spacingMode) << ", point_mode) in;\n"
- << "\n"
- << "layout(set = 0, binding = 1, std430) coherent restrict buffer Output {\n"
- << " int numInvocations;\n"
- << " vec3 tessCoord[];\n" // alignment is 16 bytes, same as vec4
- << "} sb_out;\n"
- << "\n"
- << "void main (void)\n"
- << "{\n"
- << " int index = atomicAdd(sb_out.numInvocations, 1);\n"
- << " sb_out.tessCoord[index] = gl_TessCoord;\n"
- << "}\n";
+ // glsl requires primitive_mode, vertex_spacing, ordering and point_mode layout qualifiers to be defined in
+ // tessellation evaluation shader while spirv allows corresponding execution modes to be defined in TES and/or
+ // TCS; here we test using execution modes only in TCS as TES is tested with glsl version of tests
- programCollection.glslSources.add("tese") << glu::TessellationEvaluationSource(src.str());
+ const std::string executionMode =
+ std::string("OpExecutionMode %main_fun ") + getTessPrimitiveTypeShaderName(m_primitiveType, true) + "\n"
+ "OpExecutionMode %main_fun " + getSpacingModeShaderName(m_spacingMode, true) + "\n" +
+ "OpExecutionMode %main_fun PointMode\n"
+ "OpExecutionMode %main_fun VertexOrderCcw\n";
+
+ std::string tescSrc =
+ "OpCapability Tessellation\n"
+ "%glsl_ext_inst = OpExtInstImport \"GLSL.std.450\"\n"
+ "OpMemoryModel Logical GLSL450\n"
+ "OpEntryPoint TessellationControl %main_fun \"main\" %var_tess_level_inner %var_tess_level_outer\n"
+ "OpExecutionMode %main_fun OutputVertices 1\n";
+ tescSrc += executionMode +
+ "OpDecorate %var_tess_level_inner Patch\n"
+ "OpDecorate %var_tess_level_inner BuiltIn TessLevelInner\n"
+ "OpMemberDecorate %type_struct_sb_levels 0 Restrict\n"
+ "OpMemberDecorate %type_struct_sb_levels 0 NonWritable\n"
+ "OpMemberDecorate %type_struct_sb_levels 0 Offset 0\n"
+ "OpMemberDecorate %type_struct_sb_levels 1 Restrict\n"
+ "OpMemberDecorate %type_struct_sb_levels 1 NonWritable\n"
+ "OpMemberDecorate %type_struct_sb_levels 1 Offset 4\n"
+ "OpMemberDecorate %type_struct_sb_levels 2 Restrict\n"
+ "OpMemberDecorate %type_struct_sb_levels 2 NonWritable\n"
+ "OpMemberDecorate %type_struct_sb_levels 2 Offset 8\n"
+ "OpMemberDecorate %type_struct_sb_levels 3 Restrict\n"
+ "OpMemberDecorate %type_struct_sb_levels 3 NonWritable\n"
+ "OpMemberDecorate %type_struct_sb_levels 3 Offset 12\n"
+ "OpMemberDecorate %type_struct_sb_levels 4 Restrict\n"
+ "OpMemberDecorate %type_struct_sb_levels 4 NonWritable\n"
+ "OpMemberDecorate %type_struct_sb_levels 4 Offset 16\n"
+ "OpMemberDecorate %type_struct_sb_levels 5 Restrict\n"
+ "OpMemberDecorate %type_struct_sb_levels 5 NonWritable\n"
+ "OpMemberDecorate %type_struct_sb_levels 5 Offset 20\n"
+ "OpDecorate %type_struct_sb_levels BufferBlock\n"
+ "OpDecorate %var_struct_sb_levels DescriptorSet 0\n"
+ "OpDecorate %var_struct_sb_levels Binding 0\n"
+ "OpDecorate %var_tess_level_outer Patch\n"
+ "OpDecorate %var_tess_level_outer BuiltIn TessLevelOuter\n"
+ "%type_void = OpTypeVoid\n"
+ "%type_void_f = OpTypeFunction %type_void\n"
+ "%type_f32 = OpTypeFloat 32\n"
+ "%type_u32 = OpTypeInt 32 0\n"
+ "%c_u32_2 = OpConstant %type_u32 2\n"
+ "%type_arr_f32_2 = OpTypeArray %type_f32 %c_u32_2\n"
+ "%type_arr_f32_2_ptr = OpTypePointer Output %type_arr_f32_2\n"
+ "%type_i32 = OpTypeInt 32 1\n"
+ "%type_struct_sb_levels = OpTypeStruct %type_f32 %type_f32 %type_f32 %type_f32 %type_f32 %type_f32\n"
+ "%type_struct_sb_levels_ptr = OpTypePointer Uniform %type_struct_sb_levels\n"
+ "%var_struct_sb_levels = OpVariable %type_struct_sb_levels_ptr Uniform\n"
+ "%type_uni_f32_ptr = OpTypePointer Uniform %type_f32\n"
+ "%type_out_f32_ptr = OpTypePointer Output %type_f32\n"
+ "%c_i32_0 = OpConstant %type_i32 0\n"
+ "%c_i32_1 = OpConstant %type_i32 1\n"
+ "%c_u32_4 = OpConstant %type_u32 4\n"
+ "%c_i32_2 = OpConstant %type_i32 2\n"
+ "%c_i32_3 = OpConstant %type_i32 3\n"
+ "%c_i32_4 = OpConstant %type_i32 4\n"
+ "%c_i32_5 = OpConstant %type_i32 5\n"
+ "%type_arr_f32_4 = OpTypeArray %type_f32 %c_u32_4\n"
+ "%type_arr_f32_4_ptr = OpTypePointer Output %type_arr_f32_4\n"
+ "%var_tess_level_inner = OpVariable %type_arr_f32_2_ptr Output\n"
+ "%var_tess_level_outer = OpVariable %type_arr_f32_4_ptr Output\n"
+ "%main_fun = OpFunction %type_void None %type_void_f\n"
+ "%main_label = OpLabel\n"
+ "%tess_inner_0_ptr = OpAccessChain %type_uni_f32_ptr %var_struct_sb_levels %c_i32_0\n"
+ "%tess_inner_0 = OpLoad %type_f32 %tess_inner_0_ptr\n"
+ "%gl_tess_inner_0 = OpAccessChain %type_out_f32_ptr %var_tess_level_inner %c_i32_0\n"
+ " OpStore %gl_tess_inner_0 %tess_inner_0\n"
+ "%tess_inner_1_ptr = OpAccessChain %type_uni_f32_ptr %var_struct_sb_levels %c_i32_1\n"
+ "%tess_inner_1 = OpLoad %type_f32 %tess_inner_1_ptr\n"
+ "%gl_tess_inner_1 = OpAccessChain %type_out_f32_ptr %var_tess_level_inner %c_i32_1\n"
+ " OpStore %gl_tess_inner_1 %tess_inner_1\n"
+ "%tess_outer_0_ptr = OpAccessChain %type_uni_f32_ptr %var_struct_sb_levels %c_i32_2\n"
+ "%tess_outer_0 = OpLoad %type_f32 %tess_outer_0_ptr\n"
+ "%gl_tess_outer_0 = OpAccessChain %type_out_f32_ptr %var_tess_level_outer %c_i32_0\n"
+ " OpStore %gl_tess_outer_0 %tess_outer_0\n"
+ "%tess_outer_1_ptr = OpAccessChain %type_uni_f32_ptr %var_struct_sb_levels %c_i32_3\n"
+ "%tess_outer_1 = OpLoad %type_f32 %tess_outer_1_ptr\n"
+ "%gl_tess_outer_1 = OpAccessChain %type_out_f32_ptr %var_tess_level_outer %c_i32_1\n"
+ " OpStore %gl_tess_outer_1 %tess_outer_1\n"
+ "%tess_outer_2_ptr = OpAccessChain %type_uni_f32_ptr %var_struct_sb_levels %c_i32_4\n"
+ "%tess_outer_2 = OpLoad %type_f32 %tess_outer_2_ptr\n"
+ "%gl_tess_outer_2 = OpAccessChain %type_out_f32_ptr %var_tess_level_outer %c_i32_2\n"
+ " OpStore %gl_tess_outer_2 %tess_outer_2\n"
+ "%tess_outer_3_ptr = OpAccessChain %type_uni_f32_ptr %var_struct_sb_levels %c_i32_5\n"
+ "%tess_outer_3 = OpLoad %type_f32 %tess_outer_3_ptr\n"
+ "%gl_tess_outer_3 = OpAccessChain %type_out_f32_ptr %var_tess_level_outer %c_i32_3\n"
+ " OpStore %gl_tess_outer_3 %tess_outer_3\n"
+ "OpReturn\n"
+ "OpFunctionEnd\n";
+ programCollection.spirvAsmSources.add("tesc") << tescSrc;
+
+ std::string teseSrc =
+ "OpCapability Tessellation\n"
+ "%glsl_ext_inst = OpExtInstImport \"GLSL.std.450\"\n"
+ "OpMemoryModel Logical GLSL450\n"
+ "OpEntryPoint TessellationEvaluation %main_fun \"main\" %var_gl_tess_coord\n"
+ "OpDecorate %type_run_arr_v3_f32 ArrayStride 16\n"
+ "OpMemberDecorate %type_struct 0 Coherent\n"
+ "OpMemberDecorate %type_struct 0 Restrict\n"
+ "OpMemberDecorate %type_struct 0 Offset 0\n"
+ "OpMemberDecorate %type_struct 1 Coherent\n"
+ "OpMemberDecorate %type_struct 1 Restrict\n"
+ "OpMemberDecorate %type_struct 1 Offset 16\n"
+ "OpDecorate %type_struct BufferBlock\n"
+ "OpDecorate %var_struct_ptr DescriptorSet 0\n"
+ "OpDecorate %var_struct_ptr Binding 1\n"
+ "OpDecorate %var_gl_tess_coord BuiltIn TessCoord\n"
+ "%type_void = OpTypeVoid\n"
+ "%type_void_f = OpTypeFunction %type_void\n"
+ "%type_i32 = OpTypeInt 32 1\n"
+ "%type_u32 = OpTypeInt 32 0\n"
+ "%type_i32_fp = OpTypePointer Function %type_i32\n"
+ "%type_f32 = OpTypeFloat 32\n"
+ "%type_v3_f32 = OpTypeVector %type_f32 3\n"
+ "%type_run_arr_v3_f32 = OpTypeRuntimeArray %type_v3_f32\n"
+ "%type_struct = OpTypeStruct %type_i32 %type_run_arr_v3_f32\n"
+ "%type_uni_struct_ptr = OpTypePointer Uniform %type_struct\n"
+ "%type_uni_i32_ptr = OpTypePointer Uniform %type_i32\n"
+ "%type_uni_v3_f32_ptr = OpTypePointer Uniform %type_v3_f32\n"
+ "%type_in_v3_f32_ptr = OpTypePointer Input %type_v3_f32\n"
+ "%c_i32_0 = OpConstant %type_i32 0\n"
+ "%c_i32_1 = OpConstant %type_i32 1\n"
+ "%c_u32_0 = OpConstant %type_u32 1\n"
+ "%c_u32_1 = OpConstant %type_u32 0\n"
+ "%var_struct_ptr = OpVariable %type_uni_struct_ptr Uniform\n"
+ "%var_gl_tess_coord = OpVariable %type_in_v3_f32_ptr Input\n"
+ "%main_fun = OpFunction %type_void None %type_void_f\n"
+ "%main_label = OpLabel\n"
+ "%var_i32_ptr = OpVariable %type_i32_fp Function\n"
+ "%num_invocations = OpAccessChain %type_uni_i32_ptr %var_struct_ptr %c_i32_0\n"
+ "%index_0 = OpAtomicIAdd %type_i32 %num_invocations %c_u32_0 %c_u32_1 %c_i32_1\n"
+ " OpStore %var_i32_ptr %index_0\n"
+ "%index_1 = OpLoad %type_i32 %var_i32_ptr\n"
+ "%gl_tess_coord = OpLoad %type_v3_f32 %var_gl_tess_coord\n"
+ "%out_tess_coord = OpAccessChain %type_uni_v3_f32_ptr %var_struct_ptr %c_i32_1 %index_1\n"
+ " OpStore %out_tess_coord %gl_tess_coord\n"
+ "OpReturn\n"
+ "OpFunctionEnd\n";
+ programCollection.spirvAsmSources.add("tese") << teseSrc;
}
}
@@ -650,8 +819,13 @@
de::MovePtr<tcu::TestCaseGroup> group (new tcu::TestCaseGroup(testCtx, "tesscoord", "Tessellation coordinates tests"));
for (int primitiveTypeNdx = 0; primitiveTypeNdx < TESSPRIMITIVETYPE_LAST; ++primitiveTypeNdx)
- for (int spacingModeNdx = 0; spacingModeNdx < SPACINGMODE_LAST; ++spacingModeNdx)
- group->addChild(new TessCoordTest(testCtx, (TessPrimitiveType)primitiveTypeNdx, (SpacingMode)spacingModeNdx));
+ for (int spacingModeNdx = 0; spacingModeNdx < SPACINGMODE_LAST; ++spacingModeNdx)
+ {
+ group->addChild(new TessCoordTest(testCtx, (TessPrimitiveType)primitiveTypeNdx, (SpacingMode)spacingModeNdx));
+
+ // test if TessCoord builtin has correct value in Evaluation shader when execution mode is set only in Control shader
+ group->addChild(new TessCoordTest(testCtx, (TessPrimitiveType)primitiveTypeNdx, (SpacingMode)spacingModeNdx, false));
+ }
return group.release();
}
diff --git a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp
index 05c8520..9b7ba42 100644
--- a/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp
+++ b/external/vulkancts/modules/vulkan/tessellation/vktTessellationUtil.hpp
@@ -231,17 +231,23 @@
int referencePrimitiveCount (const TessPrimitiveType primitiveType, const SpacingMode spacingMode, const bool usePointMode, const float* innerLevels, const float* outerLevels);
int numVerticesPerPrimitive (const TessPrimitiveType primitiveType, const bool usePointMode);
-static inline const char* getTessPrimitiveTypeShaderName (const TessPrimitiveType type)
+static inline const char* getTessPrimitiveTypeShaderName (const TessPrimitiveType type, bool forSpirv = false)
{
- switch (type)
+ static std::string primitiveName[][2] =
{
- case TESSPRIMITIVETYPE_TRIANGLES: return "triangles";
- case TESSPRIMITIVETYPE_QUADS: return "quads";
- case TESSPRIMITIVETYPE_ISOLINES: return "isolines";
- default:
- DE_FATAL("Unexpected primitive type.");
- return DE_NULL;
+ // glsl name spirv name
+ { "triangles", "Triangles"},
+ { "quads" , "Quads" },
+ { "isolines" , "Isolines" }
+ };
+
+ if (type >= TESSPRIMITIVETYPE_LAST)
+ {
+ DE_FATAL("Unexpected primitive type.");
+ return DE_NULL;
}
+
+ return primitiveName[type][forSpirv].c_str();
}
static inline const char* getDomainName (const TessPrimitiveType type)
@@ -270,17 +276,23 @@
return DE_NULL;
}
-static inline const char* getSpacingModeShaderName (SpacingMode mode)
+static inline const char* getSpacingModeShaderName (SpacingMode mode, bool forSpirv = false)
{
- switch (mode)
+ static std::string spacingName[][2] =
{
- case SPACINGMODE_EQUAL: return "equal_spacing";
- case SPACINGMODE_FRACTIONAL_ODD: return "fractional_odd_spacing";
- case SPACINGMODE_FRACTIONAL_EVEN: return "fractional_even_spacing";
- default:
- DE_FATAL("Unexpected spacing mode.");
- return DE_NULL;
+ // glsl name spirv name
+ { "equal_spacing", "SpacingEqual"},
+ { "fractional_odd_spacing", "SpacingFractionalOdd" },
+ { "fractional_even_spacing", "SpacingFractionalEven" }
+ };
+
+ if (mode >= SPACINGMODE_LAST)
+ {
+ DE_FATAL("Unexpected spacing type.");
+ return DE_NULL;
}
+
+ return spacingName[mode][forSpirv].c_str();
}
static inline const char* getPartitioningShaderName (SpacingMode mode)
diff --git a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt
index d4f517d..60a2be6 100644
--- a/external/vulkancts/mustpass/master/vk-default-no-waivers.txt
+++ b/external/vulkancts/mustpass/master/vk-default-no-waivers.txt
Binary files differ
diff --git a/external/vulkancts/mustpass/master/vk-default.txt b/external/vulkancts/mustpass/master/vk-default.txt
index 41baab5..fe127f6 100644
--- a/external/vulkancts/mustpass/master/vk-default.txt
+++ b/external/vulkancts/mustpass/master/vk-default.txt
Binary files differ