[31/63] arb_gl_spirv: Add a test for matching a block by location with SSOs

Submitted by apinheiro on Feb. 23, 2019, 11:45 p.m.

Details

Message ID 20190223234551.21111-32-apinheiro@igalia.com
State New
Headers show
Series "ARB_gl_spirv full series" ( rev: 1 ) in Piglit

Not browsing as part of any series.

Commit Message

apinheiro Feb. 23, 2019, 11:45 p.m.
From: Neil Roberts <nroberts@igalia.com>

This is copied from
arb_enhanced_layouts/execution/block-member-locations
---
 ...o-block-member-layout-location.shader_test | 257 ++++++++++++++++++
 1 file changed, 257 insertions(+)
 create mode 100644 tests/spec/arb_gl_spirv/execution/sso-block-member-layout-location.shader_test

Patch hide | download patch | download mbox

diff --git a/tests/spec/arb_gl_spirv/execution/sso-block-member-layout-location.shader_test b/tests/spec/arb_gl_spirv/execution/sso-block-member-layout-location.shader_test
new file mode 100644
index 000000000..a796252c8
--- /dev/null
+++ b/tests/spec/arb_gl_spirv/execution/sso-block-member-layout-location.shader_test
@@ -0,0 +1,257 @@ 
+// Test that interface block members are correctly matched by explicit
+// location.
+//
+// This is copied from arb_enhanced_layouts/execution/block-member-locations/
+
+[require]
+SPIRV YES
+GLSL >= 4.40
+SSO ENABLED
+GL_ARB_gl_spirv
+
+[vertex shader spirv]
+; Automatically generated from the GLSL by shader_test_spirv.py. DO NOT EDIT
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 40
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %main "main" %name %_ %piglit_vertex %gl_VertexID %gl_InstanceID
+               OpSource GLSL 450
+               OpName %main "main"
+               OpName %block "block"
+               OpMemberName %block 0 "c"
+               OpMemberName %block 1 "d"
+               OpMemberName %block 2 "a"
+               OpMemberName %block 3 "b"
+               OpName %name "name"
+               OpName %gl_PerVertex "gl_PerVertex"
+               OpMemberName %gl_PerVertex 0 "gl_Position"
+               OpMemberName %gl_PerVertex 1 "gl_PointSize"
+               OpMemberName %gl_PerVertex 2 "gl_ClipDistance"
+               OpMemberName %gl_PerVertex 3 "gl_CullDistance"
+               OpName %_ ""
+               OpName %piglit_vertex "piglit_vertex"
+               OpName %gl_VertexID "gl_VertexID"
+               OpName %gl_InstanceID "gl_InstanceID"
+               OpMemberDecorate %block 0 Location 2
+               OpMemberDecorate %block 1 Location 3
+               OpMemberDecorate %block 2 Location 0
+               OpMemberDecorate %block 3 Location 1
+               OpDecorate %block Block
+               OpDecorate %name Location 0
+               OpMemberDecorate %gl_PerVertex 0 BuiltIn Position
+               OpMemberDecorate %gl_PerVertex 1 BuiltIn PointSize
+               OpMemberDecorate %gl_PerVertex 2 BuiltIn ClipDistance
+               OpMemberDecorate %gl_PerVertex 3 BuiltIn CullDistance
+               OpDecorate %gl_PerVertex Block
+               OpDecorate %piglit_vertex Location 0
+               OpDecorate %gl_VertexID BuiltIn VertexId
+               OpDecorate %gl_InstanceID BuiltIn InstanceId
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+      %block = OpTypeStruct %v4float %v4float %v4float %v4float
+%_ptr_Output_block = OpTypePointer Output %block
+       %name = OpVariable %_ptr_Output_block Output
+        %int = OpTypeInt 32 1
+      %int_2 = OpConstant %int 2
+    %float_1 = OpConstant %float 1
+    %float_0 = OpConstant %float 0
+         %15 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+      %int_3 = OpConstant %int 3
+         %19 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
+      %int_0 = OpConstant %int 0
+         %22 = OpConstantComposite %v4float %float_0 %float_0 %float_1 %float_1
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+       %uint = OpTypeInt 32 0
+     %uint_1 = OpConstant %uint 1
+%_arr_float_uint_1 = OpTypeArray %float %uint_1
+%gl_PerVertex = OpTypeStruct %v4float %float %_arr_float_uint_1 %_arr_float_uint_1
+%_ptr_Output_gl_PerVertex = OpTypePointer Output %gl_PerVertex
+          %_ = OpVariable %_ptr_Output_gl_PerVertex Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%piglit_vertex = OpVariable %_ptr_Input_v4float Input
+%_ptr_Input_int = OpTypePointer Input %int
+%gl_VertexID = OpVariable %_ptr_Input_int Input
+%gl_InstanceID = OpVariable %_ptr_Input_int Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %17 = OpAccessChain %_ptr_Output_v4float %name %int_2
+               OpStore %17 %15
+         %20 = OpAccessChain %_ptr_Output_v4float %name %int_3
+               OpStore %20 %19
+         %23 = OpAccessChain %_ptr_Output_v4float %name %int_0
+               OpStore %23 %22
+         %26 = OpAccessChain %_ptr_Output_v4float %name %int_1
+               OpStore %26 %25
+         %35 = OpLoad %v4float %piglit_vertex
+         %36 = OpAccessChain %_ptr_Output_v4float %_ %int_0
+               OpStore %36 %35
+               OpReturn
+               OpFunctionEnd
+
+[vertex shader]
+#version 440
+
+in vec4 piglit_vertex;
+
+layout(location = 0) out block {
+	layout(location = 2) vec4 c;
+	vec4 d;
+	layout(location = 0) vec4 a;
+	vec4 b;
+} name;
+
+void main()
+{
+	name.a = vec4(1.0, 0.0, 0.0, 1.0);
+	name.b = vec4(0.0, 1.0, 0.0, 1.0);
+	name.c = vec4(0.0, 0.0, 1.0, 1.0);
+	name.d = vec4(1.0, 1.0, 1.0, 1.0);
+
+	gl_Position = piglit_vertex;
+}
+
+[fragment shader spirv]
+; Automatically generated from the GLSL by shader_test_spirv.py. DO NOT EDIT
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 46
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %color %a %b %c %d
+               OpExecutionMode %main OriginLowerLeft
+               OpSource GLSL 450
+               OpName %main "main"
+               OpName %i "i"
+               OpName %color "color"
+               OpName %a "a"
+               OpName %b "b"
+               OpName %c "c"
+               OpName %d "d"
+               OpDecorate %i Location 0
+               OpDecorate %i DescriptorSet 0
+               OpDecorate %color Location 0
+               OpDecorate %a Location 0
+               OpDecorate %b Location 1
+               OpDecorate %c Location 2
+               OpDecorate %d Location 3
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+%_ptr_UniformConstant_int = OpTypePointer UniformConstant %int
+          %i = OpVariable %_ptr_UniformConstant_int UniformConstant
+      %int_0 = OpConstant %int 0
+       %bool = OpTypeBool
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+      %color = OpVariable %_ptr_Output_v4float Output
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+          %a = OpVariable %_ptr_Input_v4float Input
+      %int_1 = OpConstant %int 1
+          %b = OpVariable %_ptr_Input_v4float Input
+      %int_2 = OpConstant %int 2
+          %c = OpVariable %_ptr_Input_v4float Input
+      %int_3 = OpConstant %int 3
+          %d = OpVariable %_ptr_Input_v4float Input
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+          %9 = OpLoad %int %i
+         %12 = OpIEqual %bool %9 %int_0
+               OpSelectionMerge %14 None
+               OpBranchConditional %12 %13 %22
+         %13 = OpLabel
+         %21 = OpLoad %v4float %a
+               OpStore %color %21
+               OpBranch %14
+         %22 = OpLabel
+         %23 = OpLoad %int %i
+         %25 = OpIEqual %bool %23 %int_1
+               OpSelectionMerge %27 None
+               OpBranchConditional %25 %26 %30
+         %26 = OpLabel
+         %29 = OpLoad %v4float %b
+               OpStore %color %29
+               OpBranch %27
+         %30 = OpLabel
+         %31 = OpLoad %int %i
+         %33 = OpIEqual %bool %31 %int_2
+               OpSelectionMerge %35 None
+               OpBranchConditional %33 %34 %38
+         %34 = OpLabel
+         %37 = OpLoad %v4float %c
+               OpStore %color %37
+               OpBranch %35
+         %38 = OpLabel
+         %39 = OpLoad %int %i
+         %41 = OpIEqual %bool %39 %int_3
+               OpSelectionMerge %43 None
+               OpBranchConditional %41 %42 %43
+         %42 = OpLabel
+         %45 = OpLoad %v4float %d
+               OpStore %color %45
+               OpBranch %43
+         %43 = OpLabel
+               OpBranch %35
+         %35 = OpLabel
+               OpBranch %27
+         %27 = OpLabel
+               OpBranch %14
+         %14 = OpLabel
+               OpReturn
+               OpFunctionEnd
+
+[fragment shader]
+#version 440
+
+layout(location = 0) in vec4 a;
+layout(location = 1) in vec4 b;
+layout(location = 2) in vec4 c;
+layout(location = 3) in vec4 d;
+
+layout(location = 0) uniform int i;
+
+out vec4 color;
+
+void main()
+{
+	if (i == 0) {
+		color = a;
+	} else if (i == 1) {
+		color = b;
+	} else if (i == 2) {
+		color = c;
+	} else if (i == 3) {
+		color = d;
+	}
+}
+
+[test]
+active shader program GL_FRAGMENT_SHADER
+
+uniform int 0 0
+draw rect -1 -1 1 1
+relative probe rect rgb (0.0, 0.0, 0.5, 0.5) (1.0, 0.0, 0.0)
+
+uniform int 0 1
+draw rect 0 -1 1 1
+relative probe rect rgb (0.5, 0.0, 0.5, 0.5) (0.0, 1.0, 0.0)
+
+uniform int 0 2
+draw rect -1 0 1 1
+relative probe rect rgb (0.0, 0.5, 0.5, 0.5) (0.0, 0.0, 1.0)
+
+uniform int 0 3
+draw rect 0 0 1 1
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)