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
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
--- /dev/null
+#!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
--- /dev/null
+#!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
--- /dev/null
+#!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
--- /dev/null
+#!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
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();
}
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