Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2022-03-03 13:04:45 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2022-03-03 16:50:56 +0300
commit31be74a853b92d98893e2c35d2319cb227afc9b0 (patch)
treec776cf480601d240a6d655a83f67cb98cc5c2170 /shaders-hlsl-no-opt
parentb91ecf607784af2afc336d09ada9d7ad83165e3a (diff)
Add relax_nan_checks options.
Makes codegen from typical D3D emulation SPIR-V more readable. Also makes cross compilation with NotEqual more sensible. It's very rare to actually need the strict NaN-checks in practice. Also, glslang now emits UnordNotEqual by default it seems, so give up trying to assume OrdNotEqual. Harmonize for UnordNotEqual as the sane default.
Diffstat (limited to 'shaders-hlsl-no-opt')
-rw-r--r--shaders-hlsl-no-opt/asm/frag/unordered-compare.asm.frag2
-rw-r--r--shaders-hlsl-no-opt/asm/frag/unordered-compare.relax-nan.asm.frag179
-rw-r--r--shaders-hlsl-no-opt/vert/empty-shader.nofxc.sm30.vert (renamed from shaders-hlsl-no-opt/vert/empty-shader.sm30.vert)0
3 files changed, 181 insertions, 0 deletions
diff --git a/shaders-hlsl-no-opt/asm/frag/unordered-compare.asm.frag b/shaders-hlsl-no-opt/asm/frag/unordered-compare.asm.frag
index 4ad8fc5a..2e5e0309 100644
--- a/shaders-hlsl-no-opt/asm/frag/unordered-compare.asm.frag
+++ b/shaders-hlsl-no-opt/asm/frag/unordered-compare.asm.frag
@@ -89,6 +89,8 @@
%38 = OpLoad %v4float %B
%39 = OpFUnordEqual %v4bool %37 %38
OpStore %eq %39
+ %ordered = OpFOrdNotEqual %v4bool %37 %38
+ OpStore %neq %ordered
%41 = OpLoad %v4float %A
%42 = OpLoad %v4float %B
%43 = OpFUnordNotEqual %v4bool %41 %42
diff --git a/shaders-hlsl-no-opt/asm/frag/unordered-compare.relax-nan.asm.frag b/shaders-hlsl-no-opt/asm/frag/unordered-compare.relax-nan.asm.frag
new file mode 100644
index 00000000..2e5e0309
--- /dev/null
+++ b/shaders-hlsl-no-opt/asm/frag/unordered-compare.relax-nan.asm.frag
@@ -0,0 +1,179 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 132
+; Schema: 0
+ OpCapability Shader
+ %1 = OpExtInstImport "GLSL.std.450"
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint Fragment %main "main" %A %B %FragColor
+ OpExecutionMode %main OriginUpperLeft
+ OpSource GLSL 450
+ OpName %main "main"
+ OpName %test_vector_ "test_vector("
+ OpName %test_scalar_ "test_scalar("
+ OpName %le "le"
+ OpName %A "A"
+ OpName %B "B"
+ OpName %leq "leq"
+ OpName %ge "ge"
+ OpName %geq "geq"
+ OpName %eq "eq"
+ OpName %neq "neq"
+ OpName %le_0 "le"
+ OpName %leq_0 "leq"
+ OpName %ge_0 "ge"
+ OpName %geq_0 "geq"
+ OpName %eq_0 "eq"
+ OpName %neq_0 "neq"
+ OpName %FragColor "FragColor"
+ OpDecorate %A Location 0
+ OpDecorate %B Location 1
+ OpDecorate %FragColor Location 0
+ %void = OpTypeVoid
+ %3 = OpTypeFunction %void
+ %float = OpTypeFloat 32
+ %v4float = OpTypeVector %float 4
+ %8 = OpTypeFunction %v4float
+ %11 = OpTypeFunction %float
+ %bool = OpTypeBool
+ %v4bool = OpTypeVector %bool 4
+%_ptr_Function_v4bool = OpTypePointer Function %v4bool
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+ %A = OpVariable %_ptr_Input_v4float Input
+ %B = OpVariable %_ptr_Input_v4float Input
+ %float_0 = OpConstant %float 0
+ %float_1 = OpConstant %float 1
+ %47 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
+ %48 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_bool = OpTypePointer Function %bool
+ %uint = OpTypeInt 32 0
+ %uint_0 = OpConstant %uint 0
+%_ptr_Input_float = OpTypePointer Input %float
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+ %FragColor = OpVariable %_ptr_Output_v4float Output
+ %main = OpFunction %void None %3
+ %5 = OpLabel
+ %128 = OpFunctionCall %v4float %test_vector_
+ %129 = OpFunctionCall %float %test_scalar_
+ %130 = OpCompositeConstruct %v4float %129 %129 %129 %129
+ %131 = OpFAdd %v4float %128 %130
+ OpStore %FragColor %131
+ OpReturn
+ OpFunctionEnd
+%test_vector_ = OpFunction %v4float None %8
+ %10 = OpLabel
+ %le = OpVariable %_ptr_Function_v4bool Function
+ %leq = OpVariable %_ptr_Function_v4bool Function
+ %ge = OpVariable %_ptr_Function_v4bool Function
+ %geq = OpVariable %_ptr_Function_v4bool Function
+ %eq = OpVariable %_ptr_Function_v4bool Function
+ %neq = OpVariable %_ptr_Function_v4bool Function
+ %20 = OpLoad %v4float %A
+ %22 = OpLoad %v4float %B
+ %23 = OpFUnordLessThan %v4bool %20 %22
+ OpStore %le %23
+ %25 = OpLoad %v4float %A
+ %26 = OpLoad %v4float %B
+ %27 = OpFUnordLessThanEqual %v4bool %25 %26
+ OpStore %leq %27
+ %29 = OpLoad %v4float %A
+ %30 = OpLoad %v4float %B
+ %31 = OpFUnordGreaterThan %v4bool %29 %30
+ OpStore %ge %31
+ %33 = OpLoad %v4float %A
+ %34 = OpLoad %v4float %B
+ %35 = OpFUnordGreaterThanEqual %v4bool %33 %34
+ OpStore %geq %35
+ %37 = OpLoad %v4float %A
+ %38 = OpLoad %v4float %B
+ %39 = OpFUnordEqual %v4bool %37 %38
+ OpStore %eq %39
+ %ordered = OpFOrdNotEqual %v4bool %37 %38
+ OpStore %neq %ordered
+ %41 = OpLoad %v4float %A
+ %42 = OpLoad %v4float %B
+ %43 = OpFUnordNotEqual %v4bool %41 %42
+ OpStore %neq %43
+ %44 = OpLoad %v4bool %le
+ %49 = OpSelect %v4float %44 %48 %47
+ %50 = OpLoad %v4bool %leq
+ %51 = OpSelect %v4float %50 %48 %47
+ %52 = OpFAdd %v4float %49 %51
+ %53 = OpLoad %v4bool %ge
+ %54 = OpSelect %v4float %53 %48 %47
+ %55 = OpFAdd %v4float %52 %54
+ %56 = OpLoad %v4bool %geq
+ %57 = OpSelect %v4float %56 %48 %47
+ %58 = OpFAdd %v4float %55 %57
+ %59 = OpLoad %v4bool %eq
+ %60 = OpSelect %v4float %59 %48 %47
+ %61 = OpFAdd %v4float %58 %60
+ %62 = OpLoad %v4bool %neq
+ %63 = OpSelect %v4float %62 %48 %47
+ %64 = OpFAdd %v4float %61 %63
+ OpReturnValue %64
+ OpFunctionEnd
+%test_scalar_ = OpFunction %float None %11
+ %13 = OpLabel
+ %le_0 = OpVariable %_ptr_Function_bool Function
+ %leq_0 = OpVariable %_ptr_Function_bool Function
+ %ge_0 = OpVariable %_ptr_Function_bool Function
+ %geq_0 = OpVariable %_ptr_Function_bool Function
+ %eq_0 = OpVariable %_ptr_Function_bool Function
+ %neq_0 = OpVariable %_ptr_Function_bool Function
+ %72 = OpAccessChain %_ptr_Input_float %A %uint_0
+ %73 = OpLoad %float %72
+ %74 = OpAccessChain %_ptr_Input_float %B %uint_0
+ %75 = OpLoad %float %74
+ %76 = OpFUnordLessThan %bool %73 %75
+ OpStore %le_0 %76
+ %78 = OpAccessChain %_ptr_Input_float %A %uint_0
+ %79 = OpLoad %float %78
+ %80 = OpAccessChain %_ptr_Input_float %B %uint_0
+ %81 = OpLoad %float %80
+ %82 = OpFUnordLessThanEqual %bool %79 %81
+ OpStore %leq_0 %82
+ %84 = OpAccessChain %_ptr_Input_float %A %uint_0
+ %85 = OpLoad %float %84
+ %86 = OpAccessChain %_ptr_Input_float %B %uint_0
+ %87 = OpLoad %float %86
+ %88 = OpFUnordGreaterThan %bool %85 %87
+ OpStore %ge_0 %88
+ %90 = OpAccessChain %_ptr_Input_float %A %uint_0
+ %91 = OpLoad %float %90
+ %92 = OpAccessChain %_ptr_Input_float %B %uint_0
+ %93 = OpLoad %float %92
+ %94 = OpFUnordGreaterThanEqual %bool %91 %93
+ OpStore %geq_0 %94
+ %96 = OpAccessChain %_ptr_Input_float %A %uint_0
+ %97 = OpLoad %float %96
+ %98 = OpAccessChain %_ptr_Input_float %B %uint_0
+ %99 = OpLoad %float %98
+ %100 = OpFUnordEqual %bool %97 %99
+ OpStore %eq_0 %100
+ %102 = OpAccessChain %_ptr_Input_float %A %uint_0
+ %103 = OpLoad %float %102
+ %104 = OpAccessChain %_ptr_Input_float %B %uint_0
+ %105 = OpLoad %float %104
+ %106 = OpFUnordNotEqual %bool %103 %105
+ OpStore %neq_0 %106
+ %107 = OpLoad %bool %le_0
+ %108 = OpSelect %float %107 %float_1 %float_0
+ %109 = OpLoad %bool %leq_0
+ %110 = OpSelect %float %109 %float_1 %float_0
+ %111 = OpFAdd %float %108 %110
+ %112 = OpLoad %bool %ge_0
+ %113 = OpSelect %float %112 %float_1 %float_0
+ %114 = OpFAdd %float %111 %113
+ %115 = OpLoad %bool %geq_0
+ %116 = OpSelect %float %115 %float_1 %float_0
+ %117 = OpFAdd %float %114 %116
+ %118 = OpLoad %bool %eq_0
+ %119 = OpSelect %float %118 %float_1 %float_0
+ %120 = OpFAdd %float %117 %119
+ %121 = OpLoad %bool %neq_0
+ %122 = OpSelect %float %121 %float_1 %float_0
+ %123 = OpFAdd %float %120 %122
+ OpReturnValue %123
+ OpFunctionEnd
diff --git a/shaders-hlsl-no-opt/vert/empty-shader.sm30.vert b/shaders-hlsl-no-opt/vert/empty-shader.nofxc.sm30.vert
index 0b8dbb5a..0b8dbb5a 100644
--- a/shaders-hlsl-no-opt/vert/empty-shader.sm30.vert
+++ b/shaders-hlsl-no-opt/vert/empty-shader.nofxc.sm30.vert