This implements GatherCmpRed in terms of OpImageDrefGather.
There appears to be no way to implement the Green/Blue/Apha forms: see #673.
--- /dev/null
+hlsl.gathercmpRGBA.offset.dx10.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:38 Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Function Parameters:
+0:? Sequence
+0:45 Sequence
+0:45 move second child to first child (temp 4-component vector of float)
+0:45 'txval001' (temp 4-component vector of float)
+0:45 textureGatherOffset (temp 4-component vector of float)
+0:45 Construct combined texture-sampler (temp sampler2DShadow)
+0:45 'g_tTex2df4' (uniform texture2D)
+0:45 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:45 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:45 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:45 Constant:
+0:45 1 (const uint)
+0:45 Constant:
+0:45 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 0 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:46 Sequence
+0:46 move second child to first child (temp 4-component vector of int)
+0:46 'txval011' (temp 4-component vector of int)
+0:46 textureGatherOffset (temp 4-component vector of int)
+0:46 Construct combined texture-sampler (temp isampler2DShadow)
+0:46 'g_tTex2di4' (uniform itexture2D)
+0:46 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:46 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:46 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:46 Constant:
+0:46 1 (const uint)
+0:46 Constant:
+0:46 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? -1 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:47 Sequence
+0:47 move second child to first child (temp 4-component vector of uint)
+0:47 'txval021' (temp 4-component vector of uint)
+0:47 textureGatherOffset (temp 4-component vector of uint)
+0:47 Construct combined texture-sampler (temp usampler2DShadow)
+0:47 'g_tTex2du4' (uniform utexture2D)
+0:47 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:47 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:47 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:47 Constant:
+0:47 1 (const uint)
+0:47 Constant:
+0:47 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 1 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:49 Sequence
+0:49 move second child to first child (temp 4-component vector of float)
+0:49 'txval004' (temp 4-component vector of float)
+0:49 textureGatherOffsets (temp 4-component vector of float)
+0:49 Construct combined texture-sampler (temp sampler2DShadow)
+0:49 'g_tTex2df4' (uniform texture2D)
+0:49 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:49 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:49 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:49 Constant:
+0:49 1 (const uint)
+0:49 Constant:
+0:49 0.750000
+0:49 Constant:
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:50 Sequence
+0:50 move second child to first child (temp 4-component vector of int)
+0:50 'txval014' (temp 4-component vector of int)
+0:50 textureGatherOffsets (temp 4-component vector of int)
+0:50 Construct combined texture-sampler (temp isampler2DShadow)
+0:50 'g_tTex2di4' (uniform itexture2D)
+0:50 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:50 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:50 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:50 Constant:
+0:50 1 (const uint)
+0:50 Constant:
+0:50 0.750000
+0:50 Constant:
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:51 Sequence
+0:51 move second child to first child (temp 4-component vector of uint)
+0:51 'txval024' (temp 4-component vector of uint)
+0:51 textureGatherOffsets (temp 4-component vector of uint)
+0:51 Construct combined texture-sampler (temp usampler2DShadow)
+0:51 'g_tTex2du4' (uniform utexture2D)
+0:51 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:51 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:51 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:51 Constant:
+0:51 1 (const uint)
+0:51 Constant:
+0:51 0.750000
+0:51 Constant:
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:114 move second child to first child (temp 4-component vector of float)
+0:114 Color: direct index for structure (temp 4-component vector of float)
+0:114 'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1.000000
+0:114 1.000000
+0:114 1.000000
+0:114 1.000000
+0:115 move second child to first child (temp float)
+0:115 Depth: direct index for structure (temp float)
+0:115 'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1.000000
+0:117 Branch: Return with expression
+0:117 'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Function Definition: main( (temp void)
+0:38 Function Parameters:
+0:? Sequence
+0:38 Sequence
+0:38 move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 move second child to first child (temp 4-component vector of float)
+0:? 'Color' (layout(location=0 ) out 4-component vector of float)
+0:38 Color: direct index for structure (temp 4-component vector of float)
+0:38 'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Constant:
+0:38 0 (const int)
+0:38 move second child to first child (temp float)
+0:? 'Depth' (out float FragDepth)
+0:38 Depth: direct index for structure (temp float)
+0:38 'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Constant:
+0:38 1 (const int)
+0:? Linker Objects
+0:? 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:? 'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:? 'g_tTex1di4' (uniform itexture1D)
+0:? 'g_tTex1du4' (uniform utexture1D)
+0:? 'g_tTex2df4' (uniform texture2D)
+0:? 'g_tTex2di4' (uniform itexture2D)
+0:? 'g_tTex2du4' (uniform utexture2D)
+0:? 'g_tTex3df4' (uniform texture3D)
+0:? 'g_tTex3di4' (uniform itexture3D)
+0:? 'g_tTex3du4' (uniform utexture3D)
+0:? 'g_tTexcdf4' (uniform textureCube)
+0:? 'g_tTexcdi4' (uniform itextureCube)
+0:? 'g_tTexcdu4' (uniform utextureCube)
+0:? 'Color' (layout(location=0 ) out 4-component vector of float)
+0:? 'Depth' (out float FragDepth)
+0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:38 Function Definition: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Function Parameters:
+0:? Sequence
+0:45 Sequence
+0:45 move second child to first child (temp 4-component vector of float)
+0:45 'txval001' (temp 4-component vector of float)
+0:45 textureGatherOffset (temp 4-component vector of float)
+0:45 Construct combined texture-sampler (temp sampler2DShadow)
+0:45 'g_tTex2df4' (uniform texture2D)
+0:45 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:45 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:45 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:45 Constant:
+0:45 1 (const uint)
+0:45 Constant:
+0:45 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 0 (const int)
+0:45 Constant:
+0:45 0 (const int)
+0:46 Sequence
+0:46 move second child to first child (temp 4-component vector of int)
+0:46 'txval011' (temp 4-component vector of int)
+0:46 textureGatherOffset (temp 4-component vector of int)
+0:46 Construct combined texture-sampler (temp isampler2DShadow)
+0:46 'g_tTex2di4' (uniform itexture2D)
+0:46 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:46 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:46 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:46 Constant:
+0:46 1 (const uint)
+0:46 Constant:
+0:46 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? -1 (const int)
+0:46 Constant:
+0:46 0 (const int)
+0:47 Sequence
+0:47 move second child to first child (temp 4-component vector of uint)
+0:47 'txval021' (temp 4-component vector of uint)
+0:47 textureGatherOffset (temp 4-component vector of uint)
+0:47 Construct combined texture-sampler (temp usampler2DShadow)
+0:47 'g_tTex2du4' (uniform utexture2D)
+0:47 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:47 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:47 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:47 Constant:
+0:47 1 (const uint)
+0:47 Constant:
+0:47 0.750000
+0:? Constant:
+0:? 1 (const int)
+0:? 1 (const int)
+0:47 Constant:
+0:47 0 (const int)
+0:49 Sequence
+0:49 move second child to first child (temp 4-component vector of float)
+0:49 'txval004' (temp 4-component vector of float)
+0:49 textureGatherOffsets (temp 4-component vector of float)
+0:49 Construct combined texture-sampler (temp sampler2DShadow)
+0:49 'g_tTex2df4' (uniform texture2D)
+0:49 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:49 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:49 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:49 Constant:
+0:49 1 (const uint)
+0:49 Constant:
+0:49 0.750000
+0:49 Constant:
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 1 (const int)
+0:49 0 (const int)
+0:49 Constant:
+0:49 0 (const int)
+0:50 Sequence
+0:50 move second child to first child (temp 4-component vector of int)
+0:50 'txval014' (temp 4-component vector of int)
+0:50 textureGatherOffsets (temp 4-component vector of int)
+0:50 Construct combined texture-sampler (temp isampler2DShadow)
+0:50 'g_tTex2di4' (uniform itexture2D)
+0:50 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:50 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:50 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:50 Constant:
+0:50 1 (const uint)
+0:50 Constant:
+0:50 0.750000
+0:50 Constant:
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 1 (const int)
+0:50 -1 (const int)
+0:50 Constant:
+0:50 0 (const int)
+0:51 Sequence
+0:51 move second child to first child (temp 4-component vector of uint)
+0:51 'txval024' (temp 4-component vector of uint)
+0:51 textureGatherOffsets (temp 4-component vector of uint)
+0:51 Construct combined texture-sampler (temp usampler2DShadow)
+0:51 'g_tTex2du4' (uniform utexture2D)
+0:51 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:51 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of float)
+0:51 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+0:51 Constant:
+0:51 1 (const uint)
+0:51 Constant:
+0:51 0.750000
+0:51 Constant:
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 1 (const int)
+0:51 Constant:
+0:51 0 (const int)
+0:114 move second child to first child (temp 4-component vector of float)
+0:114 Color: direct index for structure (temp 4-component vector of float)
+0:114 'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:114 Constant:
+0:114 0 (const int)
+0:114 Constant:
+0:114 1.000000
+0:114 1.000000
+0:114 1.000000
+0:114 1.000000
+0:115 move second child to first child (temp float)
+0:115 Depth: direct index for structure (temp float)
+0:115 'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:115 Constant:
+0:115 1 (const int)
+0:115 Constant:
+0:115 1.000000
+0:117 Branch: Return with expression
+0:117 'psout' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Function Definition: main( (temp void)
+0:38 Function Parameters:
+0:? Sequence
+0:38 Sequence
+0:38 move second child to first child (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Function Call: @main( (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 move second child to first child (temp 4-component vector of float)
+0:? 'Color' (layout(location=0 ) out 4-component vector of float)
+0:38 Color: direct index for structure (temp 4-component vector of float)
+0:38 'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Constant:
+0:38 0 (const int)
+0:38 move second child to first child (temp float)
+0:? 'Depth' (out float FragDepth)
+0:38 Depth: direct index for structure (temp float)
+0:38 'flattenTemp' (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:38 Constant:
+0:38 1 (const int)
+0:? Linker Objects
+0:? 'g_sSampCmp' (layout(binding=0 ) uniform sampler)
+0:? 'g_tTex1df4a' (layout(binding=1 ) uniform texture1D)
+0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:? 'g_tTex1di4' (uniform itexture1D)
+0:? 'g_tTex1du4' (uniform utexture1D)
+0:? 'g_tTex2df4' (uniform texture2D)
+0:? 'g_tTex2di4' (uniform itexture2D)
+0:? 'g_tTex2du4' (uniform utexture2D)
+0:? 'g_tTex3df4' (uniform texture3D)
+0:? 'g_tTex3di4' (uniform itexture3D)
+0:? 'g_tTex3du4' (uniform utexture3D)
+0:? 'g_tTexcdf4' (uniform textureCube)
+0:? 'g_tTexcdi4' (uniform itextureCube)
+0:? 'g_tTexcdu4' (uniform utextureCube)
+0:? 'Color' (layout(location=0 ) out 4-component vector of float)
+0:? 'Depth' (out float FragDepth)
+0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform float c1, layout(offset=8 ) uniform 2-component vector of float c2, layout(offset=16 ) uniform 3-component vector of float c3, layout(offset=32 ) uniform 4-component vector of float c4})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 146
+
+ Capability Shader
+ Capability Sampled1D
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint Fragment 4 "main" 111 115
+ ExecutionMode 4 OriginUpperLeft
+ Name 4 "main"
+ Name 8 "PS_OUTPUT"
+ MemberName 8(PS_OUTPUT) 0 "Color"
+ MemberName 8(PS_OUTPUT) 1 "Depth"
+ Name 10 "@main("
+ Name 13 "txval001"
+ Name 16 "g_tTex2df4"
+ Name 20 "g_sSampCmp"
+ Name 27 "$Global"
+ MemberName 27($Global) 0 "c1"
+ MemberName 27($Global) 1 "c2"
+ MemberName 27($Global) 2 "c3"
+ MemberName 27($Global) 3 "c4"
+ Name 29 ""
+ Name 42 "txval011"
+ Name 45 "g_tTex2di4"
+ Name 59 "txval021"
+ Name 62 "g_tTex2du4"
+ Name 72 "txval004"
+ Name 82 "txval014"
+ Name 90 "txval024"
+ Name 99 "psout"
+ Name 108 "flattenTemp"
+ Name 111 "Color"
+ Name 115 "Depth"
+ Name 120 "g_tTex1df4a"
+ Name 121 "g_tTex1df4"
+ Name 124 "g_tTex1di4"
+ Name 127 "g_tTex1du4"
+ Name 130 "g_tTex3df4"
+ Name 133 "g_tTex3di4"
+ Name 136 "g_tTex3du4"
+ Name 139 "g_tTexcdf4"
+ Name 142 "g_tTexcdi4"
+ Name 145 "g_tTexcdu4"
+ Decorate 16(g_tTex2df4) DescriptorSet 0
+ Decorate 20(g_sSampCmp) DescriptorSet 0
+ Decorate 20(g_sSampCmp) Binding 0
+ MemberDecorate 27($Global) 0 Offset 0
+ MemberDecorate 27($Global) 1 Offset 8
+ MemberDecorate 27($Global) 2 Offset 16
+ MemberDecorate 27($Global) 3 Offset 32
+ Decorate 27($Global) Block
+ Decorate 29 DescriptorSet 0
+ Decorate 45(g_tTex2di4) DescriptorSet 0
+ Decorate 62(g_tTex2du4) DescriptorSet 0
+ Decorate 111(Color) Location 0
+ Decorate 115(Depth) BuiltIn FragDepth
+ Decorate 120(g_tTex1df4a) DescriptorSet 0
+ Decorate 120(g_tTex1df4a) Binding 1
+ Decorate 121(g_tTex1df4) DescriptorSet 0
+ Decorate 121(g_tTex1df4) Binding 0
+ Decorate 124(g_tTex1di4) DescriptorSet 0
+ Decorate 127(g_tTex1du4) DescriptorSet 0
+ Decorate 130(g_tTex3df4) DescriptorSet 0
+ Decorate 133(g_tTex3di4) DescriptorSet 0
+ Decorate 136(g_tTex3du4) DescriptorSet 0
+ Decorate 139(g_tTexcdf4) DescriptorSet 0
+ Decorate 142(g_tTexcdi4) DescriptorSet 0
+ Decorate 145(g_tTexcdu4) DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeFloat 32
+ 7: TypeVector 6(float) 4
+ 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
+ 9: TypeFunction 8(PS_OUTPUT)
+ 12: TypePointer Function 7(fvec4)
+ 14: TypeImage 6(float) 2D sampled format:Unknown
+ 15: TypePointer UniformConstant 14
+ 16(g_tTex2df4): 15(ptr) Variable UniformConstant
+ 18: TypeSampler
+ 19: TypePointer UniformConstant 18
+ 20(g_sSampCmp): 19(ptr) Variable UniformConstant
+ 22: TypeImage 6(float) 2D depth sampled format:Unknown
+ 23: TypeSampledImage 22
+ 25: TypeVector 6(float) 2
+ 26: TypeVector 6(float) 3
+ 27($Global): TypeStruct 6(float) 25(fvec2) 26(fvec3) 7(fvec4)
+ 28: TypePointer Uniform 27($Global)
+ 29: 28(ptr) Variable Uniform
+ 30: TypeInt 32 1
+ 31: 30(int) Constant 1
+ 32: TypePointer Uniform 25(fvec2)
+ 35: 6(float) Constant 1061158912
+ 36: TypeVector 30(int) 2
+ 37: 30(int) Constant 0
+ 38: 36(ivec2) ConstantComposite 31 37
+ 40: TypeVector 30(int) 4
+ 41: TypePointer Function 40(ivec4)
+ 43: TypeImage 30(int) 2D sampled format:Unknown
+ 44: TypePointer UniformConstant 43
+ 45(g_tTex2di4): 44(ptr) Variable UniformConstant
+ 48: TypeImage 30(int) 2D depth sampled format:Unknown
+ 49: TypeSampledImage 48
+ 53: 30(int) Constant 4294967295
+ 54: 36(ivec2) ConstantComposite 31 53
+ 56: TypeInt 32 0
+ 57: TypeVector 56(int) 4
+ 58: TypePointer Function 57(ivec4)
+ 60: TypeImage 56(int) 2D sampled format:Unknown
+ 61: TypePointer UniformConstant 60
+ 62(g_tTex2du4): 61(ptr) Variable UniformConstant
+ 65: TypeImage 56(int) 2D depth sampled format:Unknown
+ 66: TypeSampledImage 65
+ 70: 36(ivec2) ConstantComposite 31 31
+ 78: 56(int) Constant 4
+ 79: TypeArray 36(ivec2) 78
+ 80: 79 ConstantComposite 38 38 38 38
+ 88: 79 ConstantComposite 54 54 54 54
+ 96: 79 ConstantComposite 70 70 70 70
+ 98: TypePointer Function 8(PS_OUTPUT)
+ 100: 6(float) Constant 1065353216
+ 101: 7(fvec4) ConstantComposite 100 100 100 100
+ 103: TypePointer Function 6(float)
+ 110: TypePointer Output 7(fvec4)
+ 111(Color): 110(ptr) Variable Output
+ 114: TypePointer Output 6(float)
+ 115(Depth): 114(ptr) Variable Output
+ 118: TypeImage 6(float) 1D sampled format:Unknown
+ 119: TypePointer UniformConstant 118
+120(g_tTex1df4a): 119(ptr) Variable UniformConstant
+ 121(g_tTex1df4): 119(ptr) Variable UniformConstant
+ 122: TypeImage 30(int) 1D sampled format:Unknown
+ 123: TypePointer UniformConstant 122
+ 124(g_tTex1di4): 123(ptr) Variable UniformConstant
+ 125: TypeImage 56(int) 1D sampled format:Unknown
+ 126: TypePointer UniformConstant 125
+ 127(g_tTex1du4): 126(ptr) Variable UniformConstant
+ 128: TypeImage 6(float) 3D sampled format:Unknown
+ 129: TypePointer UniformConstant 128
+ 130(g_tTex3df4): 129(ptr) Variable UniformConstant
+ 131: TypeImage 30(int) 3D sampled format:Unknown
+ 132: TypePointer UniformConstant 131
+ 133(g_tTex3di4): 132(ptr) Variable UniformConstant
+ 134: TypeImage 56(int) 3D sampled format:Unknown
+ 135: TypePointer UniformConstant 134
+ 136(g_tTex3du4): 135(ptr) Variable UniformConstant
+ 137: TypeImage 6(float) Cube sampled format:Unknown
+ 138: TypePointer UniformConstant 137
+ 139(g_tTexcdf4): 138(ptr) Variable UniformConstant
+ 140: TypeImage 30(int) Cube sampled format:Unknown
+ 141: TypePointer UniformConstant 140
+ 142(g_tTexcdi4): 141(ptr) Variable UniformConstant
+ 143: TypeImage 56(int) Cube sampled format:Unknown
+ 144: TypePointer UniformConstant 143
+ 145(g_tTexcdu4): 144(ptr) Variable UniformConstant
+ 4(main): 2 Function None 3
+ 5: Label
+108(flattenTemp): 98(ptr) Variable Function
+ 109:8(PS_OUTPUT) FunctionCall 10(@main()
+ Store 108(flattenTemp) 109
+ 112: 12(ptr) AccessChain 108(flattenTemp) 37
+ 113: 7(fvec4) Load 112
+ Store 111(Color) 113
+ 116: 103(ptr) AccessChain 108(flattenTemp) 31
+ 117: 6(float) Load 116
+ Store 115(Depth) 117
+ Return
+ FunctionEnd
+ 10(@main():8(PS_OUTPUT) Function None 9
+ 11: Label
+ 13(txval001): 12(ptr) Variable Function
+ 42(txval011): 41(ptr) Variable Function
+ 59(txval021): 58(ptr) Variable Function
+ 72(txval004): 12(ptr) Variable Function
+ 82(txval014): 41(ptr) Variable Function
+ 90(txval024): 58(ptr) Variable Function
+ 99(psout): 98(ptr) Variable Function
+ 17: 14 Load 16(g_tTex2df4)
+ 21: 18 Load 20(g_sSampCmp)
+ 24: 23 SampledImage 17 21
+ 33: 32(ptr) AccessChain 29 31
+ 34: 25(fvec2) Load 33
+ 39: 7(fvec4) ImageDrefGather 24 34 35 ConstOffset 38
+ Store 13(txval001) 39
+ 46: 43 Load 45(g_tTex2di4)
+ 47: 18 Load 20(g_sSampCmp)
+ 50: 49 SampledImage 46 47
+ 51: 32(ptr) AccessChain 29 31
+ 52: 25(fvec2) Load 51
+ 55: 40(ivec4) ImageDrefGather 50 52 35 ConstOffset 54
+ Store 42(txval011) 55
+ 63: 60 Load 62(g_tTex2du4)
+ 64: 18 Load 20(g_sSampCmp)
+ 67: 66 SampledImage 63 64
+ 68: 32(ptr) AccessChain 29 31
+ 69: 25(fvec2) Load 68
+ 71: 57(ivec4) ImageDrefGather 67 69 35 ConstOffset 70
+ Store 59(txval021) 71
+ 73: 14 Load 16(g_tTex2df4)
+ 74: 18 Load 20(g_sSampCmp)
+ 75: 23 SampledImage 73 74
+ 76: 32(ptr) AccessChain 29 31
+ 77: 25(fvec2) Load 76
+ 81: 7(fvec4) ImageDrefGather 75 77 35 ConstOffsets 80
+ Store 72(txval004) 81
+ 83: 43 Load 45(g_tTex2di4)
+ 84: 18 Load 20(g_sSampCmp)
+ 85: 49 SampledImage 83 84
+ 86: 32(ptr) AccessChain 29 31
+ 87: 25(fvec2) Load 86
+ 89: 40(ivec4) ImageDrefGather 85 87 35 ConstOffsets 88
+ Store 82(txval014) 89
+ 91: 60 Load 62(g_tTex2du4)
+ 92: 18 Load 20(g_sSampCmp)
+ 93: 66 SampledImage 91 92
+ 94: 32(ptr) AccessChain 29 31
+ 95: 25(fvec2) Load 94
+ 97: 57(ivec4) ImageDrefGather 93 95 35 ConstOffsets 96
+ Store 90(txval024) 97
+ 102: 12(ptr) AccessChain 99(psout) 37
+ Store 102 101
+ 104: 103(ptr) AccessChain 99(psout) 31
+ Store 104 100
+ 105:8(PS_OUTPUT) Load 99(psout)
+ ReturnValue 105
+ FunctionEnd
uniform float3 c3;
uniform float4 c4;
-uniform int o1;
-uniform int2 o2;
-uniform int3 o3;
-uniform int4 o4;
+
+
+
+
PS_OUTPUT main()
{
// no 1D gathers
- float4 txval001 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2);
- int4 txval011 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2);
- uint4 txval021 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2);
+ float4 txval001 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0));
+ int4 txval011 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,-1));
+ uint4 txval021 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,1));
- float4 txval004 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- int4 txval014 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- uint4 txval024 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
+ float4 txval004 = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ int4 txval014 = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,-1), int2(1,-1), int2(1,-1), int2(1,-1));
+ uint4 txval024 = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,1), int2(1,1), int2(1,1), int2(1,1));
- // float4 txval00s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, status);
- // int4 txval01s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, status);
- // uint4 txval02s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, status);
-
- // float4 txval004s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // int4 txval014s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // uint4 txval024s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
-
- float4 txval101 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2);
- int4 txval111 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2);
- uint4 txval121 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2);
-
- float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- int4 txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- uint4 txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
-
- // float4 txval10s = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, status);
- // int4 txval11s = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, status);
- // uint4 txval12s = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, status);
-
- // float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // int4 txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // uint4 txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
-
- float4 txval201 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2);
- int4 txval211 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2);
- uint4 txval221 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2);
-
- float4 txval204 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- int4 txval214 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- uint4 txval224 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
-
- // float4 txval204s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // int4 txval214s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // uint4 txval224s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
-
- // float4 txval20s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, status);
- // int4 txval21s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, status);
- // uint4 txval22s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, o2, status);
-
- float4 txval301 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2);
- int4 txval311 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2);
- uint4 txval321 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2);
-
- float4 txval304 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- int4 txval314 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
- uint4 txval324 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2);
-
- // float4 txval304s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // int4 txval314s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
- // uint4 txval324s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, o2, o2, o2, status);
-
- // float4 txval30s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, status);
- // int4 txval31s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, status);
- // uint4 txval32s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, o2, status);
+ // float4 txval00s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // int4 txval01s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // uint4 txval02s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), status);
+
+ // float4 txval004s = g_tTex2df4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // int4 txval014s = g_tTex2di4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // uint4 txval024s = g_tTex2du4 . GatherCmpRed(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+
+ // GatherCmpGreen not implemented pending OpImageDrefGather component input
+ // float4 txval101 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0));
+ // int4 txval111 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0));
+ // uint4 txval121 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0));
+
+ // float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ // int4 txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ // uint4 txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+
+ // float4 txval10s = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // int4 txval11s = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // uint4 txval12s = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), status);
+
+ // float4 txval104 = g_tTex2df4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // int4 txval114 = g_tTex2di4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // uint4 txval124 = g_tTex2du4 . GatherCmpGreen(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+
+ // GatherCmpBlue not implemented pending OpImageDrefGather component input
+ // float4 txval201 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0));
+ // int4 txval211 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0));
+ // uint4 txval221 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0));
+
+ // float4 txval204 = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ // int4 txval214 = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ // uint4 txval224 = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+
+ // float4 txval204s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // int4 txval214s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // uint4 txval224s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+
+ // float4 txval20s = g_tTex2df4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // int4 txval21s = g_tTex2di4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // uint4 txval22s = g_tTex2du4 . GatherCmpBlue(g_sSampCmp, c2, 0.75, int2(1,0), status);
+
+ // GatherCmpAlpha not implemented pending OpImageDrefGather component input
+ // float4 txval301 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0));
+ // int4 txval311 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0));
+ // uint4 txval321 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0));
+
+ // float4 txval304 = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ // int4 txval314 = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+ // uint4 txval324 = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0));
+
+ // float4 txval304s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // int4 txval314s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+ // uint4 txval324s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), int2(1,0), int2(1,0), int2(1,0), status);
+
+ // float4 txval30s = g_tTex2df4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // int4 txval31s = g_tTex2di4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), status);
+ // uint4 txval32s = g_tTex2du4 . GatherCmpAlpha(g_sSampCmp, c2, 0.75, int2(1,0), status);
// no 3D gathers with offset
{"hlsl.gather.basic.dx10.vert", "main"},
{"hlsl.gather.offset.dx10.frag", "main"},
{"hlsl.gather.offsetarray.dx10.frag", "main"},
+ {"hlsl.gathercmpRGBA.offset.dx10.frag", "main"},
{"hlsl.gatherRGBA.array.dx10.frag", "main"},
{"hlsl.gatherRGBA.basic.dx10.frag", "main"},
{"hlsl.gatherRGBA.offset.dx10.frag", "main"},
// For now, we have nothing to map the component-wise comparison forms
// to, because neither GLSL nor SPIR-V has such an opcode. Issue an
// unimplemented error instead. Most of the machinery is here if that
- // should ever become available.
- if (cmpValues) {
+ // should ever become available. However, red can be passed through
+ // to OpImageDrefGather. G/B/A cannot, because that opcode does not
+ // accept a component.
+ if (cmpValues != 0 && op != EOpMethodGatherCmpRed) {
error(loc, "unimplemented: component-level gather compare", "", "");
return;
}
}
// Add comparison value if we have one
- if (argTex->getType().getSampler().isShadow())
+ if (argCmp != nullptr)
txgather->getSequence().push_back(argCmp);
// Add offset (either 1, or an array of 4) if we have one