Add remaining div by zero tests
authoraitor_lunarg <aitor@lunarg.com>
Wed, 5 Oct 2022 11:26:49 +0000 (13:26 +0200)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 14 Oct 2022 16:13:52 +0000 (16:13 +0000)
This change adds remaining amber tests that execute various explicit and
implicit division by zero operations, which should not crash or fail the
rendering operation.

New test:
dEQP-VK.glsl.crash_test.divbyzero_vert
dEQP-VK.glsl.crash_test.divbyzero_tesc
dEQP-VK.glsl.crash_test.divbyzero_tese
dEQP-VK.glsl.crash_test.divbyzero_geom

Components: Vulkan
VK-GL-CTS issue: 869

Change-Id: I5a448300ea81987d36ce1e2e977aa975fd5335ff

android/cts/main/vk-master-2022-03-01/glsl.txt
android/cts/main/vk-master/glsl.txt
external/vulkancts/data/vulkan/amber/crash_test/divbyzero_geom.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/crash_test/divbyzero_tesc.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/crash_test/divbyzero_tese.amber [new file with mode: 0644]
external/vulkancts/data/vulkan/amber/crash_test/divbyzero_vert.amber [new file with mode: 0644]
external/vulkancts/modules/vulkan/amber/vktAmberGlslTests.cpp
external/vulkancts/mustpass/main/vk-default/glsl.txt

index f76a089..be0075a 100644 (file)
@@ -40,6 +40,10 @@ dEQP-VK.glsl.switch.empty_case_default_static_vertex
 dEQP-VK.glsl.switch.empty_case_default_static_fragment
 dEQP-VK.glsl.switch.empty_case_default_uniform_vertex
 dEQP-VK.glsl.switch.empty_case_default_uniform_fragment
+dEQP-VK.glsl.crash_test.divbyzero_vert
+dEQP-VK.glsl.crash_test.divbyzero_tesc
+dEQP-VK.glsl.crash_test.divbyzero_tese
+dEQP-VK.glsl.crash_test.divbyzero_geom
 dEQP-VK.glsl.crash_test.divbyzero_frag
 dEQP-VK.glsl.crash_test.divbyzero_comp
 dEQP-VK.glsl.builtin_var.fragcoord_msaa_input.1_bit_no_sample_shading
index 8243f53..6819350 100644 (file)
@@ -13080,6 +13080,10 @@ dEQP-VK.glsl.demote.function_static_loop_uniform
 dEQP-VK.glsl.demote.function_static_loop_dynamic
 dEQP-VK.glsl.demote.function_static_loop_texture
 dEQP-VK.glsl.demote.function_static_loop_deriv
+dEQP-VK.glsl.crash_test.divbyzero_vert
+dEQP-VK.glsl.crash_test.divbyzero_tesc
+dEQP-VK.glsl.crash_test.divbyzero_tese
+dEQP-VK.glsl.crash_test.divbyzero_geom
 dEQP-VK.glsl.crash_test.divbyzero_frag
 dEQP-VK.glsl.crash_test.divbyzero_comp
 dEQP-VK.glsl.conversions.scalar_to_scalar.float_to_float_vertex
diff --git a/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_geom.amber b/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_geom.amber
new file mode 100644 (file)
index 0000000..795e137
--- /dev/null
@@ -0,0 +1,125 @@
+#!amber
+# Copyright 2022 Google LLC
+# Copyright 2022 LunarG, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DEVICE_FEATURE geometryShader
+
+SHADER vertex vert_shader PASSTHROUGH
+
+SHADER geometry geom_shader GLSL
+#version 450
+
+layout (triangles) in;
+layout (triangle_strip, max_vertices = 3) out;
+
+layout(set = 0, binding = 0) buffer block0
+{
+    int data[20];
+} ssbo;
+
+void main(void)
+{
+  // Only want to perform these operations once
+  if(gl_InvocationID == 0)
+  {
+    // Zero constants
+    int ival = ssbo.data[0];
+    float val = float(ival);
+
+    // int div
+    ssbo.data[1] = 7 / ival;
+    // float div
+    ssbo.data[2] = int(7.0 / val);
+    // normalize float
+    ssbo.data[3] = int(normalize(val));
+    // normalize vec2
+    ssbo.data[4] = int(normalize(vec2(val))[ival]);
+    // normalize vec3
+    ssbo.data[5] = int(normalize(vec3(val))[ival]);
+    // normalize vec4
+    ssbo.data[6] = int(normalize(vec4(val))[ival]);
+    // integer mod
+    ssbo.data[7] = 7 % ival;
+    // float mod
+    ssbo.data[8] = int(mod(7.0, val));
+    // vec2 mod
+    ssbo.data[9] = int(mod(vec2(7.0), vec2(val))[ival]);
+    // vec3 mod
+    ssbo.data[10] = int(mod(vec3(7.0), vec3(val))[ival]);
+    // vec4 mod
+    ssbo.data[11] = int(mod(vec4(7.0), vec4(val))[ival]);
+    // float smoothstep
+    ssbo.data[12] = int(smoothstep(val, val, 0.3));
+    // vec2 smoothstep
+    ssbo.data[13] = int(smoothstep(vec2(val), vec2(val), vec2(0.3))[ival]);
+    // vec3 smoothstep
+    ssbo.data[14] = int(smoothstep(vec3(val), vec3(val), vec3(0.3))[ival]);
+    // vec4 smoothstep
+    ssbo.data[15] = int(smoothstep(vec4(val), vec4(val), vec4(0.3))[ival]);
+    // float atan2
+    ssbo.data[16] = int(atan(7.0, val));
+    // vec2 atan2
+    ssbo.data[17] = int(atan(vec2(7.0), vec2(val))[ival]);
+    // vec3 atan2
+    ssbo.data[18] = int(atan(vec3(7.0), vec3(val))[ival]);
+    // vec4 atan2
+    ssbo.data[19] = int(atan(vec4(7.0), vec4(val))[ival]);
+
+    // Known good value
+    ssbo.data[0] = 42;
+  }
+
+  gl_Position = gl_in[0].gl_Position;
+  EmitVertex();
+
+  gl_Position = gl_in[1].gl_Position;
+  EmitVertex();
+
+  gl_Position = gl_in[2].gl_Position;
+  EmitVertex();
+
+  EndPrimitive();
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 450
+
+layout (location = 0) out vec4 outColor;
+
+void main(void)
+{
+  outColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
+}
+END
+
+BUFFER ssbo_buffer DATA_TYPE int32 DATA
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+END
+
+BUFFER framebuffer FORMAT R8G8B8A8_UNORM
+
+PIPELINE graphics my_pipeline
+  ATTACH vert_shader
+  ATTACH geom_shader
+  ATTACH frag_shader
+
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER ssbo_buffer AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+RUN my_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT ssbo_buffer IDX 0 EQ 42
\ No newline at end of file
diff --git a/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_tesc.amber b/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_tesc.amber
new file mode 100644 (file)
index 0000000..e4abbfd
--- /dev/null
@@ -0,0 +1,145 @@
+#!amber
+# Copyright 2022 Google LLC
+# Copyright 2022 LunarG, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DEVICE_FEATURE tessellationShader
+
+SHADER vertex vert_shader PASSTHROUGH
+
+SHADER tessellation_control tesc_shader GLSL
+#version 450
+
+layout (vertices = 3) out;
+
+layout(set = 0, binding = 0) buffer block0
+{
+    int data[20];
+} ssbo;
+
+void main(void)
+{
+  gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+
+  // Only want to perform these operations once
+  if(gl_InvocationID == 0)
+  {
+    gl_TessLevelInner[0] = 1.0;
+    gl_TessLevelInner[1] = 1.0;
+    gl_TessLevelOuter[0] = 1.0;
+    gl_TessLevelOuter[1] = 1.0;
+    gl_TessLevelOuter[2] = 1.0;
+
+    // Zero constants
+    int ival = ssbo.data[0];
+    float val = float(ival);
+
+    // int div
+    ssbo.data[1] = 7 / ival;
+    // float div
+    ssbo.data[2] = int(7.0 / val);
+    // normalize float
+    ssbo.data[3] = int(normalize(val));
+    // normalize vec2
+    ssbo.data[4] = int(normalize(vec2(val))[ival]);
+    // normalize vec3
+    ssbo.data[5] = int(normalize(vec3(val))[ival]);
+    // normalize vec4
+    ssbo.data[6] = int(normalize(vec4(val))[ival]);
+    // integer mod
+    ssbo.data[7] = 7 % ival;
+    // float mod
+    ssbo.data[8] = int(mod(7.0, val));
+    // vec2 mod
+    ssbo.data[9] = int(mod(vec2(7.0), vec2(val))[ival]);
+    // vec3 mod
+    ssbo.data[10] = int(mod(vec3(7.0), vec3(val))[ival]);
+    // vec4 mod
+    ssbo.data[11] = int(mod(vec4(7.0), vec4(val))[ival]);
+    // float smoothstep
+    ssbo.data[12] = int(smoothstep(val, val, 0.3));
+    // vec2 smoothstep
+    ssbo.data[13] = int(smoothstep(vec2(val), vec2(val), vec2(0.3))[ival]);
+    // vec3 smoothstep
+    ssbo.data[14] = int(smoothstep(vec3(val), vec3(val), vec3(0.3))[ival]);
+    // vec4 smoothstep
+    ssbo.data[15] = int(smoothstep(vec4(val), vec4(val), vec4(0.3))[ival]);
+    // float atan2
+    ssbo.data[16] = int(atan(7.0, val));
+    // vec2 atan2
+    ssbo.data[17] = int(atan(vec2(7.0), vec2(val))[ival]);
+    // vec3 atan2
+    ssbo.data[18] = int(atan(vec3(7.0), vec3(val))[ival]);
+    // vec4 atan2
+    ssbo.data[19] = int(atan(vec4(7.0), vec4(val))[ival]);
+
+    // Known good value
+    ssbo.data[0] = 42;
+  }
+}
+END
+
+SHADER tessellation_evaluation tese_shader GLSL
+#version 450
+
+layout (triangles, equal_spacing, cw) in;
+
+void main(void)
+{
+  gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +
+                (gl_TessCoord.y * gl_in[1].gl_Position) +
+                (gl_TessCoord.z * gl_in[2].gl_Position);
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 450
+
+layout (location = 0) out vec4 outColor;
+
+void main(void)
+{
+  outColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
+}
+END
+
+BUFFER vertexPosition DATA_TYPE vec3<float> DATA
+-0.50 -0.50  0.0
+ 0.50 -0.50  0.0
+ 0.50  0.50  0.0
+ 0.50  0.50  0.0
+-0.50  0.50  0.0
+-0.50 -0.50  0.0
+END
+
+BUFFER ssbo_buffer DATA_TYPE int32 DATA
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+END
+
+BUFFER framebuffer FORMAT R8G8B8A8_UNORM
+
+PIPELINE graphics my_pipeline
+  ATTACH vert_shader
+  ATTACH tesc_shader
+  ATTACH tese_shader
+  ATTACH frag_shader
+
+  VERTEX_DATA vertexPosition LOCATION 0
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER ssbo_buffer AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+RUN my_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 6
+
+EXPECT ssbo_buffer IDX 0 EQ 42
\ No newline at end of file
diff --git a/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_tese.amber b/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_tese.amber
new file mode 100644 (file)
index 0000000..3161d72
--- /dev/null
@@ -0,0 +1,148 @@
+#!amber
+# Copyright 2022 Google LLC
+# Copyright 2022 LunarG, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DEVICE_FEATURE tessellationShader
+
+SHADER vertex vert_shader PASSTHROUGH
+
+SHADER tessellation_control tesc_shader GLSL
+#version 450
+
+layout (vertices = 3) out;
+
+void main(void)
+{
+  gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+
+  if(gl_InvocationID == 0)
+  {
+    gl_TessLevelInner[0] = 1.0;
+    gl_TessLevelInner[1] = 1.0;
+    gl_TessLevelOuter[0] = 1.0;
+    gl_TessLevelOuter[1] = 1.0;
+    gl_TessLevelOuter[2] = 1.0;
+  }
+}
+END
+
+SHADER tessellation_evaluation tese_shader GLSL
+#version 450
+
+layout (triangles, equal_spacing, cw) in;
+
+layout(set = 0, binding = 0) buffer block0
+{
+    int data[20];
+} ssbo;
+
+void main(void)
+{
+  gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +
+                (gl_TessCoord.y * gl_in[1].gl_Position) +
+                (gl_TessCoord.z * gl_in[2].gl_Position);
+
+  // Only want to perform these operations once
+  if(gl_Position.x == 0.5f && gl_Position.y == -0.5f)
+  {
+    // Zero constants
+    int ival = ssbo.data[0];
+    float val = float(ival);
+
+    // int div
+    ssbo.data[1] = 7 / ival;
+    // float div
+    ssbo.data[2] = int(7.0 / val);
+    // normalize float
+    ssbo.data[3] = int(normalize(val));
+    // normalize vec2
+    ssbo.data[4] = int(normalize(vec2(val))[ival]);
+    // normalize vec3
+    ssbo.data[5] = int(normalize(vec3(val))[ival]);
+    // normalize vec4
+    ssbo.data[6] = int(normalize(vec4(val))[ival]);
+    // integer mod
+    ssbo.data[7] = 7 % ival;
+    // float mod
+    ssbo.data[8] = int(mod(7.0, val));
+    // vec2 mod
+    ssbo.data[9] = int(mod(vec2(7.0), vec2(val))[ival]);
+    // vec3 mod
+    ssbo.data[10] = int(mod(vec3(7.0), vec3(val))[ival]);
+    // vec4 mod
+    ssbo.data[11] = int(mod(vec4(7.0), vec4(val))[ival]);
+    // float smoothstep
+    ssbo.data[12] = int(smoothstep(val, val, 0.3));
+    // vec2 smoothstep
+    ssbo.data[13] = int(smoothstep(vec2(val), vec2(val), vec2(0.3))[ival]);
+    // vec3 smoothstep
+    ssbo.data[14] = int(smoothstep(vec3(val), vec3(val), vec3(0.3))[ival]);
+    // vec4 smoothstep
+    ssbo.data[15] = int(smoothstep(vec4(val), vec4(val), vec4(0.3))[ival]);
+    // float atan2
+    ssbo.data[16] = int(atan(7.0, val));
+    // vec2 atan2
+    ssbo.data[17] = int(atan(vec2(7.0), vec2(val))[ival]);
+    // vec3 atan2
+    ssbo.data[18] = int(atan(vec3(7.0), vec3(val))[ival]);
+    // vec4 atan2
+    ssbo.data[19] = int(atan(vec4(7.0), vec4(val))[ival]);
+
+    // Known good value
+    ssbo.data[0] = 42;
+  }
+}
+END
+
+SHADER fragment frag_shader GLSL
+#version 450
+
+layout (location = 0) out vec4 outColor;
+
+void main(void)
+{
+  outColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
+}
+END
+
+BUFFER vertexPosition DATA_TYPE vec3<float> DATA
+-0.50 -0.50  0.0
+ 0.50 -0.50  0.0
+ 0.50  0.50  0.0
+ 0.50  0.50  0.0
+-0.50  0.50  0.0
+-0.50 -0.50  0.0
+END
+
+BUFFER ssbo_buffer DATA_TYPE int32 DATA
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+END
+
+BUFFER framebuffer FORMAT R8G8B8A8_UNORM
+
+PIPELINE graphics my_pipeline
+  ATTACH vert_shader
+  ATTACH tesc_shader
+  ATTACH tese_shader
+  ATTACH frag_shader
+
+  VERTEX_DATA vertexPosition LOCATION 0
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER ssbo_buffer AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+RUN my_pipeline DRAW_ARRAY AS PATCH_LIST START_IDX 0 COUNT 6
+
+EXPECT ssbo_buffer IDX 0 EQ 42
\ No newline at end of file
diff --git a/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_vert.amber b/external/vulkancts/data/vulkan/amber/crash_test/divbyzero_vert.amber
new file mode 100644 (file)
index 0000000..2443ffb
--- /dev/null
@@ -0,0 +1,106 @@
+#!amber
+# Copyright 2022 Google LLC
+# Copyright 2022 LunarG, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+SHADER vertex vert_shader GLSL
+#version 450
+layout(location = 0) in vec2 vertex_position;
+
+layout(set = 0, binding = 0) buffer block0
+{
+    int data[20];
+} ssbo;
+
+void main()
+{
+  gl_Position = vec4(vertex_position, 0.0f, 1.0f);
+
+  // Only want to perform these operations once
+  if(gl_VertexIndex == 0)
+  {
+    // Zero constants
+    int ival = ssbo.data[0];
+    float val = float(ival);
+
+    // int div
+    ssbo.data[1] = 7 / ival;
+    // float div
+    ssbo.data[2] = int(7.0 / val);
+    // normalize float
+    ssbo.data[3] = int(normalize(val));
+    // normalize vec2
+    ssbo.data[4] = int(normalize(vec2(val))[ival]);
+    // normalize vec3
+    ssbo.data[5] = int(normalize(vec3(val))[ival]);
+    // normalize vec4
+    ssbo.data[6] = int(normalize(vec4(val))[ival]);
+    // integer mod
+    ssbo.data[7] = 7 % ival;
+    // float mod
+    ssbo.data[8] = int(mod(7.0, val));
+    // vec2 mod
+    ssbo.data[9] = int(mod(vec2(7.0), vec2(val))[ival]);
+    // vec3 mod
+    ssbo.data[10] = int(mod(vec3(7.0), vec3(val))[ival]);
+    // vec4 mod
+    ssbo.data[11] = int(mod(vec4(7.0), vec4(val))[ival]);
+    // float smoothstep
+    ssbo.data[12] = int(smoothstep(val, val, 0.3));
+    // vec2 smoothstep
+    ssbo.data[13] = int(smoothstep(vec2(val), vec2(val), vec2(0.3))[ival]);
+    // vec3 smoothstep
+    ssbo.data[14] = int(smoothstep(vec3(val), vec3(val), vec3(0.3))[ival]);
+    // vec4 smoothstep
+    ssbo.data[15] = int(smoothstep(vec4(val), vec4(val), vec4(0.3))[ival]);
+    // float atan2
+    ssbo.data[16] = int(atan(7.0, val));
+    // vec2 atan2
+    ssbo.data[17] = int(atan(vec2(7.0), vec2(val))[ival]);
+    // vec3 atan2
+    ssbo.data[18] = int(atan(vec3(7.0), vec3(val))[ival]);
+    // vec4 atan2
+    ssbo.data[19] = int(atan(vec4(7.0), vec4(val))[ival]);
+
+    // Known good value
+    ssbo.data[0] = 42;
+  }
+}
+END
+
+
+SHADER fragment frag_shader GLSL
+#version 450
+layout(location = 0) out vec4 color_out;
+void main() {
+  color_out = vec4(1.0, 0.0, 0.0, 1.0);
+}
+END
+
+BUFFER ssbo_buffer DATA_TYPE int32 DATA
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+END
+
+BUFFER framebuffer FORMAT B8G8R8A8_UNORM
+
+PIPELINE graphics my_pipeline
+  ATTACH vert_shader
+  ATTACH frag_shader
+  BIND BUFFER framebuffer AS color LOCATION 0
+  BIND BUFFER ssbo_buffer AS storage DESCRIPTOR_SET 0 BINDING 0
+END
+
+RUN my_pipeline DRAW_RECT POS 0 0 SIZE 32 32
+
+EXPECT ssbo_buffer IDX 0 EQ 42
index d5f68c4..55f7001 100644 (file)
@@ -53,17 +53,27 @@ tcu::TestCaseGroup* createCombinedOperationsGroup (tcu::TestContext& testCtx)
 
 tcu::TestCaseGroup*    createCrashTestGroup (tcu::TestContext& testCtx)
 {
-       static const std::string                                                                                kGroupName                              = "crash_test";
-       static const std::vector<std::pair<std::string, std::string>>   crashTests      =
+       struct TestParameters
        {
-               { "divbyzero_frag",             "Fragment shader division by zero tests"                },
-               { "divbyzero_comp",             "Compute shader division by zero tests"                 },
+               std::string                                     name;
+               std::string                                     description;
+               std::vector<std::string>        requirements;
+       };
+       static const std::string                                        kGroupName                              = "crash_test";
+       static const std::vector<TestParameters>        crashTestParameters     =
+       {
+               { "divbyzero_vert",             "Vertex shader division by zero tests",                                         {}                                                              },
+               { "divbyzero_tesc",             "Tessellation control shader division by zero tests",           { "Features.tessellationShader" }},
+               { "divbyzero_tese",             "Tessellation evaluation shader division by zero tests",        { "Features.tessellationShader" }},
+               { "divbyzero_geom",             "Geoemtry shader division by zero tests",                                       { "Features.geometryShader"             }},
+               { "divbyzero_frag",             "Fragment shader division by zero tests",                                       {}                                                              },
+               { "divbyzero_comp",             "Compute shader division by zero tests",                                        {}                                                              },
        };
 
-       de::MovePtr<tcu::TestCaseGroup> group{new tcu::TestCaseGroup{testCtx, kGroupName.c_str(), "Crash test group"}};
-       for (const auto& test : crashTests)
+       de::MovePtr<tcu::TestCaseGroup>                         group{new tcu::TestCaseGroup{testCtx, kGroupName.c_str(), "Crash test group"}};
+       for (const auto& params : crashTestParameters)
        {
-               group->addChild(createAmberTestCase(testCtx, test.first.c_str(), test.second.c_str(), kGroupName.c_str(), test.first + ".amber"));
+               group->addChild(createAmberTestCase(testCtx, params.name.c_str(), params.description.c_str(), kGroupName.c_str(), params.name + ".amber", params.requirements));
        }
        return group.release();
 }
index edde261..62ea76d 100644 (file)
@@ -13128,6 +13128,10 @@ dEQP-VK.glsl.demote.function_static_loop_uniform
 dEQP-VK.glsl.demote.function_static_loop_dynamic
 dEQP-VK.glsl.demote.function_static_loop_texture
 dEQP-VK.glsl.demote.function_static_loop_deriv
+dEQP-VK.glsl.crash_test.divbyzero_vert
+dEQP-VK.glsl.crash_test.divbyzero_tesc
+dEQP-VK.glsl.crash_test.divbyzero_tese
+dEQP-VK.glsl.crash_test.divbyzero_geom
 dEQP-VK.glsl.crash_test.divbyzero_frag
 dEQP-VK.glsl.crash_test.divbyzero_comp
 dEQP-VK.glsl.conversions.scalar_to_scalar.float_to_float_vertex