[17/35] arb_gl_spirv: Add a test for nonconst array of sampler structs

Submitted by apinheiro on Aug. 9, 2018, 11:35 a.m.

Details

Message ID 20180809113614.5122-18-apinheiro@igalia.com
State New
Headers show
Series "ARB_gl_spirv: all tests so far" ( rev: 1 ) in Piglit

Not browsing as part of any series.

Commit Message

apinheiro Aug. 9, 2018, 11:35 a.m.
From: Neil Roberts <nroberts@igalia.com>

This is a simple port of arb_arrays_of_arrays/execution/sampler/
fs-nested-struct-arrays-nonconst-nested-array.shader_test
---
 .../sampler2d-nonconst-nested-array.shader_test    | 225 +++++++++++++++++++++
 1 file changed, 225 insertions(+)
 create mode 100644 tests/spec/arb_gl_spirv/execution/uniform/sampler2d-nonconst-nested-array.shader_test

Patch hide | download patch | download mbox

diff --git a/tests/spec/arb_gl_spirv/execution/uniform/sampler2d-nonconst-nested-array.shader_test b/tests/spec/arb_gl_spirv/execution/uniform/sampler2d-nonconst-nested-array.shader_test
new file mode 100644
index 000000000..cf1fed17e
--- /dev/null
+++ b/tests/spec/arb_gl_spirv/execution/uniform/sampler2d-nonconst-nested-array.shader_test
@@ -0,0 +1,225 @@ 
+# This test verifies that dynamic uniform indexing of samplers within
+# a nested struct array for the fragment shader behaves correctly.
+#
+# It is a direct copy of arb_arrays_of_arrays/execution/sampler/
+# fs-nested-struct-arrays-nonconst-nested-array.shader_test
+
+[require]
+SPIRV YES
+GL >= 3.3
+GLSL >= 4.50
+
+[vertex shader passthrough]
+
+[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; 4
+; Bound: 71
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Fragment %main "main" %color
+               OpExecutionMode %main OriginLowerLeft
+               OpSource GLSL 450
+               OpSourceExtension "GL_ARB_gpu_shader5"
+               OpName %main "main"
+               OpName %select "select"
+               OpName %color "color"
+               OpName %S_inner "S_inner"
+               OpMemberName %S_inner 0 "tex"
+               OpMemberName %S_inner 1 "tex2"
+               OpName %S "S"
+               OpMemberName %S 0 "si"
+               OpMemberName %S 1 "tex"
+               OpMemberName %S 2 "final_member"
+               OpName %s "s"
+               OpName %n "n"
+               OpDecorate %select Location 1
+               OpDecorate %color Location 0
+               OpDecorate %s Location 2
+               OpDecorate %n Location 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+%_ptr_UniformConstant_int = OpTypePointer UniformConstant %int
+     %select = 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
+         %19 = OpTypeImage %float 2D 0 0 0 1 Unknown
+         %20 = OpTypeSampledImage %19
+    %S_inner = OpTypeStruct %20 %20
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_arr_S_inner_uint_2 = OpTypeArray %S_inner %uint_2
+%_arr__arr_S_inner_uint_2_uint_2 = OpTypeArray %_arr_S_inner_uint_2 %uint_2
+     %uint_3 = OpConstant %uint 3
+%_arr_20_uint_3 = OpTypeArray %20 %uint_3
+%_arr__arr_20_uint_3_uint_2 = OpTypeArray %_arr_20_uint_3 %uint_2
+%_arr_20_uint_2 = OpTypeArray %20 %uint_2
+          %S = OpTypeStruct %_arr__arr_S_inner_uint_2_uint_2 %_arr__arr_20_uint_3_uint_2 %_arr_20_uint_2
+%_ptr_UniformConstant_S = OpTypePointer UniformConstant %S
+          %s = OpVariable %_ptr_UniformConstant_S UniformConstant
+      %int_1 = OpConstant %int 1
+          %n = OpVariable %_ptr_UniformConstant_int UniformConstant
+%_ptr_UniformConstant_20 = OpTypePointer UniformConstant %20
+    %v2float = OpTypeVector %float 2
+ %float_0_75 = OpConstant %float 0.75
+ %float_0_25 = OpConstant %float 0.25
+         %43 = OpConstantComposite %v2float %float_0_75 %float_0_25
+      %int_2 = OpConstant %int 2
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+          %9 = OpLoad %int %select
+         %12 = OpIEqual %bool %9 %int_0
+               OpSelectionMerge %14 None
+               OpBranchConditional %12 %13 %45
+         %13 = OpLabel
+         %35 = OpLoad %int %n
+         %36 = OpLoad %int %n
+         %38 = OpAccessChain %_ptr_UniformConstant_20 %s %int_1 %35 %36
+         %39 = OpLoad %20 %38
+         %44 = OpImageSampleImplicitLod %v4float %39 %43
+               OpStore %color %44
+               OpBranch %14
+         %45 = OpLabel
+         %46 = OpLoad %int %select
+         %47 = OpIEqual %bool %46 %int_1
+               OpSelectionMerge %49 None
+               OpBranchConditional %47 %48 %61
+         %48 = OpLabel
+         %50 = OpLoad %int %n
+         %51 = OpLoad %int %n
+         %52 = OpAccessChain %_ptr_UniformConstant_20 %s %int_0 %50 %51 %int_0
+         %53 = OpLoad %20 %52
+         %54 = OpImageSampleImplicitLod %v4float %53 %43
+         %55 = OpLoad %int %n
+         %56 = OpLoad %int %n
+         %57 = OpAccessChain %_ptr_UniformConstant_20 %s %int_0 %55 %56 %int_1
+         %58 = OpLoad %20 %57
+         %59 = OpImageSampleImplicitLod %v4float %58 %43
+         %60 = OpFAdd %v4float %54 %59
+               OpStore %color %60
+               OpBranch %49
+         %61 = OpLabel
+         %62 = OpLoad %int %select
+         %64 = OpIEqual %bool %62 %int_2
+               OpSelectionMerge %66 None
+               OpBranchConditional %64 %65 %66
+         %65 = OpLabel
+         %67 = OpLoad %int %n
+         %68 = OpAccessChain %_ptr_UniformConstant_20 %s %int_2 %67
+         %69 = OpLoad %20 %68
+         %70 = OpImageSampleImplicitLod %v4float %69 %43
+               OpStore %color %70
+               OpBranch %66
+         %66 = OpLabel
+               OpBranch %49
+         %49 = OpLabel
+               OpBranch %14
+         %14 = OpLabel
+               OpReturn
+               OpFunctionEnd
+
+[fragment shader]
+#version 450
+
+struct S_inner {
+   sampler2D tex;
+   sampler2D tex2;
+};
+
+struct S {
+   S_inner si[2][2];
+   sampler2D tex[2][3];
+   sampler2D final_member[2];
+};
+
+layout(location = 2) uniform S s;
+
+layout(location = 0) uniform int n;
+layout(location = 1) uniform int select;
+
+out vec4 color;
+
+void main()
+{
+        if (select == 0) {
+                color = texture(s.tex[n][n], vec2(0.75, 0.25));
+        } else if (select == 1) {
+                color = (texture(s.si[n][n].tex, vec2(0.75, 0.25)) +
+                         texture(s.si[n][n].tex2, vec2(0.75, 0.25)));
+        } else if (select == 2) {
+                color = texture(s.final_member[n], vec2(0.75, 0.25));
+        }
+}
+
+[test]
+clear color 0.2 0.2 0.2 0.2
+clear
+
+# s.final_member[0]
+uniform int 16 1
+# s.tex[1][1]
+uniform int 14 2
+# s.si[0][0].tex
+uniform int 2 3
+# s.si[1][1].tex
+uniform int 8 4
+# s.si[0][0].tex2
+uniform int 3 5
+# s.si[1][1].tex2
+uniform int 9 6
+
+texture checkerboard 1 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (1.0, 0.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 2 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 1.0, 0.0, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 3 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 0.25, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 4 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.25, 0.25, 0.25, 1.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 5 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.0, 0.0, 0.75, 0.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+texture checkerboard 6 0 (32, 32) (0.5, 0.0, 0.0, 0.0) (0.75, 0.75, 0.75, 1.0)
+texparameter 2D min nearest
+texparameter 2D mag nearest
+
+uniform int 1 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 1 1
+uniform int 0 0
+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 1
+draw rect 0 0 1 1
+
+relative probe rect rgb (0.5, 0.5, 0.5, 0.5) (1.0, 1.0, 1.0)
+
+uniform int 1 2
+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)