diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out new file mode 100644 index 00000000..041af2d4 --- /dev/null +++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out @@ -0,0 +1,359 @@ +hlsl.gather.array.dx10.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:44 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:24 Function Parameters: +0:? Sequence +0:29 Sequence +0:29 move second child to first child (temp 4-component vector of float) +0:29 'txval20' (temp 4-component vector of float) +0:29 textureGather (global 4-component vector of float) +0:29 Construct combined texture-sampler (temp sampler2DArray) +0:29 'g_tTex2df4a' (uniform texture2DArray) +0:29 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:30 Sequence +0:30 move second child to first child (temp 4-component vector of int) +0:30 'txval21' (temp 4-component vector of int) +0:30 textureGather (global 4-component vector of int) +0:30 Construct combined texture-sampler (temp isampler2DArray) +0:30 'g_tTex2di4a' (uniform itexture2DArray) +0:30 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:31 Sequence +0:31 move second child to first child (temp 4-component vector of uint) +0:31 'txval22' (temp 4-component vector of uint) +0:31 textureGather (global 4-component vector of uint) +0:31 Construct combined texture-sampler (temp usampler2DArray) +0:31 'g_tTex2du4a' (uniform utexture2DArray) +0:31 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of float) +0:35 'txval40' (temp 4-component vector of float) +0:35 textureGather (global 4-component vector of float) +0:35 Construct combined texture-sampler (temp samplerCubeArray) +0:35 'g_tTexcdf4a' (uniform textureCubeArray) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child (temp 4-component vector of int) +0:36 'txval41' (temp 4-component vector of int) +0:36 textureGather (global 4-component vector of int) +0:36 Construct combined texture-sampler (temp isamplerCubeArray) +0:36 'g_tTexcdi4a' (uniform itextureCubeArray) +0:36 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:37 Sequence +0:37 move second child to first child (temp 4-component vector of uint) +0:37 'txval42' (temp 4-component vector of uint) +0:37 textureGather (global 4-component vector of uint) +0:37 Construct combined texture-sampler (temp usamplerCubeArray) +0:37 'g_tTexcdu4a' (uniform utextureCubeArray) +0:37 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:40 move second child to first child (temp float) +0:40 Depth: direct index for structure (temp float FragDepth) +0:40 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1DArray) +0:? 'g_tTex1df4' (uniform texture1DArray) +0:? 'g_tTex1di4a' (uniform itexture1DArray) +0:? 'g_tTex1du4a' (uniform utexture1DArray) +0:? 'g_tTex2df4a' (uniform texture2DArray) +0:? 'g_tTex2di4a' (uniform itexture2DArray) +0:? 'g_tTex2du4a' (uniform utexture2DArray) +0:? 'g_tTexcdf4a' (uniform textureCubeArray) +0:? 'g_tTexcdi4a' (uniform itextureCubeArray) +0:? 'g_tTexcdu4a' (uniform utextureCubeArray) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:44 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:24 Function Parameters: +0:? Sequence +0:29 Sequence +0:29 move second child to first child (temp 4-component vector of float) +0:29 'txval20' (temp 4-component vector of float) +0:29 textureGather (global 4-component vector of float) +0:29 Construct combined texture-sampler (temp sampler2DArray) +0:29 'g_tTex2df4a' (uniform texture2DArray) +0:29 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:30 Sequence +0:30 move second child to first child (temp 4-component vector of int) +0:30 'txval21' (temp 4-component vector of int) +0:30 textureGather (global 4-component vector of int) +0:30 Construct combined texture-sampler (temp isampler2DArray) +0:30 'g_tTex2di4a' (uniform itexture2DArray) +0:30 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.500000 +0:31 Sequence +0:31 move second child to first child (temp 4-component vector of uint) +0:31 'txval22' (temp 4-component vector of uint) +0:31 textureGather (global 4-component vector of uint) +0:31 Construct combined texture-sampler (temp usampler2DArray) +0:31 'g_tTex2du4a' (uniform utexture2DArray) +0:31 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of float) +0:35 'txval40' (temp 4-component vector of float) +0:35 textureGather (global 4-component vector of float) +0:35 Construct combined texture-sampler (temp samplerCubeArray) +0:35 'g_tTexcdf4a' (uniform textureCubeArray) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child (temp 4-component vector of int) +0:36 'txval41' (temp 4-component vector of int) +0:36 textureGather (global 4-component vector of int) +0:36 Construct combined texture-sampler (temp isamplerCubeArray) +0:36 'g_tTexcdi4a' (uniform itextureCubeArray) +0:36 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:37 Sequence +0:37 move second child to first child (temp 4-component vector of uint) +0:37 'txval42' (temp 4-component vector of uint) +0:37 textureGather (global 4-component vector of uint) +0:37 Construct combined texture-sampler (temp usamplerCubeArray) +0:37 'g_tTexcdu4a' (uniform utextureCubeArray) +0:37 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:? 1.000000 +0:40 move second child to first child (temp float) +0:40 Depth: direct index for structure (temp float FragDepth) +0:40 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 1.000000 +0:42 Branch: Return with expression +0:42 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1DArray) +0:? 'g_tTex1df4' (uniform texture1DArray) +0:? 'g_tTex1di4a' (uniform itexture1DArray) +0:? 'g_tTex1du4a' (uniform utexture1DArray) +0:? 'g_tTex2df4a' (uniform texture2DArray) +0:? 'g_tTex2di4a' (uniform itexture2DArray) +0:? 'g_tTex2du4a' (uniform utexture2DArray) +0:? 'g_tTexcdf4a' (uniform textureCubeArray) +0:? 'g_tTexcdi4a' (uniform itextureCubeArray) +0:? 'g_tTexcdu4a' (uniform utextureCubeArray) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 108 + + Capability Shader + Capability Sampled1D + Capability SampledCubeArray + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "main" + Name 9 "txval20" + Name 12 "g_tTex2df4a" + Name 16 "g_sSamp" + Name 30 "txval21" + Name 33 "g_tTex2di4a" + Name 45 "txval22" + Name 48 "g_tTex2du4a" + Name 57 "txval40" + Name 60 "g_tTexcdf4a" + Name 67 "txval41" + Name 70 "g_tTexcdi4a" + Name 77 "txval42" + Name 80 "g_tTexcdu4a" + Name 90 "PS_OUTPUT" + MemberName 90(PS_OUTPUT) 0 "Color" + MemberName 90(PS_OUTPUT) 1 "Depth" + Name 92 "psout" + Name 100 "g_tTex1df4a" + Name 101 "g_tTex1df4" + Name 104 "g_tTex1di4a" + Name 107 "g_tTex1du4a" + Decorate 12(g_tTex2df4a) DescriptorSet 0 + Decorate 16(g_sSamp) DescriptorSet 0 + Decorate 33(g_tTex2di4a) DescriptorSet 0 + Decorate 48(g_tTex2du4a) DescriptorSet 0 + Decorate 60(g_tTexcdf4a) DescriptorSet 0 + Decorate 70(g_tTexcdi4a) DescriptorSet 0 + Decorate 80(g_tTexcdu4a) DescriptorSet 0 + MemberDecorate 90(PS_OUTPUT) 1 BuiltIn FragDepth + Decorate 100(g_tTex1df4a) DescriptorSet 0 + Decorate 101(g_tTex1df4) DescriptorSet 0 + Decorate 104(g_tTex1di4a) DescriptorSet 0 + Decorate 107(g_tTex1du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D array sampled format:Unknown + 11: TypePointer UniformConstant 10 + 12(g_tTex2df4a): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(g_sSamp): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypeVector 6(float) 3 + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 6(float) Constant 1050253722 + 24: 20(fvec3) ConstantComposite 21 22 23 + 25: TypeInt 32 1 + 26: 25(int) Constant 0 + 28: TypeVector 25(int) 4 + 29: TypePointer Function 28(ivec4) + 31: TypeImage 25(int) 2D array sampled format:Unknown + 32: TypePointer UniformConstant 31 + 33(g_tTex2di4a): 32(ptr) Variable UniformConstant + 36: TypeSampledImage 31 + 38: 6(float) Constant 1053609165 + 39: 6(float) Constant 1056964608 + 40: 20(fvec3) ConstantComposite 23 38 39 + 42: TypeInt 32 0 + 43: TypeVector 42(int) 4 + 44: TypePointer Function 43(ivec4) + 46: TypeImage 42(int) 2D array sampled format:Unknown + 47: TypePointer UniformConstant 46 + 48(g_tTex2du4a): 47(ptr) Variable UniformConstant + 51: TypeSampledImage 46 + 53: 6(float) Constant 1058642330 + 54: 6(float) Constant 1060320051 + 55: 20(fvec3) ConstantComposite 39 53 54 + 58: TypeImage 6(float) Cube array sampled format:Unknown + 59: TypePointer UniformConstant 58 + 60(g_tTexcdf4a): 59(ptr) Variable UniformConstant + 63: TypeSampledImage 58 + 65: 7(fvec4) ConstantComposite 21 22 23 38 + 68: TypeImage 25(int) Cube array sampled format:Unknown + 69: TypePointer UniformConstant 68 + 70(g_tTexcdi4a): 69(ptr) Variable UniformConstant + 73: TypeSampledImage 68 + 75: 7(fvec4) ConstantComposite 38 39 53 54 + 78: TypeImage 42(int) Cube array sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTexcdu4a): 79(ptr) Variable UniformConstant + 83: TypeSampledImage 78 + 85: 6(float) Constant 1061997773 + 86: 6(float) Constant 1063675494 + 87: 6(float) Constant 1065353216 + 88: 7(fvec4) ConstantComposite 54 85 86 87 + 90(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 91: TypePointer Function 90(PS_OUTPUT) + 93: 25(int) Constant 1 + 94: TypePointer Function 6(float) + 98: TypeImage 6(float) 1D array sampled format:Unknown + 99: TypePointer UniformConstant 98 +100(g_tTex1df4a): 99(ptr) Variable UniformConstant + 101(g_tTex1df4): 99(ptr) Variable UniformConstant + 102: TypeImage 25(int) 1D array sampled format:Unknown + 103: TypePointer UniformConstant 102 +104(g_tTex1di4a): 103(ptr) Variable UniformConstant + 105: TypeImage 42(int) 1D array sampled format:Unknown + 106: TypePointer UniformConstant 105 +107(g_tTex1du4a): 106(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(txval20): 8(ptr) Variable Function + 30(txval21): 29(ptr) Variable Function + 45(txval22): 44(ptr) Variable Function + 57(txval40): 8(ptr) Variable Function + 67(txval41): 29(ptr) Variable Function + 77(txval42): 44(ptr) Variable Function + 92(psout): 91(ptr) Variable Function + 13: 10 Load 12(g_tTex2df4a) + 17: 14 Load 16(g_sSamp) + 19: 18 SampledImage 13 17 + 27: 7(fvec4) ImageGather 19 24 26 + Store 9(txval20) 27 + 34: 31 Load 33(g_tTex2di4a) + 35: 14 Load 16(g_sSamp) + 37: 36 SampledImage 34 35 + 41: 28(ivec4) ImageGather 37 40 26 + Store 30(txval21) 41 + 49: 46 Load 48(g_tTex2du4a) + 50: 14 Load 16(g_sSamp) + 52: 51 SampledImage 49 50 + 56: 43(ivec4) ImageGather 52 55 26 + Store 45(txval22) 56 + 61: 58 Load 60(g_tTexcdf4a) + 62: 14 Load 16(g_sSamp) + 64: 63 SampledImage 61 62 + 66: 7(fvec4) ImageGather 64 65 26 + Store 57(txval40) 66 + 71: 68 Load 70(g_tTexcdi4a) + 72: 14 Load 16(g_sSamp) + 74: 73 SampledImage 71 72 + 76: 28(ivec4) ImageGather 74 75 26 + Store 67(txval41) 76 + 81: 78 Load 80(g_tTexcdu4a) + 82: 14 Load 16(g_sSamp) + 84: 83 SampledImage 81 82 + 89: 43(ivec4) ImageGather 84 88 26 + Store 77(txval42) 89 + 95: 94(ptr) AccessChain 92(psout) 93 + Store 95 87 + 96:90(PS_OUTPUT) Load 92(psout) + ReturnValue 96 + FunctionEnd diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out new file mode 100644 index 00000000..1e51f292 --- /dev/null +++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out @@ -0,0 +1,373 @@ +hlsl.gather.basic.dx10.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:49 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:29 Function Parameters: +0:? Sequence +0:34 Sequence +0:34 move second child to first child (temp 4-component vector of float) +0:34 'txval20' (temp 4-component vector of float) +0:34 textureGather (global 4-component vector of float) +0:34 Construct combined texture-sampler (temp sampler2D) +0:34 'g_tTex2df4' (uniform texture2D) +0:34 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of int) +0:35 'txval21' (temp 4-component vector of int) +0:35 textureGather (global 4-component vector of int) +0:35 Construct combined texture-sampler (temp isampler2D) +0:35 'g_tTex2di4' (uniform itexture2D) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child (temp 4-component vector of uint) +0:36 'txval22' (temp 4-component vector of uint) +0:36 textureGather (global 4-component vector of uint) +0:36 Construct combined texture-sampler (temp usampler2D) +0:36 'g_tTex2du4' (uniform utexture2D) +0:36 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:40 Sequence +0:40 move second child to first child (temp 4-component vector of float) +0:40 'txval40' (temp 4-component vector of float) +0:40 textureGather (global 4-component vector of float) +0:40 Construct combined texture-sampler (temp samplerCube) +0:40 'g_tTexcdf4' (uniform textureCube) +0:40 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:41 Sequence +0:41 move second child to first child (temp 4-component vector of int) +0:41 'txval41' (temp 4-component vector of int) +0:41 textureGather (global 4-component vector of int) +0:41 Construct combined texture-sampler (temp isamplerCube) +0:41 'g_tTexcdi4' (uniform itextureCube) +0:41 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:42 Sequence +0:42 move second child to first child (temp 4-component vector of uint) +0:42 'txval42' (temp 4-component vector of uint) +0:42 textureGather (global 4-component vector of uint) +0:42 Construct combined texture-sampler (temp usamplerCube) +0:42 'g_tTexcdu4' (uniform utextureCube) +0:42 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:45 move second child to first child (temp float) +0:45 Depth: direct index for structure (temp float FragDepth) +0:45 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 1.000000 +0:47 Branch: Return with expression +0:47 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_sSamp2d' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1D) +0:? 'g_tTex1df4' (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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:49 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:29 Function Parameters: +0:? Sequence +0:34 Sequence +0:34 move second child to first child (temp 4-component vector of float) +0:34 'txval20' (temp 4-component vector of float) +0:34 textureGather (global 4-component vector of float) +0:34 Construct combined texture-sampler (temp sampler2D) +0:34 'g_tTex2df4' (uniform texture2D) +0:34 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of int) +0:35 'txval21' (temp 4-component vector of int) +0:35 textureGather (global 4-component vector of int) +0:35 Construct combined texture-sampler (temp isampler2D) +0:35 'g_tTex2di4' (uniform itexture2D) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:36 Sequence +0:36 move second child to first child (temp 4-component vector of uint) +0:36 'txval22' (temp 4-component vector of uint) +0:36 textureGather (global 4-component vector of uint) +0:36 Construct combined texture-sampler (temp usampler2D) +0:36 'g_tTex2du4' (uniform utexture2D) +0:36 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:40 Sequence +0:40 move second child to first child (temp 4-component vector of float) +0:40 'txval40' (temp 4-component vector of float) +0:40 textureGather (global 4-component vector of float) +0:40 Construct combined texture-sampler (temp samplerCube) +0:40 'g_tTexcdf4' (uniform textureCube) +0:40 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:41 Sequence +0:41 move second child to first child (temp 4-component vector of int) +0:41 'txval41' (temp 4-component vector of int) +0:41 textureGather (global 4-component vector of int) +0:41 Construct combined texture-sampler (temp isamplerCube) +0:41 'g_tTexcdi4' (uniform itextureCube) +0:41 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:42 Sequence +0:42 move second child to first child (temp 4-component vector of uint) +0:42 'txval42' (temp 4-component vector of uint) +0:42 textureGather (global 4-component vector of uint) +0:42 Construct combined texture-sampler (temp usamplerCube) +0:42 'g_tTexcdu4' (uniform utextureCube) +0:42 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:45 move second child to first child (temp float) +0:45 Depth: direct index for structure (temp float FragDepth) +0:45 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:45 Constant: +0:45 1 (const int) +0:45 Constant: +0:45 1.000000 +0:47 Branch: Return with expression +0:47 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_sSamp2d' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1D) +0:? 'g_tTex1df4' (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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 119 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "main" + Name 9 "txval20" + Name 12 "g_tTex2df4" + Name 16 "g_sSamp" + Name 29 "txval21" + Name 32 "g_tTex2di4" + Name 44 "txval22" + Name 47 "g_tTex2du4" + Name 56 "txval40" + Name 59 "g_tTexcdf4" + Name 67 "txval41" + Name 70 "g_tTexcdi4" + Name 77 "txval42" + Name 80 "g_tTexcdu4" + Name 90 "PS_OUTPUT" + MemberName 90(PS_OUTPUT) 0 "Color" + MemberName 90(PS_OUTPUT) 1 "Depth" + Name 92 "psout" + Name 99 "g_sSamp2d" + Name 102 "g_tTex1df4a" + Name 103 "g_tTex1df4" + Name 106 "g_tTex1di4" + Name 109 "g_tTex1du4" + Name 112 "g_tTex3df4" + Name 115 "g_tTex3di4" + Name 118 "g_tTex3du4" + Decorate 12(g_tTex2df4) DescriptorSet 0 + Decorate 16(g_sSamp) DescriptorSet 0 + Decorate 32(g_tTex2di4) DescriptorSet 0 + Decorate 47(g_tTex2du4) DescriptorSet 0 + Decorate 59(g_tTexcdf4) DescriptorSet 0 + Decorate 70(g_tTexcdi4) DescriptorSet 0 + Decorate 80(g_tTexcdu4) DescriptorSet 0 + MemberDecorate 90(PS_OUTPUT) 1 BuiltIn FragDepth + Decorate 99(g_sSamp2d) DescriptorSet 0 + Decorate 102(g_tTex1df4a) DescriptorSet 0 + Decorate 103(g_tTex1df4) DescriptorSet 0 + Decorate 106(g_tTex1di4) DescriptorSet 0 + Decorate 109(g_tTex1du4) DescriptorSet 0 + Decorate 112(g_tTex3df4) DescriptorSet 0 + Decorate 115(g_tTex3di4) DescriptorSet 0 + Decorate 118(g_tTex3du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypePointer UniformConstant 10 + 12(g_tTex2df4): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(g_sSamp): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypeVector 6(float) 2 + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 20(fvec2) ConstantComposite 21 22 + 24: TypeInt 32 1 + 25: 24(int) Constant 0 + 27: TypeVector 24(int) 4 + 28: TypePointer Function 27(ivec4) + 30: TypeImage 24(int) 2D sampled format:Unknown + 31: TypePointer UniformConstant 30 + 32(g_tTex2di4): 31(ptr) Variable UniformConstant + 35: TypeSampledImage 30 + 37: 6(float) Constant 1050253722 + 38: 6(float) Constant 1053609165 + 39: 20(fvec2) ConstantComposite 37 38 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 4 + 43: TypePointer Function 42(ivec4) + 45: TypeImage 41(int) 2D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex2du4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 52: 6(float) Constant 1056964608 + 53: 6(float) Constant 1058642330 + 54: 20(fvec2) ConstantComposite 52 53 + 57: TypeImage 6(float) Cube sampled format:Unknown + 58: TypePointer UniformConstant 57 + 59(g_tTexcdf4): 58(ptr) Variable UniformConstant + 62: TypeSampledImage 57 + 64: TypeVector 6(float) 3 + 65: 64(fvec3) ConstantComposite 21 22 37 + 68: TypeImage 24(int) Cube sampled format:Unknown + 69: TypePointer UniformConstant 68 + 70(g_tTexcdi4): 69(ptr) Variable UniformConstant + 73: TypeSampledImage 68 + 75: 64(fvec3) ConstantComposite 38 52 53 + 78: TypeImage 41(int) Cube sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTexcdu4): 79(ptr) Variable UniformConstant + 83: TypeSampledImage 78 + 85: 6(float) Constant 1060320051 + 86: 6(float) Constant 1061997773 + 87: 6(float) Constant 1063675494 + 88: 64(fvec3) ConstantComposite 85 86 87 + 90(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 91: TypePointer Function 90(PS_OUTPUT) + 93: 24(int) Constant 1 + 94: 6(float) Constant 1065353216 + 95: TypePointer Function 6(float) + 99(g_sSamp2d): 15(ptr) Variable UniformConstant + 100: TypeImage 6(float) 1D sampled format:Unknown + 101: TypePointer UniformConstant 100 +102(g_tTex1df4a): 101(ptr) Variable UniformConstant + 103(g_tTex1df4): 101(ptr) Variable UniformConstant + 104: TypeImage 24(int) 1D sampled format:Unknown + 105: TypePointer UniformConstant 104 + 106(g_tTex1di4): 105(ptr) Variable UniformConstant + 107: TypeImage 41(int) 1D sampled format:Unknown + 108: TypePointer UniformConstant 107 + 109(g_tTex1du4): 108(ptr) Variable UniformConstant + 110: TypeImage 6(float) 3D sampled format:Unknown + 111: TypePointer UniformConstant 110 + 112(g_tTex3df4): 111(ptr) Variable UniformConstant + 113: TypeImage 24(int) 3D sampled format:Unknown + 114: TypePointer UniformConstant 113 + 115(g_tTex3di4): 114(ptr) Variable UniformConstant + 116: TypeImage 41(int) 3D sampled format:Unknown + 117: TypePointer UniformConstant 116 + 118(g_tTex3du4): 117(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(txval20): 8(ptr) Variable Function + 29(txval21): 28(ptr) Variable Function + 44(txval22): 43(ptr) Variable Function + 56(txval40): 8(ptr) Variable Function + 67(txval41): 28(ptr) Variable Function + 77(txval42): 43(ptr) Variable Function + 92(psout): 91(ptr) Variable Function + 13: 10 Load 12(g_tTex2df4) + 17: 14 Load 16(g_sSamp) + 19: 18 SampledImage 13 17 + 26: 7(fvec4) ImageGather 19 23 25 + Store 9(txval20) 26 + 33: 30 Load 32(g_tTex2di4) + 34: 14 Load 16(g_sSamp) + 36: 35 SampledImage 33 34 + 40: 27(ivec4) ImageGather 36 39 25 + Store 29(txval21) 40 + 48: 45 Load 47(g_tTex2du4) + 49: 14 Load 16(g_sSamp) + 51: 50 SampledImage 48 49 + 55: 42(ivec4) ImageGather 51 54 25 + Store 44(txval22) 55 + 60: 57 Load 59(g_tTexcdf4) + 61: 14 Load 16(g_sSamp) + 63: 62 SampledImage 60 61 + 66: 7(fvec4) ImageGather 63 65 25 + Store 56(txval40) 66 + 71: 68 Load 70(g_tTexcdi4) + 72: 14 Load 16(g_sSamp) + 74: 73 SampledImage 71 72 + 76: 27(ivec4) ImageGather 74 75 25 + Store 67(txval41) 76 + 81: 78 Load 80(g_tTexcdu4) + 82: 14 Load 16(g_sSamp) + 84: 83 SampledImage 81 82 + 89: 42(ivec4) ImageGather 84 88 25 + Store 77(txval42) 89 + 96: 95(ptr) AccessChain 92(psout) 93 + Store 96 94 + 97:90(PS_OUTPUT) Load 92(psout) + ReturnValue 97 + FunctionEnd diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out new file mode 100644 index 00000000..9cc0bfd1 --- /dev/null +++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out @@ -0,0 +1,374 @@ +hlsl.gather.basic.dx10.vert +Shader version: 450 +0:? Sequence +0:47 Function Definition: main( (global structure{temp 4-component vector of float FragCoord Pos}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child (temp 4-component vector of float) +0:33 'txval20' (temp 4-component vector of float) +0:33 textureGather (global 4-component vector of float) +0:33 Construct combined texture-sampler (temp sampler2D) +0:33 'g_tTex2df4' (uniform texture2D) +0:33 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:34 Sequence +0:34 move second child to first child (temp 4-component vector of int) +0:34 'txval21' (temp 4-component vector of int) +0:34 textureGather (global 4-component vector of int) +0:34 Construct combined texture-sampler (temp isampler2D) +0:34 'g_tTex2di4' (uniform itexture2D) +0:34 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of uint) +0:35 'txval22' (temp 4-component vector of uint) +0:35 textureGather (global 4-component vector of uint) +0:35 Construct combined texture-sampler (temp usampler2D) +0:35 'g_tTex2du4' (uniform utexture2D) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:39 Sequence +0:39 move second child to first child (temp 4-component vector of float) +0:39 'txval40' (temp 4-component vector of float) +0:39 textureGather (global 4-component vector of float) +0:39 Construct combined texture-sampler (temp samplerCube) +0:39 'g_tTexcdf4' (uniform textureCube) +0:39 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:40 Sequence +0:40 move second child to first child (temp 4-component vector of int) +0:40 'txval41' (temp 4-component vector of int) +0:40 textureGather (global 4-component vector of int) +0:40 Construct combined texture-sampler (temp isamplerCube) +0:40 'g_tTexcdi4' (uniform itextureCube) +0:40 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:41 Sequence +0:41 move second child to first child (temp 4-component vector of uint) +0:41 'txval42' (temp 4-component vector of uint) +0:41 textureGather (global 4-component vector of uint) +0:41 Construct combined texture-sampler (temp usamplerCube) +0:41 'g_tTexcdu4' (uniform utextureCube) +0:41 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:43 move second child to first child (temp 4-component vector of float) +0:43 Pos: direct index for structure (temp 4-component vector of float FragCoord) +0:43 'vsout' (temp structure{temp 4-component vector of float FragCoord Pos}) +0:43 Constant: +0:43 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:45 Branch: Return with expression +0:45 'vsout' (temp structure{temp 4-component vector of float FragCoord Pos}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_sSamp2d' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1D) +0:? 'g_tTex1df4' (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) + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:47 Function Definition: main( (global structure{temp 4-component vector of float FragCoord Pos}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child (temp 4-component vector of float) +0:33 'txval20' (temp 4-component vector of float) +0:33 textureGather (global 4-component vector of float) +0:33 Construct combined texture-sampler (temp sampler2D) +0:33 'g_tTex2df4' (uniform texture2D) +0:33 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:34 Sequence +0:34 move second child to first child (temp 4-component vector of int) +0:34 'txval21' (temp 4-component vector of int) +0:34 textureGather (global 4-component vector of int) +0:34 Construct combined texture-sampler (temp isampler2D) +0:34 'g_tTex2di4' (uniform itexture2D) +0:34 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of uint) +0:35 'txval22' (temp 4-component vector of uint) +0:35 textureGather (global 4-component vector of uint) +0:35 Construct combined texture-sampler (temp usampler2D) +0:35 'g_tTex2du4' (uniform utexture2D) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:39 Sequence +0:39 move second child to first child (temp 4-component vector of float) +0:39 'txval40' (temp 4-component vector of float) +0:39 textureGather (global 4-component vector of float) +0:39 Construct combined texture-sampler (temp samplerCube) +0:39 'g_tTexcdf4' (uniform textureCube) +0:39 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:40 Sequence +0:40 move second child to first child (temp 4-component vector of int) +0:40 'txval41' (temp 4-component vector of int) +0:40 textureGather (global 4-component vector of int) +0:40 Construct combined texture-sampler (temp isamplerCube) +0:40 'g_tTexcdi4' (uniform itextureCube) +0:40 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.400000 +0:? 0.500000 +0:? 0.600000 +0:41 Sequence +0:41 move second child to first child (temp 4-component vector of uint) +0:41 'txval42' (temp 4-component vector of uint) +0:41 textureGather (global 4-component vector of uint) +0:41 Construct combined texture-sampler (temp usamplerCube) +0:41 'g_tTexcdu4' (uniform utextureCube) +0:41 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.700000 +0:? 0.800000 +0:? 0.900000 +0:43 move second child to first child (temp 4-component vector of float) +0:43 Pos: direct index for structure (temp 4-component vector of float FragCoord) +0:43 'vsout' (temp structure{temp 4-component vector of float FragCoord Pos}) +0:43 Constant: +0:43 0 (const int) +0:? Constant: +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:45 Branch: Return with expression +0:45 'vsout' (temp structure{temp 4-component vector of float FragCoord Pos}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_sSamp2d' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1D) +0:? 'g_tTex1df4' (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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 118 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source HLSL 450 + Name 4 "main" + Name 9 "txval20" + Name 12 "g_tTex2df4" + Name 16 "g_sSamp" + Name 29 "txval21" + Name 32 "g_tTex2di4" + Name 44 "txval22" + Name 47 "g_tTex2du4" + Name 56 "txval40" + Name 59 "g_tTexcdf4" + Name 67 "txval41" + Name 70 "g_tTexcdi4" + Name 77 "txval42" + Name 80 "g_tTexcdu4" + Name 90 "VS_OUTPUT" + MemberName 90(VS_OUTPUT) 0 "Pos" + Name 92 "vsout" + Name 98 "g_sSamp2d" + Name 101 "g_tTex1df4a" + Name 102 "g_tTex1df4" + Name 105 "g_tTex1di4" + Name 108 "g_tTex1du4" + Name 111 "g_tTex3df4" + Name 114 "g_tTex3di4" + Name 117 "g_tTex3du4" + Decorate 12(g_tTex2df4) DescriptorSet 0 + Decorate 16(g_sSamp) DescriptorSet 0 + Decorate 32(g_tTex2di4) DescriptorSet 0 + Decorate 47(g_tTex2du4) DescriptorSet 0 + Decorate 59(g_tTexcdf4) DescriptorSet 0 + Decorate 70(g_tTexcdi4) DescriptorSet 0 + Decorate 80(g_tTexcdu4) DescriptorSet 0 + MemberDecorate 90(VS_OUTPUT) 0 BuiltIn FragCoord + Decorate 98(g_sSamp2d) DescriptorSet 0 + Decorate 101(g_tTex1df4a) DescriptorSet 0 + Decorate 102(g_tTex1df4) DescriptorSet 0 + Decorate 105(g_tTex1di4) DescriptorSet 0 + Decorate 108(g_tTex1du4) DescriptorSet 0 + Decorate 111(g_tTex3df4) DescriptorSet 0 + Decorate 114(g_tTex3di4) DescriptorSet 0 + Decorate 117(g_tTex3du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypePointer UniformConstant 10 + 12(g_tTex2df4): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(g_sSamp): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypeVector 6(float) 2 + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 20(fvec2) ConstantComposite 21 22 + 24: TypeInt 32 1 + 25: 24(int) Constant 0 + 27: TypeVector 24(int) 4 + 28: TypePointer Function 27(ivec4) + 30: TypeImage 24(int) 2D sampled format:Unknown + 31: TypePointer UniformConstant 30 + 32(g_tTex2di4): 31(ptr) Variable UniformConstant + 35: TypeSampledImage 30 + 37: 6(float) Constant 1050253722 + 38: 6(float) Constant 1053609165 + 39: 20(fvec2) ConstantComposite 37 38 + 41: TypeInt 32 0 + 42: TypeVector 41(int) 4 + 43: TypePointer Function 42(ivec4) + 45: TypeImage 41(int) 2D sampled format:Unknown + 46: TypePointer UniformConstant 45 + 47(g_tTex2du4): 46(ptr) Variable UniformConstant + 50: TypeSampledImage 45 + 52: 6(float) Constant 1056964608 + 53: 6(float) Constant 1058642330 + 54: 20(fvec2) ConstantComposite 52 53 + 57: TypeImage 6(float) Cube sampled format:Unknown + 58: TypePointer UniformConstant 57 + 59(g_tTexcdf4): 58(ptr) Variable UniformConstant + 62: TypeSampledImage 57 + 64: TypeVector 6(float) 3 + 65: 64(fvec3) ConstantComposite 21 22 37 + 68: TypeImage 24(int) Cube sampled format:Unknown + 69: TypePointer UniformConstant 68 + 70(g_tTexcdi4): 69(ptr) Variable UniformConstant + 73: TypeSampledImage 68 + 75: 64(fvec3) ConstantComposite 38 52 53 + 78: TypeImage 41(int) Cube sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTexcdu4): 79(ptr) Variable UniformConstant + 83: TypeSampledImage 78 + 85: 6(float) Constant 1060320051 + 86: 6(float) Constant 1061997773 + 87: 6(float) Constant 1063675494 + 88: 64(fvec3) ConstantComposite 85 86 87 + 90(VS_OUTPUT): TypeStruct 7(fvec4) + 91: TypePointer Function 90(VS_OUTPUT) + 93: 6(float) Constant 0 + 94: 7(fvec4) ConstantComposite 93 93 93 93 + 98(g_sSamp2d): 15(ptr) Variable UniformConstant + 99: TypeImage 6(float) 1D sampled format:Unknown + 100: TypePointer UniformConstant 99 +101(g_tTex1df4a): 100(ptr) Variable UniformConstant + 102(g_tTex1df4): 100(ptr) Variable UniformConstant + 103: TypeImage 24(int) 1D sampled format:Unknown + 104: TypePointer UniformConstant 103 + 105(g_tTex1di4): 104(ptr) Variable UniformConstant + 106: TypeImage 41(int) 1D sampled format:Unknown + 107: TypePointer UniformConstant 106 + 108(g_tTex1du4): 107(ptr) Variable UniformConstant + 109: TypeImage 6(float) 3D sampled format:Unknown + 110: TypePointer UniformConstant 109 + 111(g_tTex3df4): 110(ptr) Variable UniformConstant + 112: TypeImage 24(int) 3D sampled format:Unknown + 113: TypePointer UniformConstant 112 + 114(g_tTex3di4): 113(ptr) Variable UniformConstant + 115: TypeImage 41(int) 3D sampled format:Unknown + 116: TypePointer UniformConstant 115 + 117(g_tTex3du4): 116(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(txval20): 8(ptr) Variable Function + 29(txval21): 28(ptr) Variable Function + 44(txval22): 43(ptr) Variable Function + 56(txval40): 8(ptr) Variable Function + 67(txval41): 28(ptr) Variable Function + 77(txval42): 43(ptr) Variable Function + 92(vsout): 91(ptr) Variable Function + 13: 10 Load 12(g_tTex2df4) + 17: 14 Load 16(g_sSamp) + 19: 18 SampledImage 13 17 + 26: 7(fvec4) ImageGather 19 23 25 + Store 9(txval20) 26 + 33: 30 Load 32(g_tTex2di4) + 34: 14 Load 16(g_sSamp) + 36: 35 SampledImage 33 34 + 40: 27(ivec4) ImageGather 36 39 25 + Store 29(txval21) 40 + 48: 45 Load 47(g_tTex2du4) + 49: 14 Load 16(g_sSamp) + 51: 50 SampledImage 48 49 + 55: 42(ivec4) ImageGather 51 54 25 + Store 44(txval22) 55 + 60: 57 Load 59(g_tTexcdf4) + 61: 14 Load 16(g_sSamp) + 63: 62 SampledImage 60 61 + 66: 7(fvec4) ImageGather 63 65 25 + Store 56(txval40) 66 + 71: 68 Load 70(g_tTexcdi4) + 72: 14 Load 16(g_sSamp) + 74: 73 SampledImage 71 72 + 76: 27(ivec4) ImageGather 74 75 25 + Store 67(txval41) 76 + 81: 78 Load 80(g_tTexcdu4) + 82: 14 Load 16(g_sSamp) + 84: 83 SampledImage 81 82 + 89: 42(ivec4) ImageGather 84 88 25 + Store 77(txval42) 89 + 95: 8(ptr) AccessChain 92(vsout) 25 + Store 95 94 + 96:90(VS_OUTPUT) Load 92(vsout) + ReturnValue 96 + FunctionEnd diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out new file mode 100644 index 00000000..d818d45b --- /dev/null +++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out @@ -0,0 +1,294 @@ +hlsl.gather.offset.dx10.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:45 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child (temp 4-component vector of float) +0:33 'txval20' (temp 4-component vector of float) +0:33 textureGatherOffset (global 4-component vector of float) +0:33 Construct combined texture-sampler (temp sampler2D) +0:33 'g_tTex2df4' (uniform texture2D) +0:33 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:34 Sequence +0:34 move second child to first child (temp 4-component vector of int) +0:34 'txval21' (temp 4-component vector of int) +0:34 textureGatherOffset (global 4-component vector of int) +0:34 Construct combined texture-sampler (temp isampler2D) +0:34 'g_tTex2di4' (uniform itexture2D) +0:34 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of uint) +0:35 'txval22' (temp 4-component vector of uint) +0:35 textureGatherOffset (global 4-component vector of uint) +0:35 Construct combined texture-sampler (temp usampler2D) +0:35 'g_tTex2du4' (uniform utexture2D) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:41 move second child to first child (temp float) +0:41 Depth: direct index for structure (temp float FragDepth) +0:41 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1D) +0:? 'g_tTex1df4' (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) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:45 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:28 Function Parameters: +0:? Sequence +0:33 Sequence +0:33 move second child to first child (temp 4-component vector of float) +0:33 'txval20' (temp 4-component vector of float) +0:33 textureGatherOffset (global 4-component vector of float) +0:33 Construct combined texture-sampler (temp sampler2D) +0:33 'g_tTex2df4' (uniform texture2D) +0:33 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:34 Sequence +0:34 move second child to first child (temp 4-component vector of int) +0:34 'txval21' (temp 4-component vector of int) +0:34 textureGatherOffset (global 4-component vector of int) +0:34 Construct combined texture-sampler (temp isampler2D) +0:34 'g_tTex2di4' (uniform itexture2D) +0:34 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:35 Sequence +0:35 move second child to first child (temp 4-component vector of uint) +0:35 'txval22' (temp 4-component vector of uint) +0:35 textureGatherOffset (global 4-component vector of uint) +0:35 Construct combined texture-sampler (temp usampler2D) +0:35 'g_tTex2du4' (uniform utexture2D) +0:35 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:41 move second child to first child (temp float) +0:41 Depth: direct index for structure (temp float FragDepth) +0:41 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:41 Constant: +0:41 1 (const int) +0:41 Constant: +0:41 1.000000 +0:43 Branch: Return with expression +0:43 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1D) +0:? 'g_tTex1df4' (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) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 98 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "main" + Name 9 "txval20" + Name 12 "g_tTex2df4" + Name 16 "g_sSamp" + Name 32 "txval21" + Name 35 "g_tTex2di4" + Name 48 "txval22" + Name 51 "g_tTex2du4" + Name 62 "PS_OUTPUT" + MemberName 62(PS_OUTPUT) 0 "Color" + MemberName 62(PS_OUTPUT) 1 "Depth" + Name 64 "psout" + Name 72 "g_tTex1df4a" + Name 73 "g_tTex1df4" + Name 76 "g_tTex1di4" + Name 79 "g_tTex1du4" + Name 82 "g_tTex3df4" + Name 85 "g_tTex3di4" + Name 88 "g_tTex3du4" + Name 91 "g_tTexcdf4" + Name 94 "g_tTexcdi4" + Name 97 "g_tTexcdu4" + Decorate 12(g_tTex2df4) DescriptorSet 0 + Decorate 16(g_sSamp) DescriptorSet 0 + Decorate 35(g_tTex2di4) DescriptorSet 0 + Decorate 51(g_tTex2du4) DescriptorSet 0 + MemberDecorate 62(PS_OUTPUT) 1 BuiltIn FragDepth + Decorate 72(g_tTex1df4a) DescriptorSet 0 + Decorate 73(g_tTex1df4) DescriptorSet 0 + Decorate 76(g_tTex1di4) DescriptorSet 0 + Decorate 79(g_tTex1du4) DescriptorSet 0 + Decorate 82(g_tTex3df4) DescriptorSet 0 + Decorate 85(g_tTex3di4) DescriptorSet 0 + Decorate 88(g_tTex3du4) DescriptorSet 0 + Decorate 91(g_tTexcdf4) DescriptorSet 0 + Decorate 94(g_tTexcdi4) DescriptorSet 0 + Decorate 97(g_tTexcdu4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypePointer UniformConstant 10 + 12(g_tTex2df4): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(g_sSamp): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypeVector 6(float) 2 + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 20(fvec2) ConstantComposite 21 22 + 24: TypeInt 32 1 + 25: TypeVector 24(int) 2 + 26: 24(int) Constant 1 + 27: 24(int) Constant 0 + 28: 25(ivec2) ConstantComposite 26 27 + 30: TypeVector 24(int) 4 + 31: TypePointer Function 30(ivec4) + 33: TypeImage 24(int) 2D sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex2di4): 34(ptr) Variable UniformConstant + 38: TypeSampledImage 33 + 40: 6(float) Constant 1050253722 + 41: 6(float) Constant 1053609165 + 42: 20(fvec2) ConstantComposite 40 41 + 43: 25(ivec2) ConstantComposite 26 26 + 45: TypeInt 32 0 + 46: TypeVector 45(int) 4 + 47: TypePointer Function 46(ivec4) + 49: TypeImage 45(int) 2D sampled format:Unknown + 50: TypePointer UniformConstant 49 + 51(g_tTex2du4): 50(ptr) Variable UniformConstant + 54: TypeSampledImage 49 + 56: 6(float) Constant 1056964608 + 57: 6(float) Constant 1058642330 + 58: 20(fvec2) ConstantComposite 56 57 + 59: 24(int) Constant 4294967295 + 60: 25(ivec2) ConstantComposite 26 59 + 62(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 63: TypePointer Function 62(PS_OUTPUT) + 65: 6(float) Constant 1065353216 + 66: TypePointer Function 6(float) + 70: TypeImage 6(float) 1D sampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(g_tTex1df4a): 71(ptr) Variable UniformConstant + 73(g_tTex1df4): 71(ptr) Variable UniformConstant + 74: TypeImage 24(int) 1D sampled format:Unknown + 75: TypePointer UniformConstant 74 + 76(g_tTex1di4): 75(ptr) Variable UniformConstant + 77: TypeImage 45(int) 1D sampled format:Unknown + 78: TypePointer UniformConstant 77 + 79(g_tTex1du4): 78(ptr) Variable UniformConstant + 80: TypeImage 6(float) 3D sampled format:Unknown + 81: TypePointer UniformConstant 80 + 82(g_tTex3df4): 81(ptr) Variable UniformConstant + 83: TypeImage 24(int) 3D sampled format:Unknown + 84: TypePointer UniformConstant 83 + 85(g_tTex3di4): 84(ptr) Variable UniformConstant + 86: TypeImage 45(int) 3D sampled format:Unknown + 87: TypePointer UniformConstant 86 + 88(g_tTex3du4): 87(ptr) Variable UniformConstant + 89: TypeImage 6(float) Cube sampled format:Unknown + 90: TypePointer UniformConstant 89 + 91(g_tTexcdf4): 90(ptr) Variable UniformConstant + 92: TypeImage 24(int) Cube sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94(g_tTexcdi4): 93(ptr) Variable UniformConstant + 95: TypeImage 45(int) Cube sampled format:Unknown + 96: TypePointer UniformConstant 95 + 97(g_tTexcdu4): 96(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(txval20): 8(ptr) Variable Function + 32(txval21): 31(ptr) Variable Function + 48(txval22): 47(ptr) Variable Function + 64(psout): 63(ptr) Variable Function + 13: 10 Load 12(g_tTex2df4) + 17: 14 Load 16(g_sSamp) + 19: 18 SampledImage 13 17 + 29: 7(fvec4) ImageGather 19 23 27 ConstOffset 28 + Store 9(txval20) 29 + 36: 33 Load 35(g_tTex2di4) + 37: 14 Load 16(g_sSamp) + 39: 38 SampledImage 36 37 + 44: 30(ivec4) ImageGather 39 42 27 ConstOffset 43 + Store 32(txval21) 44 + 52: 49 Load 51(g_tTex2du4) + 53: 14 Load 16(g_sSamp) + 55: 54 SampledImage 52 53 + 61: 46(ivec4) ImageGather 55 58 27 ConstOffset 60 + Store 48(txval22) 61 + 67: 66(ptr) AccessChain 64(psout) 26 + Store 67 65 + 68:62(PS_OUTPUT) Load 64(psout) + ReturnValue 68 + FunctionEnd diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out new file mode 100644 index 00000000..8d00a592 --- /dev/null +++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out @@ -0,0 +1,259 @@ +hlsl.gather.offsetarray.dx10.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:37 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:20 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child (temp 4-component vector of float) +0:25 'txval20' (temp 4-component vector of float) +0:25 textureGatherOffset (global 4-component vector of float) +0:25 Construct combined texture-sampler (temp sampler2DArray) +0:25 'g_tTex2df4' (uniform texture2DArray) +0:25 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:26 Sequence +0:26 move second child to first child (temp 4-component vector of int) +0:26 'txval21' (temp 4-component vector of int) +0:26 textureGatherOffset (global 4-component vector of int) +0:26 Construct combined texture-sampler (temp isampler2DArray) +0:26 'g_tTex2di4' (uniform itexture2DArray) +0:26 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:27 Sequence +0:27 move second child to first child (temp 4-component vector of uint) +0:27 'txval22' (temp 4-component vector of uint) +0:27 textureGatherOffset (global 4-component vector of uint) +0:27 Construct combined texture-sampler (temp usampler2DArray) +0:27 'g_tTex2du4' (uniform utexture2DArray) +0:27 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:33 move second child to first child (temp float) +0:33 Depth: direct index for structure (temp float FragDepth) +0:33 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1.000000 +0:35 Branch: Return with expression +0:35 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1DArray) +0:? 'g_tTex1df4' (uniform texture1DArray) +0:? 'g_tTex1di4' (uniform itexture1DArray) +0:? 'g_tTex1du4' (uniform utexture1DArray) +0:? 'g_tTex2df4' (uniform texture2DArray) +0:? 'g_tTex2di4' (uniform itexture2DArray) +0:? 'g_tTex2du4' (uniform utexture2DArray) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:37 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:20 Function Parameters: +0:? Sequence +0:25 Sequence +0:25 move second child to first child (temp 4-component vector of float) +0:25 'txval20' (temp 4-component vector of float) +0:25 textureGatherOffset (global 4-component vector of float) +0:25 Construct combined texture-sampler (temp sampler2DArray) +0:25 'g_tTex2df4' (uniform texture2DArray) +0:25 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.100000 +0:? 0.200000 +0:? 0.300000 +0:? Constant: +0:? 1 (const int) +0:? 0 (const int) +0:26 Sequence +0:26 move second child to first child (temp 4-component vector of int) +0:26 'txval21' (temp 4-component vector of int) +0:26 textureGatherOffset (global 4-component vector of int) +0:26 Construct combined texture-sampler (temp isampler2DArray) +0:26 'g_tTex2di4' (uniform itexture2DArray) +0:26 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.300000 +0:? 0.400000 +0:? 0.400000 +0:? Constant: +0:? 1 (const int) +0:? 1 (const int) +0:27 Sequence +0:27 move second child to first child (temp 4-component vector of uint) +0:27 'txval22' (temp 4-component vector of uint) +0:27 textureGatherOffset (global 4-component vector of uint) +0:27 Construct combined texture-sampler (temp usampler2DArray) +0:27 'g_tTex2du4' (uniform utexture2DArray) +0:27 'g_sSamp' (uniform sampler) +0:? Constant: +0:? 0.500000 +0:? 0.600000 +0:? 0.700000 +0:? Constant: +0:? 1 (const int) +0:? -1 (const int) +0:33 move second child to first child (temp float) +0:33 Depth: direct index for structure (temp float FragDepth) +0:33 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1.000000 +0:35 Branch: Return with expression +0:35 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth}) +0:? Linker Objects +0:? 'g_sSamp' (uniform sampler) +0:? 'g_tTex1df4a' (uniform texture1DArray) +0:? 'g_tTex1df4' (uniform texture1DArray) +0:? 'g_tTex1di4' (uniform itexture1DArray) +0:? 'g_tTex1du4' (uniform utexture1DArray) +0:? 'g_tTex2df4' (uniform texture2DArray) +0:? 'g_tTex2di4' (uniform itexture2DArray) +0:? 'g_tTex2du4' (uniform utexture2DArray) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 81 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "main" + Name 9 "txval20" + Name 12 "g_tTex2df4" + Name 16 "g_sSamp" + Name 33 "txval21" + Name 36 "g_tTex2di4" + Name 48 "txval22" + Name 51 "g_tTex2du4" + Name 63 "PS_OUTPUT" + MemberName 63(PS_OUTPUT) 0 "Color" + MemberName 63(PS_OUTPUT) 1 "Depth" + Name 65 "psout" + Name 73 "g_tTex1df4a" + Name 74 "g_tTex1df4" + Name 77 "g_tTex1di4" + Name 80 "g_tTex1du4" + Decorate 12(g_tTex2df4) DescriptorSet 0 + Decorate 16(g_sSamp) DescriptorSet 0 + Decorate 36(g_tTex2di4) DescriptorSet 0 + Decorate 51(g_tTex2du4) DescriptorSet 0 + MemberDecorate 63(PS_OUTPUT) 1 BuiltIn FragDepth + Decorate 73(g_tTex1df4a) DescriptorSet 0 + Decorate 74(g_tTex1df4) DescriptorSet 0 + Decorate 77(g_tTex1di4) DescriptorSet 0 + Decorate 80(g_tTex1du4) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D array sampled format:Unknown + 11: TypePointer UniformConstant 10 + 12(g_tTex2df4): 11(ptr) Variable UniformConstant + 14: TypeSampler + 15: TypePointer UniformConstant 14 + 16(g_sSamp): 15(ptr) Variable UniformConstant + 18: TypeSampledImage 10 + 20: TypeVector 6(float) 3 + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 6(float) Constant 1050253722 + 24: 20(fvec3) ConstantComposite 21 22 23 + 25: TypeInt 32 1 + 26: TypeVector 25(int) 2 + 27: 25(int) Constant 1 + 28: 25(int) Constant 0 + 29: 26(ivec2) ConstantComposite 27 28 + 31: TypeVector 25(int) 4 + 32: TypePointer Function 31(ivec4) + 34: TypeImage 25(int) 2D array sampled format:Unknown + 35: TypePointer UniformConstant 34 + 36(g_tTex2di4): 35(ptr) Variable UniformConstant + 39: TypeSampledImage 34 + 41: 6(float) Constant 1053609165 + 42: 20(fvec3) ConstantComposite 23 41 41 + 43: 26(ivec2) ConstantComposite 27 27 + 45: TypeInt 32 0 + 46: TypeVector 45(int) 4 + 47: TypePointer Function 46(ivec4) + 49: TypeImage 45(int) 2D array sampled format:Unknown + 50: TypePointer UniformConstant 49 + 51(g_tTex2du4): 50(ptr) Variable UniformConstant + 54: TypeSampledImage 49 + 56: 6(float) Constant 1056964608 + 57: 6(float) Constant 1058642330 + 58: 6(float) Constant 1060320051 + 59: 20(fvec3) ConstantComposite 56 57 58 + 60: 25(int) Constant 4294967295 + 61: 26(ivec2) ConstantComposite 27 60 + 63(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) + 64: TypePointer Function 63(PS_OUTPUT) + 66: 6(float) Constant 1065353216 + 67: TypePointer Function 6(float) + 71: TypeImage 6(float) 1D array sampled format:Unknown + 72: TypePointer UniformConstant 71 + 73(g_tTex1df4a): 72(ptr) Variable UniformConstant + 74(g_tTex1df4): 72(ptr) Variable UniformConstant + 75: TypeImage 25(int) 1D array sampled format:Unknown + 76: TypePointer UniformConstant 75 + 77(g_tTex1di4): 76(ptr) Variable UniformConstant + 78: TypeImage 45(int) 1D array sampled format:Unknown + 79: TypePointer UniformConstant 78 + 80(g_tTex1du4): 79(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 9(txval20): 8(ptr) Variable Function + 33(txval21): 32(ptr) Variable Function + 48(txval22): 47(ptr) Variable Function + 65(psout): 64(ptr) Variable Function + 13: 10 Load 12(g_tTex2df4) + 17: 14 Load 16(g_sSamp) + 19: 18 SampledImage 13 17 + 30: 7(fvec4) ImageGather 19 24 28 ConstOffset 29 + Store 9(txval20) 30 + 37: 34 Load 36(g_tTex2di4) + 38: 14 Load 16(g_sSamp) + 40: 39 SampledImage 37 38 + 44: 31(ivec4) ImageGather 40 42 28 ConstOffset 43 + Store 33(txval21) 44 + 52: 49 Load 51(g_tTex2du4) + 53: 14 Load 16(g_sSamp) + 55: 54 SampledImage 52 53 + 62: 46(ivec4) ImageGather 55 59 28 ConstOffset 61 + Store 48(txval22) 62 + 68: 67(ptr) AccessChain 65(psout) 27 + Store 68 66 + 69:63(PS_OUTPUT) Load 65(psout) + ReturnValue 69 + FunctionEnd diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out index f7a6903b..aaf20fb1 100644 --- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out @@ -10,7 +10,7 @@ gl_FragCoord origin is upper left 0:27 'txval10' (temp 4-component vector of float) 0:27 textureLod (global 4-component vector of float) 0:27 Construct combined texture-sampler (temp sampler1DArray) -0:27 'g_tTex1df4' (uniform texture1DArray) +0:27 'g_tTex1df4a' (uniform texture1DArray) 0:27 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.100000 @@ -22,7 +22,7 @@ gl_FragCoord origin is upper left 0:28 'txval11' (temp 4-component vector of int) 0:28 textureLod (global 4-component vector of int) 0:28 Construct combined texture-sampler (temp isampler1DArray) -0:28 'g_tTex1di4' (uniform itexture1DArray) +0:28 'g_tTex1di4a' (uniform itexture1DArray) 0:28 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.200000 @@ -34,7 +34,7 @@ gl_FragCoord origin is upper left 0:29 'txval12' (temp 4-component vector of uint) 0:29 textureLod (global 4-component vector of uint) 0:29 Construct combined texture-sampler (temp usampler1DArray) -0:29 'g_tTex1du4' (uniform utexture1DArray) +0:29 'g_tTex1du4a' (uniform utexture1DArray) 0:29 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.300000 @@ -46,7 +46,7 @@ gl_FragCoord origin is upper left 0:31 'txval20' (temp 4-component vector of float) 0:31 textureLod (global 4-component vector of float) 0:31 Construct combined texture-sampler (temp sampler2DArray) -0:31 'g_tTex2df4' (uniform texture2DArray) +0:31 'g_tTex2df4a' (uniform texture2DArray) 0:31 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.100000 @@ -59,7 +59,7 @@ gl_FragCoord origin is upper left 0:32 'txval21' (temp 4-component vector of int) 0:32 textureLod (global 4-component vector of int) 0:32 Construct combined texture-sampler (temp isampler2DArray) -0:32 'g_tTex2di4' (uniform itexture2DArray) +0:32 'g_tTex2di4a' (uniform itexture2DArray) 0:32 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.300000 @@ -72,7 +72,7 @@ gl_FragCoord origin is upper left 0:33 'txval22' (temp 4-component vector of uint) 0:33 textureLod (global 4-component vector of uint) 0:33 Construct combined texture-sampler (temp usampler2DArray) -0:33 'g_tTex2du4' (uniform utexture2DArray) +0:33 'g_tTex2du4a' (uniform utexture2DArray) 0:33 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.500000 @@ -85,7 +85,7 @@ gl_FragCoord origin is upper left 0:35 'txval40' (temp 4-component vector of float) 0:35 textureLod (global 4-component vector of float) 0:35 Construct combined texture-sampler (temp samplerCubeArray) -0:35 'g_tTexcdf4' (uniform textureCubeArray) +0:35 'g_tTexcdf4a' (uniform textureCubeArray) 0:35 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.100000 @@ -99,7 +99,7 @@ gl_FragCoord origin is upper left 0:36 'txval41' (temp 4-component vector of int) 0:36 textureLod (global 4-component vector of int) 0:36 Construct combined texture-sampler (temp isamplerCubeArray) -0:36 'g_tTexcdi4' (uniform itextureCubeArray) +0:36 'g_tTexcdi4a' (uniform itextureCubeArray) 0:36 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.400000 @@ -113,7 +113,7 @@ gl_FragCoord origin is upper left 0:37 'txval42' (temp 4-component vector of uint) 0:37 textureLod (global 4-component vector of uint) 0:37 Construct combined texture-sampler (temp usamplerCubeArray) -0:37 'g_tTexcdu4' (uniform utextureCubeArray) +0:37 'g_tTexcdu4a' (uniform utextureCubeArray) 0:37 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.700000 @@ -135,14 +135,14 @@ gl_FragCoord origin is upper left 0:? 'g_sSamp' (uniform sampler) 0:? 'g_tTex1df4a' (uniform texture1DArray) 0:? 'g_tTex1df4' (uniform texture1DArray) -0:? 'g_tTex1di4' (uniform itexture1DArray) -0:? 'g_tTex1du4' (uniform utexture1DArray) -0:? 'g_tTex2df4' (uniform texture2DArray) -0:? 'g_tTex2di4' (uniform itexture2DArray) -0:? 'g_tTex2du4' (uniform utexture2DArray) -0:? 'g_tTexcdf4' (uniform textureCubeArray) -0:? 'g_tTexcdi4' (uniform itextureCubeArray) -0:? 'g_tTexcdu4' (uniform utextureCubeArray) +0:? 'g_tTex1di4a' (uniform itexture1DArray) +0:? 'g_tTex1du4a' (uniform utexture1DArray) +0:? 'g_tTex2df4a' (uniform texture2DArray) +0:? 'g_tTex2di4a' (uniform itexture2DArray) +0:? 'g_tTex2du4a' (uniform utexture2DArray) +0:? 'g_tTexcdf4a' (uniform textureCubeArray) +0:? 'g_tTexcdi4a' (uniform itextureCubeArray) +0:? 'g_tTexcdu4a' (uniform utextureCubeArray) Linked fragment stage: @@ -159,7 +159,7 @@ gl_FragCoord origin is upper left 0:27 'txval10' (temp 4-component vector of float) 0:27 textureLod (global 4-component vector of float) 0:27 Construct combined texture-sampler (temp sampler1DArray) -0:27 'g_tTex1df4' (uniform texture1DArray) +0:27 'g_tTex1df4a' (uniform texture1DArray) 0:27 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.100000 @@ -171,7 +171,7 @@ gl_FragCoord origin is upper left 0:28 'txval11' (temp 4-component vector of int) 0:28 textureLod (global 4-component vector of int) 0:28 Construct combined texture-sampler (temp isampler1DArray) -0:28 'g_tTex1di4' (uniform itexture1DArray) +0:28 'g_tTex1di4a' (uniform itexture1DArray) 0:28 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.200000 @@ -183,7 +183,7 @@ gl_FragCoord origin is upper left 0:29 'txval12' (temp 4-component vector of uint) 0:29 textureLod (global 4-component vector of uint) 0:29 Construct combined texture-sampler (temp usampler1DArray) -0:29 'g_tTex1du4' (uniform utexture1DArray) +0:29 'g_tTex1du4a' (uniform utexture1DArray) 0:29 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.300000 @@ -195,7 +195,7 @@ gl_FragCoord origin is upper left 0:31 'txval20' (temp 4-component vector of float) 0:31 textureLod (global 4-component vector of float) 0:31 Construct combined texture-sampler (temp sampler2DArray) -0:31 'g_tTex2df4' (uniform texture2DArray) +0:31 'g_tTex2df4a' (uniform texture2DArray) 0:31 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.100000 @@ -208,7 +208,7 @@ gl_FragCoord origin is upper left 0:32 'txval21' (temp 4-component vector of int) 0:32 textureLod (global 4-component vector of int) 0:32 Construct combined texture-sampler (temp isampler2DArray) -0:32 'g_tTex2di4' (uniform itexture2DArray) +0:32 'g_tTex2di4a' (uniform itexture2DArray) 0:32 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.300000 @@ -221,7 +221,7 @@ gl_FragCoord origin is upper left 0:33 'txval22' (temp 4-component vector of uint) 0:33 textureLod (global 4-component vector of uint) 0:33 Construct combined texture-sampler (temp usampler2DArray) -0:33 'g_tTex2du4' (uniform utexture2DArray) +0:33 'g_tTex2du4a' (uniform utexture2DArray) 0:33 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.500000 @@ -234,7 +234,7 @@ gl_FragCoord origin is upper left 0:35 'txval40' (temp 4-component vector of float) 0:35 textureLod (global 4-component vector of float) 0:35 Construct combined texture-sampler (temp samplerCubeArray) -0:35 'g_tTexcdf4' (uniform textureCubeArray) +0:35 'g_tTexcdf4a' (uniform textureCubeArray) 0:35 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.100000 @@ -248,7 +248,7 @@ gl_FragCoord origin is upper left 0:36 'txval41' (temp 4-component vector of int) 0:36 textureLod (global 4-component vector of int) 0:36 Construct combined texture-sampler (temp isamplerCubeArray) -0:36 'g_tTexcdi4' (uniform itextureCubeArray) +0:36 'g_tTexcdi4a' (uniform itextureCubeArray) 0:36 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.400000 @@ -262,7 +262,7 @@ gl_FragCoord origin is upper left 0:37 'txval42' (temp 4-component vector of uint) 0:37 textureLod (global 4-component vector of uint) 0:37 Construct combined texture-sampler (temp usamplerCubeArray) -0:37 'g_tTexcdu4' (uniform utextureCubeArray) +0:37 'g_tTexcdu4a' (uniform utextureCubeArray) 0:37 'g_sSamp' (uniform sampler) 0:? Constant: 0:? 0.700000 @@ -284,14 +284,14 @@ gl_FragCoord origin is upper left 0:? 'g_sSamp' (uniform sampler) 0:? 'g_tTex1df4a' (uniform texture1DArray) 0:? 'g_tTex1df4' (uniform texture1DArray) -0:? 'g_tTex1di4' (uniform itexture1DArray) -0:? 'g_tTex1du4' (uniform utexture1DArray) -0:? 'g_tTex2df4' (uniform texture2DArray) -0:? 'g_tTex2di4' (uniform itexture2DArray) -0:? 'g_tTex2du4' (uniform utexture2DArray) -0:? 'g_tTexcdf4' (uniform textureCubeArray) -0:? 'g_tTexcdi4' (uniform itextureCubeArray) -0:? 'g_tTexcdu4' (uniform utextureCubeArray) +0:? 'g_tTex1di4a' (uniform itexture1DArray) +0:? 'g_tTex1du4a' (uniform utexture1DArray) +0:? 'g_tTex2df4a' (uniform texture2DArray) +0:? 'g_tTex2di4a' (uniform itexture2DArray) +0:? 'g_tTex2du4a' (uniform utexture2DArray) +0:? 'g_tTexcdf4a' (uniform textureCubeArray) +0:? 'g_tTexcdi4a' (uniform itextureCubeArray) +0:? 'g_tTexcdu4a' (uniform utextureCubeArray) // Module Version 10000 // Generated by (magic number): 80001 @@ -307,41 +307,41 @@ gl_FragCoord origin is upper left Source HLSL 450 Name 4 "main" Name 9 "txval10" - Name 12 "g_tTex1df4" + Name 12 "g_tTex1df4a" Name 16 "g_sSamp" Name 29 "txval11" - Name 32 "g_tTex1di4" + Name 32 "g_tTex1di4a" Name 43 "txval12" - Name 46 "g_tTex1du4" + Name 46 "g_tTex1du4a" Name 54 "txval20" - Name 57 "g_tTex2df4" + Name 57 "g_tTex2df4a" Name 65 "txval21" - Name 68 "g_tTex2di4" + Name 68 "g_tTex2di4a" Name 76 "txval22" - Name 79 "g_tTex2du4" + Name 79 "g_tTex2du4a" Name 88 "txval40" - Name 91 "g_tTexcdf4" + Name 91 "g_tTexcdf4a" Name 98 "txval41" - Name 101 "g_tTexcdi4" + Name 101 "g_tTexcdi4a" Name 108 "txval42" - Name 111 "g_tTexcdu4" + Name 111 "g_tTexcdu4a" Name 121 "PS_OUTPUT" MemberName 121(PS_OUTPUT) 0 "Color" MemberName 121(PS_OUTPUT) 1 "Depth" Name 123 "psout" - Name 129 "g_tTex1df4a" - Decorate 12(g_tTex1df4) DescriptorSet 0 + Name 129 "g_tTex1df4" + Decorate 12(g_tTex1df4a) DescriptorSet 0 Decorate 16(g_sSamp) DescriptorSet 0 - Decorate 32(g_tTex1di4) DescriptorSet 0 - Decorate 46(g_tTex1du4) DescriptorSet 0 - Decorate 57(g_tTex2df4) DescriptorSet 0 - Decorate 68(g_tTex2di4) DescriptorSet 0 - Decorate 79(g_tTex2du4) DescriptorSet 0 - Decorate 91(g_tTexcdf4) DescriptorSet 0 - Decorate 101(g_tTexcdi4) DescriptorSet 0 - Decorate 111(g_tTexcdu4) DescriptorSet 0 + Decorate 32(g_tTex1di4a) DescriptorSet 0 + Decorate 46(g_tTex1du4a) DescriptorSet 0 + Decorate 57(g_tTex2df4a) DescriptorSet 0 + Decorate 68(g_tTex2di4a) DescriptorSet 0 + Decorate 79(g_tTex2du4a) DescriptorSet 0 + Decorate 91(g_tTexcdf4a) DescriptorSet 0 + Decorate 101(g_tTexcdi4a) DescriptorSet 0 + Decorate 111(g_tTexcdu4a) DescriptorSet 0 MemberDecorate 121(PS_OUTPUT) 1 BuiltIn FragDepth - Decorate 129(g_tTex1df4a) DescriptorSet 0 + Decorate 129(g_tTex1df4) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -349,7 +349,7 @@ gl_FragCoord origin is upper left 8: TypePointer Function 7(fvec4) 10: TypeImage 6(float) 1D array sampled format:Unknown 11: TypePointer UniformConstant 10 - 12(g_tTex1df4): 11(ptr) Variable UniformConstant + 12(g_tTex1df4a): 11(ptr) Variable UniformConstant 14: TypeSampler 15: TypePointer UniformConstant 14 16(g_sSamp): 15(ptr) Variable UniformConstant @@ -364,7 +364,7 @@ gl_FragCoord origin is upper left 28: TypePointer Function 27(ivec4) 30: TypeImage 26(int) 1D array sampled format:Unknown 31: TypePointer UniformConstant 30 - 32(g_tTex1di4): 31(ptr) Variable UniformConstant + 32(g_tTex1di4a): 31(ptr) Variable UniformConstant 35: TypeSampledImage 30 37: 6(float) Constant 1050253722 38: 20(fvec2) ConstantComposite 22 37 @@ -373,42 +373,42 @@ gl_FragCoord origin is upper left 42: TypePointer Function 41(ivec4) 44: TypeImage 40(int) 1D array sampled format:Unknown 45: TypePointer UniformConstant 44 - 46(g_tTex1du4): 45(ptr) Variable UniformConstant + 46(g_tTex1du4a): 45(ptr) Variable UniformConstant 49: TypeSampledImage 44 51: 6(float) Constant 1053609165 52: 20(fvec2) ConstantComposite 37 51 55: TypeImage 6(float) 2D array sampled format:Unknown 56: TypePointer UniformConstant 55 - 57(g_tTex2df4): 56(ptr) Variable UniformConstant + 57(g_tTex2df4a): 56(ptr) Variable UniformConstant 60: TypeSampledImage 55 62: TypeVector 6(float) 3 63: 62(fvec3) ConstantComposite 21 22 37 66: TypeImage 26(int) 2D array sampled format:Unknown 67: TypePointer UniformConstant 66 - 68(g_tTex2di4): 67(ptr) Variable UniformConstant + 68(g_tTex2di4a): 67(ptr) Variable UniformConstant 71: TypeSampledImage 66 73: 6(float) Constant 1056964608 74: 62(fvec3) ConstantComposite 37 51 73 77: TypeImage 40(int) 2D array sampled format:Unknown 78: TypePointer UniformConstant 77 - 79(g_tTex2du4): 78(ptr) Variable UniformConstant + 79(g_tTex2du4a): 78(ptr) Variable UniformConstant 82: TypeSampledImage 77 84: 6(float) Constant 1058642330 85: 6(float) Constant 1060320051 86: 62(fvec3) ConstantComposite 73 84 85 89: TypeImage 6(float) Cube array sampled format:Unknown 90: TypePointer UniformConstant 89 - 91(g_tTexcdf4): 90(ptr) Variable UniformConstant + 91(g_tTexcdf4a): 90(ptr) Variable UniformConstant 94: TypeSampledImage 89 96: 7(fvec4) ConstantComposite 21 22 37 51 99: TypeImage 26(int) Cube array sampled format:Unknown 100: TypePointer UniformConstant 99 - 101(g_tTexcdi4): 100(ptr) Variable UniformConstant +101(g_tTexcdi4a): 100(ptr) Variable UniformConstant 104: TypeSampledImage 99 106: 7(fvec4) ConstantComposite 51 73 84 85 109: TypeImage 40(int) Cube array sampled format:Unknown 110: TypePointer UniformConstant 109 - 111(g_tTexcdu4): 110(ptr) Variable UniformConstant +111(g_tTexcdu4a): 110(ptr) Variable UniformConstant 114: TypeSampledImage 109 116: 6(float) Constant 1061997773 117: 6(float) Constant 1063675494 @@ -418,7 +418,7 @@ gl_FragCoord origin is upper left 122: TypePointer Function 121(PS_OUTPUT) 124: 26(int) Constant 1 125: TypePointer Function 6(float) -129(g_tTex1df4a): 11(ptr) Variable UniformConstant + 129(g_tTex1df4): 11(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 9(txval10): 8(ptr) Variable Function @@ -431,47 +431,47 @@ gl_FragCoord origin is upper left 98(txval41): 28(ptr) Variable Function 108(txval42): 42(ptr) Variable Function 123(psout): 122(ptr) Variable Function - 13: 10 Load 12(g_tTex1df4) + 13: 10 Load 12(g_tTex1df4a) 17: 14 Load 16(g_sSamp) 19: 18 SampledImage 13 17 25: 7(fvec4) ImageSampleExplicitLod 19 23 Lod 24 Store 9(txval10) 25 - 33: 30 Load 32(g_tTex1di4) + 33: 30 Load 32(g_tTex1di4a) 34: 14 Load 16(g_sSamp) 36: 35 SampledImage 33 34 39: 27(ivec4) ImageSampleExplicitLod 36 38 Lod 24 Store 29(txval11) 39 - 47: 44 Load 46(g_tTex1du4) + 47: 44 Load 46(g_tTex1du4a) 48: 14 Load 16(g_sSamp) 50: 49 SampledImage 47 48 53: 41(ivec4) ImageSampleExplicitLod 50 52 Lod 24 Store 43(txval12) 53 - 58: 55 Load 57(g_tTex2df4) + 58: 55 Load 57(g_tTex2df4a) 59: 14 Load 16(g_sSamp) 61: 60 SampledImage 58 59 64: 7(fvec4) ImageSampleExplicitLod 61 63 Lod 24 Store 54(txval20) 64 - 69: 66 Load 68(g_tTex2di4) + 69: 66 Load 68(g_tTex2di4a) 70: 14 Load 16(g_sSamp) 72: 71 SampledImage 69 70 75: 27(ivec4) ImageSampleExplicitLod 72 74 Lod 24 Store 65(txval21) 75 - 80: 77 Load 79(g_tTex2du4) + 80: 77 Load 79(g_tTex2du4a) 81: 14 Load 16(g_sSamp) 83: 82 SampledImage 80 81 87: 41(ivec4) ImageSampleExplicitLod 83 86 Lod 24 Store 76(txval22) 87 - 92: 89 Load 91(g_tTexcdf4) + 92: 89 Load 91(g_tTexcdf4a) 93: 14 Load 16(g_sSamp) 95: 94 SampledImage 92 93 97: 7(fvec4) ImageSampleExplicitLod 95 96 Lod 24 Store 88(txval40) 97 - 102: 99 Load 101(g_tTexcdi4) + 102: 99 Load 101(g_tTexcdi4a) 103: 14 Load 16(g_sSamp) 105: 104 SampledImage 102 103 107: 27(ivec4) ImageSampleExplicitLod 105 106 Lod 24 Store 98(txval41) 107 - 112: 109 Load 111(g_tTexcdu4) + 112: 109 Load 111(g_tTexcdu4a) 113: 14 Load 16(g_sSamp) 115: 114 SampledImage 112 113 120: 41(ivec4) ImageSampleExplicitLod 115 119 Lod 24 diff --git a/Test/hlsl.gather.array.dx10.frag b/Test/hlsl.gather.array.dx10.frag new file mode 100644 index 00000000..788c333b --- /dev/null +++ b/Test/hlsl.gather.array.dx10.frag @@ -0,0 +1,43 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // No 1D gathers + + float4 txval20 = g_tTex2df4a . Gather(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval21 = g_tTex2di4a . Gather(g_sSamp, float3(0.3, 0.4, 0.5)); + uint4 txval22 = g_tTex2du4a . Gather(g_sSamp, float3(0.5, 0.6, 0.7)); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4a . Gather(g_sSamp, float4(0.1, 0.2, 0.3, 0.4)); + int4 txval41 = g_tTexcdi4a . Gather(g_sSamp, float4(0.4, 0.5, 0.6, 0.7)); + uint4 txval42 = g_tTexcdu4a . Gather(g_sSamp, float4(0.7, 0.8, 0.9, 1.0)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/Test/hlsl.gather.basic.dx10.frag b/Test/hlsl.gather.basic.dx10.frag new file mode 100644 index 00000000..be0cd31f --- /dev/null +++ b/Test/hlsl.gather.basic.dx10.frag @@ -0,0 +1,48 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6)); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Gather(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Gather(g_sSamp, float3(0.7, 0.8, 0.9)); + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/Test/hlsl.gather.basic.dx10.vert b/Test/hlsl.gather.basic.dx10.vert new file mode 100644 index 00000000..4996f18c --- /dev/null +++ b/Test/hlsl.gather.basic.dx10.vert @@ -0,0 +1,46 @@ +SamplerState g_sSamp : register(s0); +uniform sampler2D g_sSamp2d; + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct VS_OUTPUT +{ + float4 Pos : SV_Position; +}; + +VS_OUTPUT main() +{ + VS_OUTPUT vsout; + + // no 1D gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6)); + + // no 3D gathers + + float4 txval40 = g_tTexcdf4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3)); + int4 txval41 = g_tTexcdi4 . Gather(g_sSamp, float3(0.4, 0.5, 0.6)); + uint4 txval42 = g_tTexcdu4 . Gather(g_sSamp, float3(0.7, 0.8, 0.9)); + + vsout.Pos = float4(0,0,0,0); + + return vsout; +} diff --git a/Test/hlsl.gather.offset.dx10.frag b/Test/hlsl.gather.offset.dx10.frag new file mode 100644 index 00000000..4d095c0e --- /dev/null +++ b/Test/hlsl.gather.offset.dx10.frag @@ -0,0 +1,44 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4a : register(t1); + +uniform Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +TextureCube g_tTexcdf4; +TextureCube g_tTexcdi4; +TextureCube g_tTexcdu4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // no 1D Gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float2(0.1, 0.2), int2(1,0)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float2(0.3, 0.4), int2(1,1)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float2(0.5, 0.6), int2(1,-1)); + + // no 3D gathers + // No Cube offset gathers + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/Test/hlsl.gather.offsetarray.dx10.frag b/Test/hlsl.gather.offsetarray.dx10.frag new file mode 100644 index 00000000..5cc92525 --- /dev/null +++ b/Test/hlsl.gather.offsetarray.dx10.frag @@ -0,0 +1,36 @@ +SamplerState g_sSamp : register(s0); + +Texture1DArray g_tTex1df4a : register(t1); + +uniform Texture1DArray g_tTex1df4 : register(t0); +Texture1DArray g_tTex1di4; +Texture1DArray g_tTex1du4; + +Texture2DArray g_tTex2df4; +Texture2DArray g_tTex2di4; +Texture2DArray g_tTex2du4; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; + float Depth : SV_Depth; +}; + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // No 1D gathers + + float4 txval20 = g_tTex2df4 . Gather(g_sSamp, float3(0.1, 0.2, 0.3), int2(1,0)); + int4 txval21 = g_tTex2di4 . Gather(g_sSamp, float3(0.3, 0.4, 0.4), int2(1,1)); + uint4 txval22 = g_tTex2du4 . Gather(g_sSamp, float3(0.5, 0.6, 0.7), int2(1,-1)); + + // No 3D gathers + // No Cube offset gathers + + psout.Color = 1.0; + psout.Depth = 1.0; + + return psout; +} diff --git a/Test/hlsl.samplelevel.array.dx10.frag b/Test/hlsl.samplelevel.array.dx10.frag index 68dbdde3..c52aeb29 100644 --- a/Test/hlsl.samplelevel.array.dx10.frag +++ b/Test/hlsl.samplelevel.array.dx10.frag @@ -3,16 +3,16 @@ SamplerState g_sSamp : register(s0); Texture1DArray g_tTex1df4a : register(t1); uniform Texture1DArray g_tTex1df4 : register(t0); -Texture1DArray g_tTex1di4; -Texture1DArray g_tTex1du4; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; -Texture2DArray g_tTex2df4; -Texture2DArray g_tTex2di4; -Texture2DArray g_tTex2du4; +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; -TextureCubeArray g_tTexcdf4; -TextureCubeArray g_tTexcdi4; -TextureCubeArray g_tTexcdu4; +TextureCubeArray g_tTexcdf4a; +TextureCubeArray g_tTexcdi4a; +TextureCubeArray g_tTexcdu4a; struct PS_OUTPUT { @@ -24,17 +24,17 @@ PS_OUTPUT main() { PS_OUTPUT psout; - float4 txval10 = g_tTex1df4 . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75); - int4 txval11 = g_tTex1di4 . SampleLevel(g_sSamp, float2(0.2, 0.3), 0.75); - uint4 txval12 = g_tTex1du4 . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75); + float4 txval10 = g_tTex1df4a . SampleLevel(g_sSamp, float2(0.1, 0.2), 0.75); + int4 txval11 = g_tTex1di4a . SampleLevel(g_sSamp, float2(0.2, 0.3), 0.75); + uint4 txval12 = g_tTex1du4a . SampleLevel(g_sSamp, float2(0.3, 0.4), 0.75); - float4 txval20 = g_tTex2df4 . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); - int4 txval21 = g_tTex2di4 . SampleLevel(g_sSamp, float3(0.3, 0.4, 0.5), 0.75); - uint4 txval22 = g_tTex2du4 . SampleLevel(g_sSamp, float3(0.5, 0.6, 0.7), 0.75); + float4 txval20 = g_tTex2df4a . SampleLevel(g_sSamp, float3(0.1, 0.2, 0.3), 0.75); + int4 txval21 = g_tTex2di4a . SampleLevel(g_sSamp, float3(0.3, 0.4, 0.5), 0.75); + uint4 txval22 = g_tTex2du4a . SampleLevel(g_sSamp, float3(0.5, 0.6, 0.7), 0.75); - float4 txval40 = g_tTexcdf4 . SampleLevel(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); - int4 txval41 = g_tTexcdi4 . SampleLevel(g_sSamp, float4(0.4, 0.5, 0.6, 0.7), 0.75); - uint4 txval42 = g_tTexcdu4 . SampleLevel(g_sSamp, float4(0.7, 0.8, 0.9, 1.0), 0.75); + float4 txval40 = g_tTexcdf4a . SampleLevel(g_sSamp, float4(0.1, 0.2, 0.3, 0.4), 0.75); + int4 txval41 = g_tTexcdi4a . SampleLevel(g_sSamp, float4(0.4, 0.5, 0.6, 0.7), 0.75); + uint4 txval42 = g_tTexcdu4a . SampleLevel(g_sSamp, float4(0.7, 0.8, 0.9, 1.0), 0.75); psout.Color = 1.0; psout.Depth = 1.0; diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 900aee7f..ded91c82 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -81,6 +81,11 @@ INSTANTIATE_TEST_CASE_P( {"hlsl.float1.frag", "PixelShaderFunction"}, {"hlsl.float4.frag", "PixelShaderFunction"}, {"hlsl.forLoop.frag", "PixelShaderFunction"}, + {"hlsl.gather.array.dx10.frag", "main"}, + {"hlsl.gather.basic.dx10.frag", "main"}, + {"hlsl.gather.basic.dx10.vert", "main"}, + {"hlsl.gather.offset.dx10.frag", "main"}, + {"hlsl.gather.offsetarray.dx10.frag", "main"}, {"hlsl.getdimensions.dx10.frag", "main"}, {"hlsl.getdimensions.dx10.vert", "main"}, {"hlsl.if.frag", "PixelShaderFunction"}, diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 83817eaa..629be28a 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -1221,6 +1221,35 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType break; } + case EOpMethodGather: + { + TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); + TIntermTyped* argOffset = nullptr; + + // Offset is optional + if (argAggregate->getSequence().size() == 4) + argOffset = argAggregate->getSequence()[3]->getAsTyped(); + + const TOperator textureOp = (argOffset == nullptr ? EOpTextureGather : EOpTextureGatherOffset); + TIntermAggregate* txgather = new TIntermAggregate(textureOp); + + TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp); + + txgather->getSequence().push_back(txcombine); + txgather->getSequence().push_back(argCoord); + + if (argOffset != nullptr) + txgather->getSequence().push_back(argOffset); + + txgather->setType(node->getType()); + txgather->setLoc(loc); + node = txgather; + + break; + } + default: break; // most pass through unchanged } diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp index a3bc3295..9f6af891 100755 --- a/hlsl/hlslParseables.cpp +++ b/hlsl/hlslParseables.cpp @@ -68,6 +68,7 @@ const char* BaseTypeName(const char argOrder, const char* scalarName, const char } bool IsTextureType(const char argOrder) { return argOrder == '%' || argOrder == '@'; } +bool IsSamplerType(const char argType) { return argType == 'S' || argType == 's'; } bool IsTextureArrayed(const char argOrder) { return argOrder == '@'; } // bool IsTextureMS(const char /*argOrder*/) { return false; } // TODO: ... @@ -95,6 +96,14 @@ bool IsIllegalSample(const glslang::TString& name, const char* argOrder, int dim return true; } + // Reject invalid Gathers + if (name == "Gather") { + if (dim0 == 1 || dim0 == 3) // there are no 1D or 3D gathers + return true; + if (dim0 == 4 && numArgs == 4) // there are no Cube gathers with offset + return true; + } + // Reject invalid Loads if (name == "Load" && dim0 == 4) return true; // Load does not support any cubemaps, arrayed or not. @@ -119,6 +128,29 @@ bool HasMipInCoord(const glslang::TString& name) return name == "Load"; } +// Handle IO params marked with > or < +const char* IoParam(glslang::TString& s, const char* nthArgOrder) +{ + if (*nthArgOrder == '>') { // output params + ++nthArgOrder; + s.append("out "); + } else if (*nthArgOrder == '<') { // input params + ++nthArgOrder; + s.append("in "); + } + + return nthArgOrder; +} + +// Handle repeated args +void HandleRepeatArg(const char*& arg, const char*& prev, const char* current) +{ + if (*arg == ',' || *arg == '\0') + arg = prev; + else + prev = current; +} + // Create and return a type name. This is done in GLSL, not HLSL conventions, until such // time as builtins are parsed using the HLSL parser. // @@ -132,19 +164,16 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons const bool isMatMul = (argOrder[0] == '#'); const bool isTexture = IsTextureType(argOrder[0]); const bool isArrayed = IsTextureArrayed(argOrder[0]); + const bool isSampler = IsSamplerType(argType[0]); //const bool isMS = IsTextureMS(argOrder[0]); - char order = *argOrder; char type = *argType; if (isTranspose) { // Take transpose of matrix dimensions - order = *++argOrder; std::swap(dim0, dim1); } else if (isMatMul) { - order = *++argOrder; dim0 = dim1; // set vector dimension to mat col } else if (isTexture) { - order = *++argOrder; if (type == 'F') // map base type to texture of that type. type = 'T'; // e.g, int -> itexture, uint -> utexture, etc. else if (type == 'I') @@ -153,6 +182,11 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons type = 'u'; } + while (!isalpha(*argOrder)) + ++argOrder; + + char order = *argOrder; + if (UseHlslTypes) { switch (type) { case '-': s += "void"; break; @@ -197,8 +231,8 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons dim0 = dim1 = fixedVecSize; // Add sampler dimensions - if (type == 'S' || isTexture) { - if (order == 'V') { + if (isSampler || isTexture) { + if (order == 'V' || isTexture) { switch (dim0) { case 1: s += "1D"; break; case 2: s += "2D"; break; @@ -378,7 +412,9 @@ void TBuiltInParseablesHlsl::createMatTimesMat() // void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/) { - static const EShLanguageMask EShLangAll = EShLanguageMask(EShLangCount - 1); + static const EShLanguageMask EShLangAll = EShLanguageMask(EShLangCount - 1); + static const EShLanguageMask EShLangPSCS = EShLanguageMask(EShLangFragmentMask | EShLangComputeMask); + static const EShLanguageMask EShLangVSPSGS = EShLanguageMask(EShLangVertexMask | EShLangFragmentMask | EShLangGeometryMask); // This structure encodes the prototype information for each HLSL intrinsic. // Because explicit enumeration would be cumbersome, it's procedurally generated. @@ -402,255 +438,244 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c const char* argType; // argument type key unsigned int stage; // stage mask } hlslIntrinsics[] = { - // name retOrd retType argOrder argType stage mask + // name retOrd retType argOrder argType stage mask // ----------------------------------------------------------------------------------------------- - { "abort", nullptr, nullptr, "-", "-", EShLangAll }, - { "abs", nullptr, nullptr, "SVM", "DFUI", EShLangAll }, - { "acos", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "all", "S", "B", "SVM", "BFI", EShLangAll }, - { "AllMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask }, - { "AllMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, - { "any", "S", "B", "SVM", "BFI", EShLangAll }, - { "asdouble", "S", "D", "S,", "U,", EShLangAll }, - { "asdouble", "V2", "D", "V2,", "U,", EShLangAll }, - { "asfloat", nullptr, "F", "SVM", "BFIU", EShLangAll }, - { "asin", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "asint", nullptr, "I", "SVM", "FU", EShLangAll }, - { "asuint", nullptr, "U", "SVM", "FU", EShLangAll }, - { "atan", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "atan2", nullptr, nullptr, "SVM,", "F,", EShLangAll }, - { "ceil", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "CheckAccessFullyMapped", "S", "B" , "S", "U", EShLangFragmentMask | EShLangComputeMask }, - { "clamp", nullptr, nullptr, "SVM,,", "FUI,,", EShLangAll }, - { "clip", "-", "-", "SVM", "F", EShLangFragmentMask }, - { "cos", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "cosh", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "countbits", nullptr, nullptr, "SV", "U", EShLangAll }, - { "cross", nullptr, nullptr, "V3,", "F,", EShLangAll }, - { "D3DCOLORtoUBYTE4", "V4", "I", "V4", "F", EShLangAll }, - { "ddx", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "ddx_coarse", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "ddx_fine", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "ddy", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "ddy_coarse", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "ddy_fine", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "degrees", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "determinant", "S", "F", "M", "F", EShLangAll }, - { "DeviceMemoryBarrier", nullptr, nullptr, "-", "-", EShLangFragmentMask | EShLangComputeMask }, - { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, - { "distance", "S", "F", "V,", "F,", EShLangAll }, - { "dot", "S", nullptr, "V,", "FI,", EShLangAll }, - { "dst", nullptr, nullptr, "V4,V4", "F,", EShLangAll }, - // { "errorf", "-", "-", "", "", EShLangAll }, TODO: varargs - { "EvaluateAttributeAtCentroid", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "EvaluateAttributeAtSample", nullptr, nullptr, "SVM,S", "F,U", EShLangFragmentMask }, - { "EvaluateAttributeSnapped", nullptr, nullptr, "SVM,V2", "F,I", EShLangFragmentMask }, - { "exp", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "exp2", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "f16tof32", nullptr, "F", "SV", "U", EShLangAll }, - { "f32tof16", nullptr, "U", "SV", "F", EShLangAll }, - { "faceforward", nullptr, nullptr, "V,,", "F,,", EShLangAll }, - { "firstbithigh", nullptr, nullptr, "SV", "UI", EShLangAll }, - { "firstbitlow", nullptr, nullptr, "SV", "UI", EShLangAll }, - { "floor", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "fma", nullptr, nullptr, "SVM,,", "D,,", EShLangAll }, - { "fmod", nullptr, nullptr, "SVM,", "F,", EShLangAll }, - { "frac", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "frexp", nullptr, nullptr, "SVM,", "F,", EShLangAll }, - { "fwidth", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, - { "GetRenderTargetSampleCount", "S", "U", "-", "-", EShLangAll }, - { "GetRenderTargetSamplePosition", "V2", "F", "V1", "I", EShLangAll }, - { "GroupMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask }, - { "GroupMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, - { "InterlockedAdd", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedAdd", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedAnd", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedAnd", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedCompareExchange", "-", "-", "SVM,,,>", "UI,,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedCompareStore", "-", "-", "SVM,,", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedExchange", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedMax", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedMax", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedMin", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedMin", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedOr", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedOr", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedXor", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, - { "InterlockedXor", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, - { "isfinite", nullptr, "B" , "SVM", "F", EShLangAll }, - { "isinf", nullptr, "B" , "SVM", "F", EShLangAll }, - { "isnan", nullptr, "B" , "SVM", "F", EShLangAll }, - { "ldexp", nullptr, nullptr, "SVM,", "F,", EShLangAll }, - { "length", "S", "F", "V", "F", EShLangAll }, - { "lerp", nullptr, nullptr, "SVM,,", "F,,", EShLangAll }, - { "lit", "V4", "F", "S,,", "F,,", EShLangAll }, - { "log", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "log10", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "log2", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "mad", nullptr, nullptr, "SVM,,", "DFUI,,", EShLangAll }, - { "max", nullptr, nullptr, "SVM,", "FI,", EShLangAll }, - { "min", nullptr, nullptr, "SVM,", "FI,", EShLangAll }, - { "modf", nullptr, nullptr, "SVM,>", "FI,", EShLangAll }, - { "msad4", "V4", "U", "S,V2,V4", "U,,", EShLangAll }, - { "mul", "S", nullptr, "S,S", "FI,", EShLangAll }, - { "mul", "V", nullptr, "S,V", "FI,", EShLangAll }, - { "mul", "M", nullptr, "S,M", "FI,", EShLangAll }, - { "mul", "V", nullptr, "V,S", "FI,", EShLangAll }, - { "mul", "S", nullptr, "V,V", "FI,", EShLangAll }, - { "mul", "#V", nullptr, "V,M", "FI,", EShLangAll }, - { "mul", "M", nullptr, "M,S", "FI,", EShLangAll }, - { "mul", "V", nullptr, "M,#V", "FI,", EShLangAll }, + { "abort", nullptr, nullptr, "-", "-", EShLangAll }, + { "abs", nullptr, nullptr, "SVM", "DFUI", EShLangAll }, + { "acos", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "all", "S", "B", "SVM", "BFI", EShLangAll }, + { "AllMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "AllMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "any", "S", "B", "SVM", "BFI", EShLangAll }, + { "asdouble", "S", "D", "S,", "U,", EShLangAll }, + { "asdouble", "V2", "D", "V2,", "U,", EShLangAll }, + { "asfloat", nullptr, "F", "SVM", "BFIU", EShLangAll }, + { "asin", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "asint", nullptr, "I", "SVM", "FU", EShLangAll }, + { "asuint", nullptr, "U", "SVM", "FU", EShLangAll }, + { "atan", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "atan2", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "ceil", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "CheckAccessFullyMapped", "S", "B" , "S", "U", EShLangPSCS }, + { "clamp", nullptr, nullptr, "SVM,,", "FUI,,", EShLangAll }, + { "clip", "-", "-", "SVM", "F", EShLangFragmentMask }, + { "cos", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "cosh", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "countbits", nullptr, nullptr, "SV", "U", EShLangAll }, + { "cross", nullptr, nullptr, "V3,", "F,", EShLangAll }, + { "D3DCOLORtoUBYTE4", "V4", "I", "V4", "F", EShLangAll }, + { "ddx", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddx_coarse", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddx_fine", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddy", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddy_coarse", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddy_fine", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "degrees", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "determinant", "S", "F", "M", "F", EShLangAll }, + { "DeviceMemoryBarrier", nullptr, nullptr, "-", "-", EShLangPSCS }, + { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "distance", "S", "F", "V,", "F,", EShLangAll }, + { "dot", "S", nullptr, "V,", "FI,", EShLangAll }, + { "dst", nullptr, nullptr, "V4,", "F,", EShLangAll }, + // { "errorf", "-", "-", "", "", EShLangAll }, TODO: varargs + { "EvaluateAttributeAtCentroid", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "EvaluateAttributeAtSample", nullptr, nullptr, "SVM,S", "F,U", EShLangFragmentMask }, + { "EvaluateAttributeSnapped", nullptr, nullptr, "SVM,V2", "F,I", EShLangFragmentMask }, + { "exp", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "exp2", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "f16tof32", nullptr, "F", "SV", "U", EShLangAll }, + { "f32tof16", nullptr, "U", "SV", "F", EShLangAll }, + { "faceforward", nullptr, nullptr, "V,,", "F,,", EShLangAll }, + { "firstbithigh", nullptr, nullptr, "SV", "UI", EShLangAll }, + { "firstbitlow", nullptr, nullptr, "SV", "UI", EShLangAll }, + { "floor", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "fma", nullptr, nullptr, "SVM,,", "D,,", EShLangAll }, + { "fmod", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "frac", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "frexp", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "fwidth", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "GetRenderTargetSampleCount", "S", "U", "-", "-", EShLangAll }, + { "GetRenderTargetSamplePosition", "V2", "F", "V1", "I", EShLangAll }, + { "GroupMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "GroupMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "InterlockedAdd", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedAdd", "-", "-", "SVM,", "UI,", EShLangPSCS }, + { "InterlockedAnd", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedAnd", "-", "-", "SVM,", "UI,", EShLangPSCS }, + { "InterlockedCompareExchange", "-", "-", "SVM,,,>", "UI,,,", EShLangPSCS }, + { "InterlockedCompareStore", "-", "-", "SVM,,", "UI,,", EShLangPSCS }, + { "InterlockedExchange", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedMax", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedMax", "-", "-", "SVM,", "UI,", EShLangPSCS }, + { "InterlockedMin", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedMin", "-", "-", "SVM,", "UI,", EShLangPSCS }, + { "InterlockedOr", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedOr", "-", "-", "SVM,", "UI,", EShLangPSCS }, + { "InterlockedXor", "-", "-", "SVM,,>", "UI,,", EShLangPSCS }, + { "InterlockedXor", "-", "-", "SVM,", "UI,", EShLangPSCS }, + { "isfinite", nullptr, "B" , "SVM", "F", EShLangAll }, + { "isinf", nullptr, "B" , "SVM", "F", EShLangAll }, + { "isnan", nullptr, "B" , "SVM", "F", EShLangAll }, + { "ldexp", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "length", "S", "F", "V", "F", EShLangAll }, + { "lerp", nullptr, nullptr, "SVM,,", "F,,", EShLangAll }, + { "lit", "V4", "F", "S,,", "F,,", EShLangAll }, + { "log", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "log10", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "log2", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "mad", nullptr, nullptr, "SVM,,", "DFUI,,", EShLangAll }, + { "max", nullptr, nullptr, "SVM,", "FI,", EShLangAll }, + { "min", nullptr, nullptr, "SVM,", "FI,", EShLangAll }, + { "modf", nullptr, nullptr, "SVM,>", "FI,", EShLangAll }, + { "msad4", "V4", "U", "S,V2,V4", "U,,", EShLangAll }, + { "mul", "S", nullptr, "S,S", "FI,", EShLangAll }, + { "mul", "V", nullptr, "S,V", "FI,", EShLangAll }, + { "mul", "M", nullptr, "S,M", "FI,", EShLangAll }, + { "mul", "V", nullptr, "V,S", "FI,", EShLangAll }, + { "mul", "S", nullptr, "V,V", "FI,", EShLangAll }, + { "mul", "#V", nullptr, "V,M", "FI,", EShLangAll }, + { "mul", "M", nullptr, "M,S", "FI,", EShLangAll }, + { "mul", "V", nullptr, "M,#V", "FI,", EShLangAll }, // mat*mat form of mul is handled in createMatTimesMat() - { "noise", "S", "F", "V", "F", EShLangFragmentMask }, - { "normalize", nullptr, nullptr, "V", "F", EShLangAll }, - { "pow", nullptr, nullptr, "SVM,", "F,", EShLangAll }, - // { "printf", "-", "-", "", "", EShLangAll }, TODO: varargs - { "Process2DQuadTessFactorsAvg", "-", "-", "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, - { "Process2DQuadTessFactorsMax", "-", "-", "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, - { "Process2DQuadTessFactorsMin", "-", "-", "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, - { "ProcessIsolineTessFactors", "-", "-", "S,,>,>", "F,,,", EShLangTessControlMask }, - { "ProcessQuadTessFactorsAvg", "-", "-", "V4,S,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, - { "ProcessQuadTessFactorsMax", "-", "-", "V4,S,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, - { "ProcessQuadTessFactorsMin", "-", "-", "V4,S,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, - { "ProcessTriTessFactorsAvg", "-", "-", "V3,S,>V3,>S,>S", "F,,,,", EShLangTessControlMask }, - { "ProcessTriTessFactorsMax", "-", "-", "V3,S,>V3,>S,>S", "F,,,,", EShLangTessControlMask }, - { "ProcessTriTessFactorsMin", "-", "-", "V3,S,>V3,>S,>S", "F,,,,", EShLangTessControlMask }, - { "radians", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "rcp", nullptr, nullptr, "SVM", "FD", EShLangAll }, - { "reflect", nullptr, nullptr, "V,", "F,", EShLangAll }, - { "refract", nullptr, nullptr, "V,V,S", "F,,", EShLangAll }, - { "reversebits", nullptr, nullptr, "SV", "U", EShLangAll }, - { "round", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "rsqrt", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "saturate", nullptr, nullptr , "SVM", "F", EShLangAll }, - { "sign", nullptr, nullptr, "SVM", "FI", EShLangAll }, - { "sin", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "sincos", "-", "-", "SVM,>,>", "F,,", EShLangAll }, - { "sinh", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "smoothstep", nullptr, nullptr, "SVM,,", "F,,", EShLangAll }, - { "sqrt", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "step", nullptr, nullptr, "SVM,", "F,", EShLangAll }, - { "tan", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "tanh", nullptr, nullptr, "SVM", "F", EShLangAll }, - { "tex1D", "V4", "F", "V1,S", "S,F", EShLangFragmentMask }, - { "tex1D", "V4", "F", "V1,S,V1,V1", "S,F,F,F",EShLangFragmentMask }, - { "tex1Dbias", "V4", "F", "V1,V4", "S,F", EShLangFragmentMask }, - { "tex1Dgrad", "V4", "F", "V1,V1,V1,V1","S,F,F,F",EShLangFragmentMask }, - { "tex1Dlod", "V4", "F", "V1,V4", "S,F", EShLangFragmentMask }, - { "tex1Dproj", "V4", "F", "V1,V4", "S,F", EShLangFragmentMask }, - { "tex2D", "V4", "F", "V2,V2", "S,F", EShLangFragmentMask }, - { "tex2D", "V4", "F", "V2,V2,V2,V2","S,F,F,F",EShLangFragmentMask }, - { "tex2Dbias", "V4", "F", "V2,V4", "S,F", EShLangFragmentMask }, - { "tex2Dgrad", "V4", "F", "V2,V2,V2,V2","S,F,F,F",EShLangFragmentMask }, - { "tex2Dlod", "V4", "F", "V2,V4", "S,F", EShLangFragmentMask }, - { "tex2Dproj", "V4", "F", "V2,V4", "S,F", EShLangFragmentMask }, - { "tex3D", "V4", "F", "V3,V3", "S,F", EShLangFragmentMask }, - { "tex3D", "V4", "F", "V3,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, - { "tex3Dbias", "V4", "F", "V3,V4", "S,F", EShLangFragmentMask }, - { "tex3Dgrad", "V4", "F", "V3,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, - { "tex3Dlod", "V4", "F", "V3,V4", "S,F", EShLangFragmentMask }, - { "tex3Dproj", "V4", "F", "V3,V4", "S,F", EShLangFragmentMask }, - { "texCUBE", "V4", "F", "V4,V3", "S,F", EShLangFragmentMask }, - { "texCUBE", "V4", "F", "V4,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, - { "texCUBEbias", "V4", "F", "V4,V4", "S,F", EShLangFragmentMask }, - { "texCUBEgrad", "V4", "F", "V4,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, - { "texCUBElod", "V4", "F", "V4,V4", "S,F", EShLangFragmentMask }, - { "texCUBEproj", "V4", "F", "V4,V4", "S,F", EShLangFragmentMask }, - { "transpose", "^M", nullptr, "M", "F", EShLangAll }, - { "trunc", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "noise", "S", "F", "V", "F", EShLangFragmentMask }, + { "normalize", nullptr, nullptr, "V", "F", EShLangAll }, + { "pow", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + // { "printf", "-", "-", "", "", EShLangAll }, TODO: varargs + { "Process2DQuadTessFactorsAvg", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangTessControlMask }, + { "Process2DQuadTessFactorsMax", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangTessControlMask }, + { "Process2DQuadTessFactorsMin", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangTessControlMask }, + { "ProcessIsolineTessFactors", "-", "-", "S,,>,>", "F,,,", EShLangTessControlMask }, + { "ProcessQuadTessFactorsAvg", "-", "-", "V4,S,>V4,>V2,", "F,,,,", EShLangTessControlMask }, + { "ProcessQuadTessFactorsMax", "-", "-", "V4,S,>V4,>V2,", "F,,,,", EShLangTessControlMask }, + { "ProcessQuadTessFactorsMin", "-", "-", "V4,S,>V4,>V2,", "F,,,,", EShLangTessControlMask }, + { "ProcessTriTessFactorsAvg", "-", "-", "V3,S,>V3,>S,", "F,,,,", EShLangTessControlMask }, + { "ProcessTriTessFactorsMax", "-", "-", "V3,S,>V3,>S,", "F,,,,", EShLangTessControlMask }, + { "ProcessTriTessFactorsMin", "-", "-", "V3,S,>V3,>S,", "F,,,,", EShLangTessControlMask }, + { "radians", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "rcp", nullptr, nullptr, "SVM", "FD", EShLangAll }, + { "reflect", nullptr, nullptr, "V,", "F,", EShLangAll }, + { "refract", nullptr, nullptr, "V,V,S", "F,,", EShLangAll }, + { "reversebits", nullptr, nullptr, "SV", "U", EShLangAll }, + { "round", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "rsqrt", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "saturate", nullptr, nullptr , "SVM", "F", EShLangAll }, + { "sign", nullptr, nullptr, "SVM", "FI", EShLangAll }, + { "sin", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "sincos", "-", "-", "SVM,>,>", "F,,", EShLangAll }, + { "sinh", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "smoothstep", nullptr, nullptr, "SVM,,", "F,,", EShLangAll }, + { "sqrt", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "step", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "tan", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "tanh", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "tex1D", "V4", "F", "V1,S", "S,F", EShLangFragmentMask }, + { "tex1D", "V4", "F", "V1,S,V1,", "S,F,,", EShLangFragmentMask }, + { "tex1Dbias", "V4", "F", "V1,V4", "S,F", EShLangFragmentMask }, + { "tex1Dgrad", "V4", "F", "V1,,,", "S,F,,", EShLangFragmentMask }, + { "tex1Dlod", "V4", "F", "V1,V4", "S,F", EShLangFragmentMask }, + { "tex1Dproj", "V4", "F", "V1,V4", "S,F", EShLangFragmentMask }, + { "tex2D", "V4", "F", "V2,", "S,F", EShLangFragmentMask }, + { "tex2D", "V4", "F", "V2,,,", "S,F,,", EShLangFragmentMask }, + { "tex2Dbias", "V4", "F", "V2,V4", "S,F", EShLangFragmentMask }, + { "tex2Dgrad", "V4", "F", "V2,,,", "S,F,,", EShLangFragmentMask }, + { "tex2Dlod", "V4", "F", "V2,V4", "S,F", EShLangFragmentMask }, + { "tex2Dproj", "V4", "F", "V2,V4", "S,F", EShLangFragmentMask }, + { "tex3D", "V4", "F", "V3,", "S,F", EShLangFragmentMask }, + { "tex3D", "V4", "F", "V3,,,", "S,F,,", EShLangFragmentMask }, + { "tex3Dbias", "V4", "F", "V3,V4", "S,F", EShLangFragmentMask }, + { "tex3Dgrad", "V4", "F", "V3,,,", "S,F,,", EShLangFragmentMask }, + { "tex3Dlod", "V4", "F", "V3,V4", "S,F", EShLangFragmentMask }, + { "tex3Dproj", "V4", "F", "V3,V4", "S,F", EShLangFragmentMask }, + { "texCUBE", "V4", "F", "V4,V3", "S,F", EShLangFragmentMask }, + { "texCUBE", "V4", "F", "V4,V3,,", "S,F,,", EShLangFragmentMask }, + { "texCUBEbias", "V4", "F", "V4,", "S,F", EShLangFragmentMask }, + { "texCUBEgrad", "V4", "F", "V4,V3,,", "S,F,,", EShLangFragmentMask }, + { "texCUBElod", "V4", "F", "V4,", "S,F", EShLangFragmentMask }, + { "texCUBEproj", "V4", "F", "V4,", "S,F", EShLangFragmentMask }, + { "transpose", "^M", nullptr, "M", "F", EShLangAll }, + { "trunc", nullptr, nullptr, "SVM", "F", EShLangAll }, // Texture object methods. Return type can be overridden by shader declaration. - // !O = no offset, O = offset, !A = no array, A = array - { "Sample", /*!O !A*/ "V4", nullptr, "%V,S,V", "FIU,S,F", EShLangFragmentMask }, - { "Sample", /* O !A*/ "V4", nullptr, "%V,S,V,V", "FIU,S,F,I", EShLangFragmentMask }, - { "Sample", /*!O A*/ "V4", nullptr, "@V,S,V", "FIU,S,F", EShLangFragmentMask }, - { "Sample", /* O A*/ "V4", nullptr, "@V,S,V,V", "FIU,S,F,I", EShLangFragmentMask }, + // !O = no offset, O = offset + { "Sample", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangFragmentMask }, + { "Sample", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangFragmentMask }, - { "SampleBias", /*!O !A*/ "V4", nullptr, "%V,S,V,S", "FIU,S,F,F", EShLangFragmentMask }, - { "SampleBias", /* O !A*/ "V4", nullptr, "%V,S,V,S,V", "FIU,S,F,F,I", EShLangFragmentMask }, - { "SampleBias", /*!O A*/ "V4", nullptr, "@V,S,V,S", "FIU,S,F,F", EShLangFragmentMask }, - { "SampleBias", /* O A*/ "V4", nullptr, "@V,S,V,S,V", "FIU,S,F,F,I", EShLangFragmentMask }, + { "SampleBias", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,S,F,", EShLangFragmentMask }, + { "SampleBias", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,S,F,,I", EShLangFragmentMask }, // TODO: FXC accepts int/uint samplers here. unclear what that means. - { "SampleCmp", /*!O !A*/ "S", "F", "%V,S,V,S", "FIU,s,F,F", EShLangFragmentMask }, - { "SampleCmp", /* O !A*/ "S", "F", "%V,S,V,S,V", "FIU,s,F,F,I", EShLangFragmentMask }, - { "SampleCmp", /*!O A*/ "S", "F", "@V,S,V,S", "FIU,s,F,F", EShLangFragmentMask }, - { "SampleCmp", /* O A*/ "S", "F", "@V,S,V,S,V", "FIU,s,F,F,I", EShLangFragmentMask }, + { "SampleCmp", /*!O*/ "S", "F", "%@,S,V,S", "FIU,s,F,", EShLangFragmentMask }, + { "SampleCmp", /* O*/ "S", "F", "%@,S,V,S,V", "FIU,s,F,,I", EShLangFragmentMask }, // TODO: FXC accepts int/uint samplers here. unclear what that means. - { "SampleCmpLevelZero", /*!O !A*/ "S", "F", "%V,S,V,S", "FIU,s,F,F", EShLangFragmentMask }, - { "SampleCmpLevelZero", /* O !A*/ "S", "F", "%V,S,V,S,V", "FIU,s,F,F,I", EShLangFragmentMask }, - { "SampleCmpLevelZero", /*!O A*/ "S", "F", "@V,S,V,S", "FIU,s,F,F", EShLangFragmentMask }, - { "SampleCmpLevelZero", /* O A*/ "S", "F", "@V,S,V,S,V", "FIU,s,F,F,I", EShLangFragmentMask }, + { "SampleCmpLevelZero", /*!O*/ "S", "F", "%@,S,V,S", "FIU,s,F,F", EShLangFragmentMask }, + { "SampleCmpLevelZero", /* O*/ "S", "F", "%@,S,V,S,V", "FIU,s,F,F,I", EShLangFragmentMask }, - { "SampleGrad", /*!O !A*/ "V4", nullptr, "%V,S,V,V,V", "FIU,S,F,F,F", EShLangAll }, - { "SampleGrad", /* O !A*/ "V4", nullptr, "%V,S,V,V,V,V", "FIU,S,F,F,F,I", EShLangAll }, - { "SampleGrad", /*!O A*/ "V4", nullptr, "@V,S,V,V,V", "FIU,S,F,F,F", EShLangAll }, - { "SampleGrad", /* O A*/ "V4", nullptr, "@V,S,V,V,V,V", "FIU,S,F,F,F,I", EShLangAll }, + { "SampleGrad", /*!O*/ "V4", nullptr, "%@,S,V,,", "FIU,S,F,,", EShLangAll }, + { "SampleGrad", /* O*/ "V4", nullptr, "%@,S,V,,,", "FIU,S,F,,,I", EShLangAll }, - { "SampleLevel", /*!O !A*/ "V4", nullptr, "%V,S,V,S", "FIU,S,F,F", EShLangAll }, - { "SampleLevel", /* O !A*/ "V4", nullptr, "%V,S,V,S,V", "FIU,S,F,F,I", EShLangAll }, - { "SampleLevel", /*!O A*/ "V4", nullptr, "@V,S,V,S", "FIU,S,F,F", EShLangAll }, - { "SampleLevel", /* O A*/ "V4", nullptr, "@V,S,V,S,V", "FIU,S,F,F,I", EShLangAll }, + { "SampleLevel", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,S,F,", EShLangAll }, + { "SampleLevel", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,S,F,,I", EShLangAll }, - { "Load", /*!O !A*/ "V4", nullptr, "%V,V", "FIU,I", EShLangAll }, - { "Load", /*!O A*/ "V4", nullptr, "@V,V", "FIU,I", EShLangAll }, - { "Load", /* O !A*/ "V4", nullptr, "%V,V,V", "FIU,I,I", EShLangAll }, - { "Load", /* O A*/ "V4", nullptr, "@V,V,V", "FIU,I,I", EShLangAll }, + { "Load", /*!O*/ "V4", nullptr, "%@,V", "FIU,I", EShLangAll }, + { "Load", /* O*/ "V4", nullptr, "%@,V,V", "FIU,I,I", EShLangAll }, // TODO: MS variants of Load - // { "Load", /* +sampleidex*/ "V4", nullptr, "$V,V,S", "FIU,I,I", EShLangAll }, - // { "Load", /* +samplindex, offset*/ "V4", nullptr, "$V,V,S,V", "FIU,I,I,I", EShLangAll }, + // { "Load", /* +sampleidex*/ "V4", nullptr, "$V,V,S", "FIU,I,I", EShLangAll }, + // { "Load", /* +samplindex, offset*/ "V4", nullptr, "$V,V,S,V", "FIU,I,I,I", EShLangAll }, + + { "Gather", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangVSPSGS }, + { "Gather", /* O*/ "V4", nullptr, "%@,S,V,V", "FIU,S,F,I", EShLangVSPSGS }, // table of overloads from: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509693(v=vs.85).aspx // // UINT Width // UINT MipLevel, UINT Width, UINT NumberOfLevels - { "GetDimensions", /* 1D */ "-", "-", "%V1,>S", "FUI,U", EShLangAll }, - { "GetDimensions", /* 1D */ "-", "-", "%V1,>S", "FUI,F", EShLangAll }, - { "GetDimensions", /* 1D */ "-", "-", "%V1,S,>S,>S", "FUI,U,U,U", EShLangAll }, - { "GetDimensions", /* 1D */ "-", "-", "%V1,S,>S,>S", "FUI,U,F,F", EShLangAll }, + { "GetDimensions", /* 1D */ "-", "-", "%1,>S", "FUI,U", EShLangAll }, + { "GetDimensions", /* 1D */ "-", "-", "%1,>S", "FUI,F", EShLangAll }, + { "GetDimensions", /* 1D */ "-", "-", "%1,S,>S,", "FUI,U,,", EShLangAll }, + { "GetDimensions", /* 1D */ "-", "-", "%1,S,>S,", "FUI,U,F,", EShLangAll }, // UINT Width, UINT Elements // UINT MipLevel, UINT Width, UINT Elements, UINT NumberOfLevels - { "GetDimensions", /* 1DArray */ "-", "-", "@V1,>S,>S", "FUI,U,U", EShLangAll }, - { "GetDimensions", /* 1DArray */ "-", "-", "@V1,>S,>S", "FUI,F,F", EShLangAll }, - { "GetDimensions", /* 1DArray */ "-", "-", "@V1,S,>S,>S,>S", "FUI,U,U,U,U", EShLangAll }, - { "GetDimensions", /* 1DArray */ "-", "-", "@V1,S,>S,>S,>S", "FUI,U,F,F,F", EShLangAll }, + { "GetDimensions", /* 1DArray */ "-", "-", "@1,>S,", "FUI,U,", EShLangAll }, + { "GetDimensions", /* 1DArray */ "-", "-", "@1,>S,", "FUI,F,", EShLangAll }, + { "GetDimensions", /* 1DArray */ "-", "-", "@1,S,>S,,", "FUI,U,,,", EShLangAll }, + { "GetDimensions", /* 1DArray */ "-", "-", "@1,S,>S,,", "FUI,U,F,,", EShLangAll }, // UINT Width, UINT Height // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels - { "GetDimensions", /* 2D */ "-", "-", "%V2,>S,>S", "FUI,U,U", EShLangAll }, - { "GetDimensions", /* 2D */ "-", "-", "%V2,>S,>S", "FUI,F,F", EShLangAll }, - { "GetDimensions", /* 2D */ "-", "-", "%V2,S,>S,>S,>S", "FUI,U,U,U,U", EShLangAll }, - { "GetDimensions", /* 2D */ "-", "-", "%V2,S,>S,>S,>S", "FUI,U,F,F,F", EShLangAll }, + { "GetDimensions", /* 2D */ "-", "-", "%2,>S,", "FUI,U,", EShLangAll }, + { "GetDimensions", /* 2D */ "-", "-", "%2,>S,", "FUI,F,", EShLangAll }, + { "GetDimensions", /* 2D */ "-", "-", "%2,S,>S,,", "FUI,U,,,", EShLangAll }, + { "GetDimensions", /* 2D */ "-", "-", "%2,S,>S,,", "FUI,U,F,,", EShLangAll }, // UINT Width, UINT Height, UINT Elements // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels - { "GetDimensions", /* 2DArray */ "-", "-", "@V2,>S,>S,>S", "FUI,U,U,U", EShLangAll }, - { "GetDimensions", /* 2DArray */ "-", "-", "@V2,>S,>S,>S", "FUI,F,F,F", EShLangAll }, - { "GetDimensions", /* 2DArray */ "-", "-", "@V2,S,>S,>S,>S,>S", "FUI,U,U,U,U,U", EShLangAll }, - { "GetDimensions", /* 2DArray */ "-", "-", "@V2,S,>S,>S,>S,>S", "FUI,U,F,F,F,F", EShLangAll }, + { "GetDimensions", /* 2DArray */ "-", "-", "@2,>S,,", "FUI,U,,", EShLangAll }, + { "GetDimensions", /* 2DArray */ "-", "-", "@2,>S,,", "FUI,F,F,F", EShLangAll }, + { "GetDimensions", /* 2DArray */ "-", "-", "@2,S,>S,,,", "FUI,U,,,,", EShLangAll }, + { "GetDimensions", /* 2DArray */ "-", "-", "@2,S,>S,,,", "FUI,U,F,,,", EShLangAll }, // UINT Width, UINT Height, UINT Depth // UINT MipLevel, UINT Width, UINT Height, UINT Depth, UINT NumberOfLevels - { "GetDimensions", /* 3D */ "-", "-", "%V3,>S,>S,>S", "FUI,U,U,U", EShLangAll }, - { "GetDimensions", /* 3D */ "-", "-", "%V3,>S,>S,>S", "FUI,F,F,F", EShLangAll }, - { "GetDimensions", /* 3D */ "-", "-", "%V3,S,>S,>S,>S,>S", "FUI,U,U,U,U,U", EShLangAll }, - { "GetDimensions", /* 3D */ "-", "-", "%V3,S,>S,>S,>S,>S", "FUI,U,F,F,F,F", EShLangAll }, + { "GetDimensions", /* 3D */ "-", "-", "%3,>S,,", "FUI,U,,", EShLangAll }, + { "GetDimensions", /* 3D */ "-", "-", "%3,>S,,", "FUI,F,,", EShLangAll }, + { "GetDimensions", /* 3D */ "-", "-", "%3,S,>S,,,", "FUI,U,,,,", EShLangAll }, + { "GetDimensions", /* 3D */ "-", "-", "%3,S,>S,,,", "FUI,U,F,,,", EShLangAll }, // UINT Width, UINT Height // UINT MipLevel, UINT Width, UINT Height, UINT NumberOfLevels - { "GetDimensions", /* Cube */ "-", "-", "%V4,>S,>S", "FUI,U,U", EShLangAll }, - { "GetDimensions", /* Cube */ "-", "-", "%V4,>S,>S", "FUI,F,F", EShLangAll }, - { "GetDimensions", /* Cube */ "-", "-", "%V4,S,>S,>S,>S", "FUI,U,U,U,U", EShLangAll }, - { "GetDimensions", /* Cube */ "-", "-", "%V4,S,>S,>S,>S", "FUI,U,F,F,F", EShLangAll }, + { "GetDimensions", /* Cube */ "-", "-", "%4,>S,", "FUI,U,", EShLangAll }, + { "GetDimensions", /* Cube */ "-", "-", "%4,>S,", "FUI,F,", EShLangAll }, + { "GetDimensions", /* Cube */ "-", "-", "%4,S,>S,,", "FUI,U,,,", EShLangAll }, + { "GetDimensions", /* Cube */ "-", "-", "%4,S,>S,,", "FUI,U,F,,", EShLangAll }, // UINT Width, UINT Height, UINT Elements // UINT MipLevel, UINT Width, UINT Height, UINT Elements, UINT NumberOfLevels - { "GetDimensions", /* CubeArray */ "-", "-", "@V4,>S,>S,>S", "FUI,U,U,U", EShLangAll }, - { "GetDimensions", /* CubeArray */ "-", "-", "@V4,>S,>S,>S", "FUI,F,F,F", EShLangAll }, - { "GetDimensions", /* CubeArray */ "-", "-", "@V4,S,>S,>S,>S,>S", "FUI,U,U,U,U,U", EShLangAll }, - { "GetDimensions", /* CubeArray */ "-", "-", "@V4,S,>S,>S,>S,>S", "FUI,U,F,F,F,F", EShLangAll }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,>S,,", "FUI,U,,", EShLangAll }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,>S,,", "FUI,F,,", EShLangAll }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,S,>S,,,", "FUI,U,,,,", EShLangAll }, + { "GetDimensions", /* CubeArray */ "-", "-", "@4,S,>S,,,", "FUI,U,F,,,", EShLangAll }, // TODO: GetDimensions for Texture2DMS, Texture2DMSArray // UINT Width, UINT Height, UINT Samples @@ -709,6 +734,9 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c s.append(intrinsic.name); // intrinsic name s.append("("); // open paren + const char* prevArgOrder = nullptr; + const char* prevArgType = nullptr; + // Append argument types, if any. for (int arg = 0; ; ++arg) { const char* nthArgOrder(NthArg(argOrder, arg)); @@ -720,6 +748,18 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c // cube textures use vec3 coordinates int argDim0 = isTexture && arg > 0 ? std::min(dim0, 3) : dim0; + s.append(arg > 0 ? ", ": ""); // comma separator if needed + + const char* orderBegin = nthArgOrder; + nthArgOrder = IoParam(s, nthArgOrder); + + // Comma means use the previous argument order and type. + HandleRepeatArg(nthArgOrder, prevArgOrder, orderBegin); + HandleRepeatArg(nthArgType, prevArgType, nthArgType); + + // In case the repeated arg has its own I/O marker + nthArgOrder = IoParam(s, nthArgOrder); + // arrayed textures have one extra coordinate dimension if (isArrayed && arg == coordArg) argDim0++; @@ -732,34 +772,20 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c if (isTexture && argDim0 == 1 && arg > 0 && *nthArgOrder == 'V') nthArgOrder = "S"; - s.append(arg > 0 ? ", ": ""); // comma separator if needed - - if (*nthArgOrder == '>') { // output params - ++nthArgOrder; - s.append("out "); - } else if (*nthArgOrder == '<') { // input params - ++nthArgOrder; - s.append("in "); - } - - // Comma means use the 1st argument order and type. - if (*nthArgOrder == ',' || *nthArgOrder == '\0') nthArgOrder = argOrder; - if (*nthArgType == ',' || *nthArgType == '\0') nthArgType = argType; - AppendTypeName(s, nthArgOrder, nthArgType, argDim0, dim1); // Add arguments } s.append(");\n"); // close paren and trailing semicolon - } - } - } + } // dim 1 loop + } // dim 0 loop + } // arg type loop // skip over special characters - if (isTexture) + if (isTexture && isalpha(argOrder[1])) ++argOrder; if (isdigit(argOrder[1])) ++argOrder; - } + } // arg order loop if (intrinsic.stage == EShLangAll) // common builtins are only added once. break; @@ -946,6 +972,7 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil symbolTable.relateToOperator("SampleLevel", EOpMethodSampleLevel); symbolTable.relateToOperator("Load", EOpMethodLoad); symbolTable.relateToOperator("GetDimensions", EOpMethodGetDimensions); + symbolTable.relateToOperator("Gather", EOpMethodGather); } //