31be74a853
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.
180 lines
7.2 KiB
JavaScript
180 lines
7.2 KiB
JavaScript
; 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
|
|
%41 = OpLoad %v4float %A
|
|
%42 = OpLoad %v4float %B
|
|
%43 = OpFUnordNotEqual %v4bool %41 %42
|
|
OpStore %neq %43
|
|
%ordered = OpFOrdNotEqual %v4bool %41 %42
|
|
OpStore %neq %ordered
|
|
%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
|