[Piglit] [PATCH] vulkan: Add a test for the OpFUnord* comparisons
Neil Roberts
nroberts at igalia.com
Thu Nov 8 12:06:13 UTC 2018
These are unique to SPIR-V so they are interesting to test.
---
.../unordered-comparison.vk_shader_test | 780 ++++++++++++++++++
1 file changed, 780 insertions(+)
create mode 100644 tests/vulkan/shaders/unordered-comparison.vk_shader_test
diff --git a/tests/vulkan/shaders/unordered-comparison.vk_shader_test b/tests/vulkan/shaders/unordered-comparison.vk_shader_test
new file mode 100644
index 000000000..9d6906bac
--- /dev/null
+++ b/tests/vulkan/shaders/unordered-comparison.vk_shader_test
@@ -0,0 +1,780 @@
+# Tests the various OpFUnord* comparisons. These opcodes are not
+# available in GLSL so they are interesting to test in SPIR-V. They
+# are supposed to evaluate to true if the operands are unordered (ie,
+# they are NaN). Apparently GLSL implementations are not required to
+# generate NaN values so to cope with implementations that don’t this
+# test tries to generates a NaN value by takning the square root of -1
+# and then checking whether it actually did generate a NaN with
+# isnan().
+
+[vertex shader passthrough]
+
+[fragment shader spirv]
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 6
+; Bound: 179
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %color_out
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %i "i"
+ OpName %operands "operands"
+ OpName %block "block"
+ OpMemberName %block 0 "operands_squared"
+ OpMemberName %block 1 "operator"
+ OpMemberName %block 2 "expected_value"
+ OpName %_ ""
+ OpName %result "result"
+ OpName %test_passes "test_passes"
+ OpName %color_out "color_out"
+ OpDecorate %_arr_float_uint_2_0 ArrayStride 16
+ OpMemberDecorate %block 0 Offset 0
+ OpMemberDecorate %block 1 Offset 32
+ OpMemberDecorate %block 2 Offset 36
+ OpDecorate %block Block
+ OpDecorate %color_out Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %int = OpTypeInt 32 1
+%_ptr_Function_int = OpTypePointer Function %int
+ %int_0 = OpConstant %int 0
+ %int_2 = OpConstant %int 2
+ %bool = OpTypeBool
+ %float = OpTypeFloat 32
+ %uint = OpTypeInt 32 0
+ %uint_2 = OpConstant %uint 2
+%_arr_float_uint_2 = OpTypeArray %float %uint_2
+%_ptr_Function__arr_float_uint_2 = OpTypePointer Function %_arr_float_uint_2
+%_arr_float_uint_2_0 = OpTypeArray %float %uint_2
+ %block = OpTypeStruct %_arr_float_uint_2_0 %uint %uint
+%_ptr_PushConstant_block = OpTypePointer PushConstant %block
+ %_ = OpVariable %_ptr_PushConstant_block PushConstant
+%_ptr_PushConstant_float = OpTypePointer PushConstant %float
+%_ptr_Function_float = OpTypePointer Function %float
+ %int_1 = OpConstant %int 1
+%_ptr_Function_bool = OpTypePointer Function %bool
+ %true = OpConstantTrue %bool
+%_ptr_PushConstant_uint = OpTypePointer PushConstant %uint
+ %false = OpConstantFalse %bool
+ %float_0 = OpConstant %float 0
+ %uint_0 = OpConstant %uint 0
+ %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %color_out = OpVariable %_ptr_Output_v4float Output
+ %float_1 = OpConstant %float 1
+ %176 = OpConstantComposite %v4float %float_0 %float_1 %float_0 %float_1
+ %178 = OpConstantComposite %v4float %float_1 %float_0 %float_0 %float_1
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %i = OpVariable %_ptr_Function_int Function
+ %operands = OpVariable %_ptr_Function__arr_float_uint_2 Function
+ %result = OpVariable %_ptr_Function_bool Function
+%test_passes = OpVariable %_ptr_Function_bool Function
+ OpStore %i %int_0
+ OpBranch %10
+ %10 = OpLabel
+ OpLoopMerge %12 %13 None
+ OpBranch %14
+ %14 = OpLabel
+ %15 = OpLoad %int %i
+ %18 = OpSLessThan %bool %15 %int_2
+ OpBranchConditional %18 %11 %12
+ %11 = OpLabel
+ %25 = OpLoad %int %i
+ %30 = OpLoad %int %i
+ %32 = OpAccessChain %_ptr_PushConstant_float %_ %int_0 %30
+ %33 = OpLoad %float %32
+ %34 = OpExtInst %float %1 Sqrt %33
+ %36 = OpAccessChain %_ptr_Function_float %operands %25
+ OpStore %36 %34
+ OpBranch %13
+ %13 = OpLabel
+ %37 = OpLoad %int %i
+ %39 = OpIAdd %int %37 %int_1
+ OpStore %i %39
+ OpBranch %10
+ %12 = OpLabel
+ OpStore %result %true
+ %44 = OpAccessChain %_ptr_PushConstant_uint %_ %int_1
+ %45 = OpLoad %uint %44
+ OpSelectionMerge %58 None
+ OpSwitch %45 %58 0 %46 1 %47 2 %48 3 %49 4 %50 5 %51 6 %52 7 %53 8 %54 9 %55 10 %56 11 %57
+ %46 = OpLabel
+ %59 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %60 = OpLoad %float %59
+ %61 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %62 = OpLoad %float %61
+ %63 = OpFOrdEqual %bool %60 %62
+ OpStore %result %63
+ OpBranch %58
+ %47 = OpLabel
+ %65 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %66 = OpLoad %float %65
+ %67 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %68 = OpLoad %float %67
+ %69 = OpFOrdNotEqual %bool %66 %68
+ OpStore %result %69
+ OpBranch %58
+ %48 = OpLabel
+ %71 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %72 = OpLoad %float %71
+ %73 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %74 = OpLoad %float %73
+ %75 = OpFOrdLessThan %bool %72 %74
+ OpStore %result %75
+ OpBranch %58
+ %49 = OpLabel
+ %77 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %78 = OpLoad %float %77
+ %79 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %80 = OpLoad %float %79
+ %81 = OpFOrdGreaterThan %bool %78 %80
+ OpStore %result %81
+ OpBranch %58
+ %50 = OpLabel
+ %83 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %84 = OpLoad %float %83
+ %85 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %86 = OpLoad %float %85
+ %87 = OpFOrdLessThanEqual %bool %84 %86
+ OpStore %result %87
+ OpBranch %58
+ %51 = OpLabel
+ %89 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %90 = OpLoad %float %89
+ %91 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %92 = OpLoad %float %91
+ %93 = OpFOrdGreaterThanEqual %bool %90 %92
+ OpStore %result %93
+ OpBranch %58
+ %52 = OpLabel
+ %95 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %96 = OpLoad %float %95
+ %97 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %98 = OpLoad %float %97
+ %99 = OpFUnordEqual %bool %96 %98
+ OpStore %result %99
+ OpBranch %58
+ %53 = OpLabel
+ %101 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %102 = OpLoad %float %101
+ %103 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %104 = OpLoad %float %103
+ %105 = OpFUnordNotEqual %bool %102 %104
+ OpStore %result %105
+ OpBranch %58
+ %54 = OpLabel
+ %107 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %108 = OpLoad %float %107
+ %109 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %110 = OpLoad %float %109
+ %111 = OpFUnordLessThan %bool %108 %110
+ OpStore %result %111
+ OpBranch %58
+ %55 = OpLabel
+ %113 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %114 = OpLoad %float %113
+ %115 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %116 = OpLoad %float %115
+ %117 = OpFUnordGreaterThan %bool %114 %116
+ OpStore %result %117
+ OpBranch %58
+ %56 = OpLabel
+ %119 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %120 = OpLoad %float %119
+ %121 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %122 = OpLoad %float %121
+ %123 = OpFUnordLessThanEqual %bool %120 %122
+ OpStore %result %123
+ OpBranch %58
+ %57 = OpLabel
+ %125 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %126 = OpLoad %float %125
+ %127 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %128 = OpLoad %float %127
+ %129 = OpFUnordGreaterThanEqual %bool %126 %128
+ OpStore %result %129
+ OpBranch %58
+ %58 = OpLabel
+ OpStore %test_passes %false
+ %134 = OpAccessChain %_ptr_PushConstant_float %_ %int_0 %int_0
+ %135 = OpLoad %float %134
+ %137 = OpFOrdLessThan %bool %135 %float_0
+ OpSelectionMerge %139 None
+ OpBranchConditional %137 %138 %139
+ %138 = OpLabel
+ %140 = OpAccessChain %_ptr_Function_float %operands %int_0
+ %141 = OpLoad %float %140
+ %142 = OpIsNan %bool %141
+ %143 = OpLogicalNot %bool %142
+ OpBranch %139
+ %139 = OpLabel
+ %144 = OpPhi %bool %137 %58 %143 %138
+ OpSelectionMerge %146 None
+ OpBranchConditional %144 %145 %147
+ %145 = OpLabel
+ OpStore %test_passes %true
+ OpBranch %146
+ %147 = OpLabel
+ %148 = OpAccessChain %_ptr_PushConstant_float %_ %int_0 %int_1
+ %149 = OpLoad %float %148
+ %150 = OpFOrdLessThan %bool %149 %float_0
+ OpSelectionMerge %152 None
+ OpBranchConditional %150 %151 %152
+ %151 = OpLabel
+ %153 = OpAccessChain %_ptr_Function_float %operands %int_1
+ %154 = OpLoad %float %153
+ %155 = OpIsNan %bool %154
+ %156 = OpLogicalNot %bool %155
+ OpBranch %152
+ %152 = OpLabel
+ %157 = OpPhi %bool %150 %147 %156 %151
+ OpSelectionMerge %159 None
+ OpBranchConditional %157 %158 %160
+ %158 = OpLabel
+ OpStore %test_passes %true
+ OpBranch %159
+ %160 = OpLabel
+ %161 = OpLoad %bool %result
+ %162 = OpAccessChain %_ptr_PushConstant_uint %_ %int_2
+ %163 = OpLoad %uint %162
+ %165 = OpINotEqual %bool %163 %uint_0
+ %166 = OpLogicalEqual %bool %161 %165
+ OpSelectionMerge %168 None
+ OpBranchConditional %166 %167 %168
+ %167 = OpLabel
+ OpStore %test_passes %true
+ OpBranch %168
+ %168 = OpLabel
+ OpBranch %159
+ %159 = OpLabel
+ OpBranch %146
+ %146 = OpLabel
+ %169 = OpLoad %bool %test_passes
+ OpSelectionMerge %171 None
+ OpBranchConditional %169 %170 %177
+ %170 = OpLabel
+ OpStore %color_out %176
+ OpBranch %171
+ %177 = OpLabel
+ OpStore %color_out %178
+ OpBranch %171
+ %171 = OpLabel
+ OpReturn
+ OpFunctionEnd
+
+[comment]
+#version 450
+/* This is the original fragment shader used to generate the SPIR-V.
+ * The SPIR-V was then manually edited to replace the second set of
+ * comparisons with the OpFUnord* equivalents.
+ */
+
+layout(std140, push_constant) uniform block {
+ float operands_squared[2];
+ uint operator;
+ bool expected_value;
+};
+
+layout(location = 0) out vec4 color_out;
+
+void
+main()
+{
+ float operands[2];
+
+ for (int i = 0; i < 2; i++)
+ operands[i] = sqrt(operands_squared[i]);
+
+ bool result = true;
+
+ switch (operator) {
+ case 0:
+ result = operands[0] == operands[1];
+ break;
+ case 1:
+ result = operands[0] != operands[1];
+ break;
+ case 2:
+ result = operands[0] < operands[1];
+ break;
+ case 3:
+ result = operands[0] > operands[1];
+ break;
+ case 4:
+ result = operands[0] <= operands[1];
+ break;
+ case 5:
+ result = operands[0] >= operands[1];
+ break;
+ case 6:
+ result = operands[0] == operands[1];
+ break;
+ case 7:
+ result = operands[0] != operands[1];
+ break;
+ case 8:
+ result = operands[0] < operands[1];
+ break;
+ case 9:
+ result = operands[0] > operands[1];
+ break;
+ case 10:
+ result = operands[0] <= operands[1];
+ break;
+ case 11:
+ result = operands[0] >= operands[1];
+ break;
+ }
+
+ bool test_passes = false;
+
+ /* If the operand is meant to be NaN but NaN wasn’t generated
+ * then we don’t really know what the expected result should
+ * be so let’s just assume the test passes
+ */
+ if (operands_squared[0] < 0.0 && !isnan(operands[0])) {
+ test_passes = true;
+ } else if (operands_squared[1] < 0.0 && !isnan(operands[1])) {
+ test_passes = true;
+ } else if (result == expected_value) {
+ test_passes = true;
+ }
+
+ if (test_passes)
+ color_out = vec4(0.0, 1.0, 0.0, 1.0);
+ else
+ color_out = vec4(1.0, 0.0, 0.0, 1.0);
+}
+
+[test]
+clear color 0.8 0.0 0.0 0.0
+clear
+
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFOrdEqual
+uniform int 32 0
+uniform int 36 0
+draw rect ortho 0 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFOrdEqual
+uniform int 32 0
+uniform int 36 0
+draw rect ortho 4 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFOrdEqual
+uniform int 32 0
+uniform int 36 1
+draw rect ortho 8 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFOrdEqual
+uniform int 32 0
+uniform int 36 0
+draw rect ortho 12 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFOrdEqual
+uniform int 32 0
+uniform int 36 0
+draw rect ortho 16 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFOrdNotEqual
+uniform int 32 1
+uniform int 36 1
+draw rect ortho 20 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFOrdNotEqual
+uniform int 32 1
+uniform int 36 1
+draw rect ortho 24 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFOrdNotEqual
+uniform int 32 1
+uniform int 36 0
+draw rect ortho 28 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFOrdNotEqual
+uniform int 32 1
+uniform int 36 0
+draw rect ortho 32 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFOrdNotEqual
+uniform int 32 1
+uniform int 36 0
+draw rect ortho 36 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFOrdLessThan
+uniform int 32 2
+uniform int 36 1
+draw rect ortho 40 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFOrdLessThan
+uniform int 32 2
+uniform int 36 0
+draw rect ortho 44 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFOrdLessThan
+uniform int 32 2
+uniform int 36 0
+draw rect ortho 48 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFOrdLessThan
+uniform int 32 2
+uniform int 36 0
+draw rect ortho 52 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFOrdLessThan
+uniform int 32 2
+uniform int 36 0
+draw rect ortho 56 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFOrdGreaterThan
+uniform int 32 3
+uniform int 36 0
+draw rect ortho 60 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFOrdGreaterThan
+uniform int 32 3
+uniform int 36 1
+draw rect ortho 64 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFOrdGreaterThan
+uniform int 32 3
+uniform int 36 0
+draw rect ortho 68 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFOrdGreaterThan
+uniform int 32 3
+uniform int 36 0
+draw rect ortho 72 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFOrdGreaterThan
+uniform int 32 3
+uniform int 36 0
+draw rect ortho 76 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFOrdLessThanEqual
+uniform int 32 4
+uniform int 36 1
+draw rect ortho 80 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFOrdLessThanEqual
+uniform int 32 4
+uniform int 36 0
+draw rect ortho 84 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFOrdLessThanEqual
+uniform int 32 4
+uniform int 36 1
+draw rect ortho 88 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFOrdLessThanEqual
+uniform int 32 4
+uniform int 36 0
+draw rect ortho 92 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFOrdLessThanEqual
+uniform int 32 4
+uniform int 36 0
+draw rect ortho 96 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFOrdGreaterThanEqual
+uniform int 32 5
+uniform int 36 0
+draw rect ortho 100 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFOrdGreaterThanEqual
+uniform int 32 5
+uniform int 36 1
+draw rect ortho 104 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFOrdGreaterThanEqual
+uniform int 32 5
+uniform int 36 1
+draw rect ortho 108 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFOrdGreaterThanEqual
+uniform int 32 5
+uniform int 36 0
+draw rect ortho 112 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFOrdGreaterThanEqual
+uniform int 32 5
+uniform int 36 0
+draw rect ortho 116 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFUnordEqual
+uniform int 32 6
+uniform int 36 0
+draw rect ortho 120 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFUnordEqual
+uniform int 32 6
+uniform int 36 0
+draw rect ortho 124 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFUnordEqual
+uniform int 32 6
+uniform int 36 1
+draw rect ortho 128 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFUnordEqual
+uniform int 32 6
+uniform int 36 1
+draw rect ortho 132 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFUnordEqual
+uniform int 32 6
+uniform int 36 1
+draw rect ortho 136 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFUnordNotEqual
+uniform int 32 7
+uniform int 36 1
+draw rect ortho 140 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFUnordNotEqual
+uniform int 32 7
+uniform int 36 1
+draw rect ortho 144 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFUnordNotEqual
+uniform int 32 7
+uniform int 36 0
+draw rect ortho 148 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFUnordNotEqual
+uniform int 32 7
+uniform int 36 1
+draw rect ortho 152 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFUnordNotEqual
+uniform int 32 7
+uniform int 36 1
+draw rect ortho 156 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFUnordLessThan
+uniform int 32 8
+uniform int 36 1
+draw rect ortho 160 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFUnordLessThan
+uniform int 32 8
+uniform int 36 0
+draw rect ortho 164 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFUnordLessThan
+uniform int 32 8
+uniform int 36 0
+draw rect ortho 168 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFUnordLessThan
+uniform int 32 8
+uniform int 36 1
+draw rect ortho 172 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFUnordLessThan
+uniform int 32 8
+uniform int 36 1
+draw rect ortho 176 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFUnordGreaterThan
+uniform int 32 9
+uniform int 36 0
+draw rect ortho 180 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFUnordGreaterThan
+uniform int 32 9
+uniform int 36 1
+draw rect ortho 184 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFUnordGreaterThan
+uniform int 32 9
+uniform int 36 0
+draw rect ortho 188 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFUnordGreaterThan
+uniform int 32 9
+uniform int 36 1
+draw rect ortho 192 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFUnordGreaterThan
+uniform int 32 9
+uniform int 36 1
+draw rect ortho 196 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFUnordLessThanEqual
+uniform int 32 10
+uniform int 36 1
+draw rect ortho 200 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFUnordLessThanEqual
+uniform int 32 10
+uniform int 36 0
+draw rect ortho 204 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFUnordLessThanEqual
+uniform int 32 10
+uniform int 36 1
+draw rect ortho 208 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFUnordLessThanEqual
+uniform int 32 10
+uniform int 36 1
+draw rect ortho 212 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFUnordLessThanEqual
+uniform int 32 10
+uniform int 36 1
+draw rect ortho 216 0 4 250
+# a is less than b
+uniform float 0 4
+uniform float 16 16
+# OpFUnordGreaterThanEqual
+uniform int 32 11
+uniform int 36 0
+draw rect ortho 220 0 4 250
+# a is greater than b
+uniform float 0 16
+uniform float 16 4
+# OpFUnordGreaterThanEqual
+uniform int 32 11
+uniform int 36 1
+draw rect ortho 224 0 4 250
+# a is equal to b
+uniform float 0 4
+uniform float 16 4
+# OpFUnordGreaterThanEqual
+uniform int 32 11
+uniform int 36 1
+draw rect ortho 228 0 4 250
+# a is Nan
+uniform float 0 -1
+uniform float 16 4
+# OpFUnordGreaterThanEqual
+uniform int 32 11
+uniform int 36 1
+draw rect ortho 232 0 4 250
+# b is Nan
+uniform float 0 4
+uniform float 16 -1
+# OpFUnordGreaterThanEqual
+uniform int 32 11
+uniform int 36 1
+draw rect ortho 236 0 14 250
+
+probe all rgba 0.0 1.0 0.0 1.0
--
2.17.1
More information about the Piglit
mailing list