HLSL: add offset Sample() form and arrayed texture support

This commit is contained in:
LoopDawg 2016-07-12 14:45:05 -06:00
Родитель f02bea288f
Коммит 92aff54632
9 изменённых файлов: 1566 добавлений и 60 удалений

Просмотреть файл

@ -0,0 +1,446 @@
hlsl.sample.basicarraydx10.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:27 Sequence
0:27 move second child to first child (temp 4-component vector of float)
0:27 'txval10' (temp 4-component vector of float)
0:27 texture (global 4-component vector of float)
0:27 Construct combined texture-sampler (temp sampler1DArray)
0:27 'g_tTex1df4' (uniform texture1DArray)
0:27 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:28 Sequence
0:28 move second child to first child (temp 4-component vector of int)
0:28 'txval11' (temp 4-component vector of int)
0:28 texture (global 4-component vector of int)
0:28 Construct combined texture-sampler (temp isampler1DArray)
0:28 'g_tTex1di4' (uniform itexture1DArray)
0:28 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.200000
0:? 0.300000
0:29 Sequence
0:29 move second child to first child (temp 4-component vector of uint)
0:29 'txval12' (temp 4-component vector of uint)
0:29 texture (global 4-component vector of uint)
0:29 Construct combined texture-sampler (temp usampler1DArray)
0:29 'g_tTex1du4' (uniform utexture1DArray)
0:29 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:31 Sequence
0:31 move second child to first child (temp 4-component vector of float)
0:31 'txval20' (temp 4-component vector of float)
0:31 texture (global 4-component vector of float)
0:31 Construct combined texture-sampler (temp sampler2DArray)
0:31 'g_tTex2df4' (uniform texture2DArray)
0:31 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:? 0.300000
0:32 Sequence
0:32 move second child to first child (temp 4-component vector of int)
0:32 'txval21' (temp 4-component vector of int)
0:32 texture (global 4-component vector of int)
0:32 Construct combined texture-sampler (temp isampler2DArray)
0:32 'g_tTex2di4' (uniform itexture2DArray)
0:32 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:? 0.500000
0:33 Sequence
0:33 move second child to first child (temp 4-component vector of uint)
0:33 'txval22' (temp 4-component vector of uint)
0:33 texture (global 4-component vector of uint)
0:33 Construct combined texture-sampler (temp usampler2DArray)
0:33 'g_tTex2du4' (uniform utexture2DArray)
0:33 '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 texture (global 4-component vector of float)
0:35 Construct combined texture-sampler (temp samplerCubeArray)
0:35 'g_tTexcdf4' (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 texture (global 4-component vector of int)
0:36 Construct combined texture-sampler (temp isamplerCubeArray)
0:36 'g_tTexcdi4' (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 texture (global 4-component vector of uint)
0:37 Construct combined texture-sampler (temp usamplerCubeArray)
0:37 'g_tTexcdu4' (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_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)
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:27 Sequence
0:27 move second child to first child (temp 4-component vector of float)
0:27 'txval10' (temp 4-component vector of float)
0:27 texture (global 4-component vector of float)
0:27 Construct combined texture-sampler (temp sampler1DArray)
0:27 'g_tTex1df4' (uniform texture1DArray)
0:27 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:28 Sequence
0:28 move second child to first child (temp 4-component vector of int)
0:28 'txval11' (temp 4-component vector of int)
0:28 texture (global 4-component vector of int)
0:28 Construct combined texture-sampler (temp isampler1DArray)
0:28 'g_tTex1di4' (uniform itexture1DArray)
0:28 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.200000
0:? 0.300000
0:29 Sequence
0:29 move second child to first child (temp 4-component vector of uint)
0:29 'txval12' (temp 4-component vector of uint)
0:29 texture (global 4-component vector of uint)
0:29 Construct combined texture-sampler (temp usampler1DArray)
0:29 'g_tTex1du4' (uniform utexture1DArray)
0:29 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:31 Sequence
0:31 move second child to first child (temp 4-component vector of float)
0:31 'txval20' (temp 4-component vector of float)
0:31 texture (global 4-component vector of float)
0:31 Construct combined texture-sampler (temp sampler2DArray)
0:31 'g_tTex2df4' (uniform texture2DArray)
0:31 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:? 0.300000
0:32 Sequence
0:32 move second child to first child (temp 4-component vector of int)
0:32 'txval21' (temp 4-component vector of int)
0:32 texture (global 4-component vector of int)
0:32 Construct combined texture-sampler (temp isampler2DArray)
0:32 'g_tTex2di4' (uniform itexture2DArray)
0:32 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:? 0.500000
0:33 Sequence
0:33 move second child to first child (temp 4-component vector of uint)
0:33 'txval22' (temp 4-component vector of uint)
0:33 texture (global 4-component vector of uint)
0:33 Construct combined texture-sampler (temp usampler2DArray)
0:33 'g_tTex2du4' (uniform utexture2DArray)
0:33 '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 texture (global 4-component vector of float)
0:35 Construct combined texture-sampler (temp samplerCubeArray)
0:35 'g_tTexcdf4' (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 texture (global 4-component vector of int)
0:36 Construct combined texture-sampler (temp isamplerCubeArray)
0:36 'g_tTexcdi4' (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 texture (global 4-component vector of uint)
0:37 Construct combined texture-sampler (temp usamplerCubeArray)
0:37 'g_tTexcdu4' (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_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)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 129
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 "txval10"
Name 12 "g_tTex1df4"
Name 16 "g_sSamp"
Name 28 "txval11"
Name 31 "g_tTex1di4"
Name 42 "txval12"
Name 45 "g_tTex1du4"
Name 53 "txval20"
Name 56 "g_tTex2df4"
Name 64 "txval21"
Name 67 "g_tTex2di4"
Name 75 "txval22"
Name 78 "g_tTex2du4"
Name 87 "txval40"
Name 90 "g_tTexcdf4"
Name 97 "txval41"
Name 100 "g_tTexcdi4"
Name 107 "txval42"
Name 110 "g_tTexcdu4"
Name 120 "PS_OUTPUT"
MemberName 120(PS_OUTPUT) 0 "Color"
MemberName 120(PS_OUTPUT) 1 "Depth"
Name 122 "psout"
Name 128 "g_tTex1df4a"
Decorate 12(g_tTex1df4) DescriptorSet 0
Decorate 16(g_sSamp) DescriptorSet 0
Decorate 31(g_tTex1di4) DescriptorSet 0
Decorate 45(g_tTex1du4) DescriptorSet 0
Decorate 56(g_tTex2df4) DescriptorSet 0
Decorate 67(g_tTex2di4) DescriptorSet 0
Decorate 78(g_tTex2du4) DescriptorSet 0
Decorate 90(g_tTexcdf4) DescriptorSet 0
Decorate 100(g_tTexcdi4) DescriptorSet 0
Decorate 110(g_tTexcdu4) DescriptorSet 0
MemberDecorate 120(PS_OUTPUT) 1 BuiltIn FragDepth
Decorate 128(g_tTex1df4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
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
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
25: TypeInt 32 1
26: TypeVector 25(int) 4
27: TypePointer Function 26(ivec4)
29: TypeImage 25(int) 1D array sampled format:Unknown
30: TypePointer UniformConstant 29
31(g_tTex1di4): 30(ptr) Variable UniformConstant
34: TypeSampledImage 29
36: 6(float) Constant 1050253722
37: 20(fvec2) ConstantComposite 22 36
39: TypeInt 32 0
40: TypeVector 39(int) 4
41: TypePointer Function 40(ivec4)
43: TypeImage 39(int) 1D array sampled format:Unknown
44: TypePointer UniformConstant 43
45(g_tTex1du4): 44(ptr) Variable UniformConstant
48: TypeSampledImage 43
50: 6(float) Constant 1053609165
51: 20(fvec2) ConstantComposite 36 50
54: TypeImage 6(float) 2D array sampled format:Unknown
55: TypePointer UniformConstant 54
56(g_tTex2df4): 55(ptr) Variable UniformConstant
59: TypeSampledImage 54
61: TypeVector 6(float) 3
62: 61(fvec3) ConstantComposite 21 22 36
65: TypeImage 25(int) 2D array sampled format:Unknown
66: TypePointer UniformConstant 65
67(g_tTex2di4): 66(ptr) Variable UniformConstant
70: TypeSampledImage 65
72: 6(float) Constant 1056964608
73: 61(fvec3) ConstantComposite 36 50 72
76: TypeImage 39(int) 2D array sampled format:Unknown
77: TypePointer UniformConstant 76
78(g_tTex2du4): 77(ptr) Variable UniformConstant
81: TypeSampledImage 76
83: 6(float) Constant 1058642330
84: 6(float) Constant 1060320051
85: 61(fvec3) ConstantComposite 72 83 84
88: TypeImage 6(float) Cube array sampled format:Unknown
89: TypePointer UniformConstant 88
90(g_tTexcdf4): 89(ptr) Variable UniformConstant
93: TypeSampledImage 88
95: 7(fvec4) ConstantComposite 21 22 36 50
98: TypeImage 25(int) Cube array sampled format:Unknown
99: TypePointer UniformConstant 98
100(g_tTexcdi4): 99(ptr) Variable UniformConstant
103: TypeSampledImage 98
105: 7(fvec4) ConstantComposite 50 72 83 84
108: TypeImage 39(int) Cube array sampled format:Unknown
109: TypePointer UniformConstant 108
110(g_tTexcdu4): 109(ptr) Variable UniformConstant
113: TypeSampledImage 108
115: 6(float) Constant 1061997773
116: 6(float) Constant 1063675494
117: 6(float) Constant 1065353216
118: 7(fvec4) ConstantComposite 84 115 116 117
120(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
121: TypePointer Function 120(PS_OUTPUT)
123: 25(int) Constant 1
124: TypePointer Function 6(float)
128(g_tTex1df4a): 11(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(txval10): 8(ptr) Variable Function
28(txval11): 27(ptr) Variable Function
42(txval12): 41(ptr) Variable Function
53(txval20): 8(ptr) Variable Function
64(txval21): 27(ptr) Variable Function
75(txval22): 41(ptr) Variable Function
87(txval40): 8(ptr) Variable Function
97(txval41): 27(ptr) Variable Function
107(txval42): 41(ptr) Variable Function
122(psout): 121(ptr) Variable Function
13: 10 Load 12(g_tTex1df4)
17: 14 Load 16(g_sSamp)
19: 18 SampledImage 13 17
24: 7(fvec4) ImageSampleImplicitLod 19 23
Store 9(txval10) 24
32: 29 Load 31(g_tTex1di4)
33: 14 Load 16(g_sSamp)
35: 34 SampledImage 32 33
38: 26(ivec4) ImageSampleImplicitLod 35 37
Store 28(txval11) 38
46: 43 Load 45(g_tTex1du4)
47: 14 Load 16(g_sSamp)
49: 48 SampledImage 46 47
52: 40(ivec4) ImageSampleImplicitLod 49 51
Store 42(txval12) 52
57: 54 Load 56(g_tTex2df4)
58: 14 Load 16(g_sSamp)
60: 59 SampledImage 57 58
63: 7(fvec4) ImageSampleImplicitLod 60 62
Store 53(txval20) 63
68: 65 Load 67(g_tTex2di4)
69: 14 Load 16(g_sSamp)
71: 70 SampledImage 68 69
74: 26(ivec4) ImageSampleImplicitLod 71 73
Store 64(txval21) 74
79: 76 Load 78(g_tTex2du4)
80: 14 Load 16(g_sSamp)
82: 81 SampledImage 79 80
86: 40(ivec4) ImageSampleImplicitLod 82 85
Store 75(txval22) 86
91: 88 Load 90(g_tTexcdf4)
92: 14 Load 16(g_sSamp)
94: 93 SampledImage 91 92
96: 7(fvec4) ImageSampleImplicitLod 94 95
Store 87(txval40) 96
101: 98 Load 100(g_tTexcdi4)
102: 14 Load 16(g_sSamp)
104: 103 SampledImage 101 102
106: 26(ivec4) ImageSampleImplicitLod 104 105
Store 97(txval41) 106
111: 108 Load 110(g_tTexcdu4)
112: 14 Load 16(g_sSamp)
114: 113 SampledImage 111 112
119: 40(ivec4) ImageSampleImplicitLod 114 118
Store 107(txval42) 119
125: 124(ptr) AccessChain 122(psout) 123
Store 125 117
126:120(PS_OUTPUT) Load 122(psout)
ReturnValue 126
FunctionEnd

Просмотреть файл

@ -0,0 +1,358 @@
hlsl.sample.offsetarraydx10.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:38 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:20 Function Parameters:
0:? Sequence
0:23 Sequence
0:23 move second child to first child (temp 4-component vector of float)
0:23 'txval10' (temp 4-component vector of float)
0:23 textureOffset (global 4-component vector of float)
0:23 Construct combined texture-sampler (temp sampler1DArray)
0:23 'g_tTex1df4' (uniform texture1DArray)
0:23 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:23 Constant:
0:23 0 (const int)
0:24 Sequence
0:24 move second child to first child (temp 4-component vector of int)
0:24 'txval11' (temp 4-component vector of int)
0:24 textureOffset (global 4-component vector of int)
0:24 Construct combined texture-sampler (temp isampler1DArray)
0:24 'g_tTex1di4' (uniform itexture1DArray)
0:24 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.200000
0:? 0.300000
0:24 Constant:
0:24 1 (const int)
0:25 Sequence
0:25 move second child to first child (temp 4-component vector of uint)
0:25 'txval12' (temp 4-component vector of uint)
0:25 textureOffset (global 4-component vector of uint)
0:25 Construct combined texture-sampler (temp usampler1DArray)
0:25 'g_tTex1du4' (uniform utexture1DArray)
0:25 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:25 Constant:
0:25 2 (const int)
0:27 Sequence
0:27 move second child to first child (temp 4-component vector of float)
0:27 'txval20' (temp 4-component vector of float)
0:27 textureOffset (global 4-component vector of float)
0:27 Construct combined texture-sampler (temp sampler2DArray)
0:27 'g_tTex2df4' (uniform texture2DArray)
0:27 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:? 0.300000
0:? Constant:
0:? 0 (const int)
0:? 0 (const int)
0:28 Sequence
0:28 move second child to first child (temp 4-component vector of int)
0:28 'txval21' (temp 4-component vector of int)
0:28 textureOffset (global 4-component vector of int)
0:28 Construct combined texture-sampler (temp isampler2DArray)
0:28 'g_tTex2di4' (uniform itexture2DArray)
0:28 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:? 0.500000
0:? Constant:
0:? 0 (const int)
0:? 0 (const int)
0:29 Sequence
0:29 move second child to first child (temp 4-component vector of uint)
0:29 'txval22' (temp 4-component vector of uint)
0:29 textureOffset (global 4-component vector of uint)
0:29 Construct combined texture-sampler (temp usampler2DArray)
0:29 'g_tTex2du4' (uniform utexture2DArray)
0:29 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.500000
0:? 0.600000
0:? 0.700000
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:34 move second child to first child (temp float)
0:34 Depth: direct index for structure (temp float FragDepth)
0:34 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:34 Constant:
0:34 1 (const int)
0:34 Constant:
0:34 1.000000
0:36 Branch: Return with expression
0:36 '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:38 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:20 Function Parameters:
0:? Sequence
0:23 Sequence
0:23 move second child to first child (temp 4-component vector of float)
0:23 'txval10' (temp 4-component vector of float)
0:23 textureOffset (global 4-component vector of float)
0:23 Construct combined texture-sampler (temp sampler1DArray)
0:23 'g_tTex1df4' (uniform texture1DArray)
0:23 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:23 Constant:
0:23 0 (const int)
0:24 Sequence
0:24 move second child to first child (temp 4-component vector of int)
0:24 'txval11' (temp 4-component vector of int)
0:24 textureOffset (global 4-component vector of int)
0:24 Construct combined texture-sampler (temp isampler1DArray)
0:24 'g_tTex1di4' (uniform itexture1DArray)
0:24 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.200000
0:? 0.300000
0:24 Constant:
0:24 1 (const int)
0:25 Sequence
0:25 move second child to first child (temp 4-component vector of uint)
0:25 'txval12' (temp 4-component vector of uint)
0:25 textureOffset (global 4-component vector of uint)
0:25 Construct combined texture-sampler (temp usampler1DArray)
0:25 'g_tTex1du4' (uniform utexture1DArray)
0:25 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:25 Constant:
0:25 2 (const int)
0:27 Sequence
0:27 move second child to first child (temp 4-component vector of float)
0:27 'txval20' (temp 4-component vector of float)
0:27 textureOffset (global 4-component vector of float)
0:27 Construct combined texture-sampler (temp sampler2DArray)
0:27 'g_tTex2df4' (uniform texture2DArray)
0:27 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:? 0.300000
0:? Constant:
0:? 0 (const int)
0:? 0 (const int)
0:28 Sequence
0:28 move second child to first child (temp 4-component vector of int)
0:28 'txval21' (temp 4-component vector of int)
0:28 textureOffset (global 4-component vector of int)
0:28 Construct combined texture-sampler (temp isampler2DArray)
0:28 'g_tTex2di4' (uniform itexture2DArray)
0:28 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:? 0.500000
0:? Constant:
0:? 0 (const int)
0:? 0 (const int)
0:29 Sequence
0:29 move second child to first child (temp 4-component vector of uint)
0:29 'txval22' (temp 4-component vector of uint)
0:29 textureOffset (global 4-component vector of uint)
0:29 Construct combined texture-sampler (temp usampler2DArray)
0:29 'g_tTex2du4' (uniform utexture2DArray)
0:29 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.500000
0:? 0.600000
0:? 0.700000
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:34 move second child to first child (temp float)
0:34 Depth: direct index for structure (temp float FragDepth)
0:34 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:34 Constant:
0:34 1 (const int)
0:34 Constant:
0:34 1.000000
0:36 Branch: Return with expression
0:36 '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 102
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 "txval10"
Name 12 "g_tTex1df4"
Name 16 "g_sSamp"
Name 29 "txval11"
Name 32 "g_tTex1di4"
Name 44 "txval12"
Name 47 "g_tTex1du4"
Name 56 "txval20"
Name 59 "g_tTex2df4"
Name 69 "txval21"
Name 72 "g_tTex2di4"
Name 80 "txval22"
Name 83 "g_tTex2du4"
Name 93 "PS_OUTPUT"
MemberName 93(PS_OUTPUT) 0 "Color"
MemberName 93(PS_OUTPUT) 1 "Depth"
Name 95 "psout"
Name 101 "g_tTex1df4a"
Decorate 12(g_tTex1df4) DescriptorSet 0
Decorate 16(g_sSamp) DescriptorSet 0
Decorate 32(g_tTex1di4) DescriptorSet 0
Decorate 47(g_tTex1du4) DescriptorSet 0
Decorate 59(g_tTex2df4) DescriptorSet 0
Decorate 72(g_tTex2di4) DescriptorSet 0
Decorate 83(g_tTex2du4) DescriptorSet 0
MemberDecorate 93(PS_OUTPUT) 1 BuiltIn FragDepth
Decorate 101(g_tTex1df4a) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
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
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) 1D array sampled format:Unknown
31: TypePointer UniformConstant 30
32(g_tTex1di4): 31(ptr) Variable UniformConstant
35: TypeSampledImage 30
37: 6(float) Constant 1050253722
38: 20(fvec2) ConstantComposite 22 37
39: 24(int) Constant 1
41: TypeInt 32 0
42: TypeVector 41(int) 4
43: TypePointer Function 42(ivec4)
45: TypeImage 41(int) 1D array sampled format:Unknown
46: TypePointer UniformConstant 45
47(g_tTex1du4): 46(ptr) Variable UniformConstant
50: TypeSampledImage 45
52: 6(float) Constant 1053609165
53: 20(fvec2) ConstantComposite 37 52
54: 24(int) Constant 2
57: TypeImage 6(float) 2D array sampled format:Unknown
58: TypePointer UniformConstant 57
59(g_tTex2df4): 58(ptr) Variable UniformConstant
62: TypeSampledImage 57
64: TypeVector 6(float) 3
65: 64(fvec3) ConstantComposite 21 22 37
66: TypeVector 24(int) 2
67: 66(ivec2) ConstantComposite 25 25
70: TypeImage 24(int) 2D array sampled format:Unknown
71: TypePointer UniformConstant 70
72(g_tTex2di4): 71(ptr) Variable UniformConstant
75: TypeSampledImage 70
77: 6(float) Constant 1056964608
78: 64(fvec3) ConstantComposite 37 52 77
81: TypeImage 41(int) 2D array sampled format:Unknown
82: TypePointer UniformConstant 81
83(g_tTex2du4): 82(ptr) Variable UniformConstant
86: TypeSampledImage 81
88: 6(float) Constant 1058642330
89: 6(float) Constant 1060320051
90: 64(fvec3) ConstantComposite 77 88 89
91: 66(ivec2) ConstantComposite 25 39
93(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
94: TypePointer Function 93(PS_OUTPUT)
96: 6(float) Constant 1065353216
97: TypePointer Function 6(float)
101(g_tTex1df4a): 11(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(txval10): 8(ptr) Variable Function
29(txval11): 28(ptr) Variable Function
44(txval12): 43(ptr) Variable Function
56(txval20): 8(ptr) Variable Function
69(txval21): 28(ptr) Variable Function
80(txval22): 43(ptr) Variable Function
95(psout): 94(ptr) Variable Function
13: 10 Load 12(g_tTex1df4)
17: 14 Load 16(g_sSamp)
19: 18 SampledImage 13 17
26: 7(fvec4) ImageSampleImplicitLod 19 23 ConstOffset 25
Store 9(txval10) 26
33: 30 Load 32(g_tTex1di4)
34: 14 Load 16(g_sSamp)
36: 35 SampledImage 33 34
40: 27(ivec4) ImageSampleImplicitLod 36 38 ConstOffset 39
Store 29(txval11) 40
48: 45 Load 47(g_tTex1du4)
49: 14 Load 16(g_sSamp)
51: 50 SampledImage 48 49
55: 42(ivec4) ImageSampleImplicitLod 51 53 ConstOffset 54
Store 44(txval12) 55
60: 57 Load 59(g_tTex2df4)
61: 14 Load 16(g_sSamp)
63: 62 SampledImage 60 61
68: 7(fvec4) ImageSampleImplicitLod 63 65 ConstOffset 67
Store 56(txval20) 68
73: 70 Load 72(g_tTex2di4)
74: 14 Load 16(g_sSamp)
76: 75 SampledImage 73 74
79: 27(ivec4) ImageSampleImplicitLod 76 78 ConstOffset 67
Store 69(txval21) 79
84: 81 Load 83(g_tTex2du4)
85: 14 Load 16(g_sSamp)
87: 86 SampledImage 84 85
92: 42(ivec4) ImageSampleImplicitLod 87 90 ConstOffset 91
Store 80(txval22) 92
98: 97(ptr) AccessChain 95(psout) 39
Store 98 96
99:93(PS_OUTPUT) Load 95(psout)
ReturnValue 99
FunctionEnd

Просмотреть файл

@ -0,0 +1,509 @@
hlsl.sample.offsetdx10.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:50 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:28 Function Parameters:
0:? Sequence
0:31 Sequence
0:31 move second child to first child (temp 4-component vector of float)
0:31 'txval10' (temp 4-component vector of float)
0:31 textureOffset (global 4-component vector of float)
0:31 Construct combined texture-sampler (temp sampler1D)
0:31 'g_tTex1df4' (uniform texture1D)
0:31 'g_sSamp' (uniform sampler)
0:31 Constant:
0:31 0.100000
0:31 Constant:
0:31 1 (const int)
0:32 Sequence
0:32 move second child to first child (temp 4-component vector of int)
0:32 'txval11' (temp 4-component vector of int)
0:32 textureOffset (global 4-component vector of int)
0:32 Construct combined texture-sampler (temp isampler1D)
0:32 'g_tTex1di4' (uniform itexture1D)
0:32 'g_sSamp' (uniform sampler)
0:32 Constant:
0:32 0.200000
0:32 Constant:
0:32 1 (const int)
0:33 Sequence
0:33 move second child to first child (temp 4-component vector of uint)
0:33 'txval12' (temp 4-component vector of uint)
0:33 textureOffset (global 4-component vector of uint)
0:33 Construct combined texture-sampler (temp usampler1D)
0:33 'g_tTex1du4' (uniform utexture1D)
0:33 'g_sSamp' (uniform sampler)
0:33 Constant:
0:33 0.300000
0:33 Constant:
0:33 1 (const int)
0:35 Sequence
0:35 move second child to first child (temp 4-component vector of float)
0:35 'txval20' (temp 4-component vector of float)
0:35 textureOffset (global 4-component vector of float)
0:35 Construct combined texture-sampler (temp sampler2D)
0:35 'g_tTex2df4' (uniform texture2D)
0:35 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:? Constant:
0:? 1 (const int)
0:? 0 (const int)
0:36 Sequence
0:36 move second child to first child (temp 4-component vector of int)
0:36 'txval21' (temp 4-component vector of int)
0:36 textureOffset (global 4-component vector of int)
0:36 Construct combined texture-sampler (temp isampler2D)
0:36 'g_tTex2di4' (uniform itexture2D)
0:36 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:? Constant:
0:? 1 (const int)
0:? 1 (const int)
0:37 Sequence
0:37 move second child to first child (temp 4-component vector of uint)
0:37 'txval22' (temp 4-component vector of uint)
0:37 textureOffset (global 4-component vector of uint)
0:37 Construct combined texture-sampler (temp usampler2D)
0:37 'g_tTex2du4' (uniform utexture2D)
0:37 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.500000
0:? 0.600000
0:? Constant:
0:? 1 (const int)
0:? -1 (const int)
0:39 Sequence
0:39 move second child to first child (temp 4-component vector of float)
0:39 'txval30' (temp 4-component vector of float)
0:39 textureOffset (global 4-component vector of float)
0:39 Construct combined texture-sampler (temp sampler3D)
0:39 'g_tTex3df4' (uniform texture3D)
0:39 '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:? 1 (const int)
0:40 Sequence
0:40 move second child to first child (temp 4-component vector of int)
0:40 'txval31' (temp 4-component vector of int)
0:40 textureOffset (global 4-component vector of int)
0:40 Construct combined texture-sampler (temp isampler3D)
0:40 'g_tTex3di4' (uniform itexture3D)
0:40 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.400000
0:? 0.500000
0:? 0.600000
0:? Constant:
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:41 Sequence
0:41 move second child to first child (temp 4-component vector of uint)
0:41 'txval32' (temp 4-component vector of uint)
0:41 textureOffset (global 4-component vector of uint)
0:41 Construct combined texture-sampler (temp usampler3D)
0:41 'g_tTex3du4' (uniform utexture3D)
0:41 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.700000
0:? 0.800000
0:? 0.900000
0:? Constant:
0:? 1 (const int)
0:? 0 (const int)
0:? -1 (const int)
0:46 move second child to first child (temp float)
0:46 Depth: direct index for structure (temp float FragDepth)
0:46 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:46 Constant:
0:46 1 (const int)
0:46 Constant:
0:46 1.000000
0:48 Branch: Return with expression
0:48 '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:50 Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:28 Function Parameters:
0:? Sequence
0:31 Sequence
0:31 move second child to first child (temp 4-component vector of float)
0:31 'txval10' (temp 4-component vector of float)
0:31 textureOffset (global 4-component vector of float)
0:31 Construct combined texture-sampler (temp sampler1D)
0:31 'g_tTex1df4' (uniform texture1D)
0:31 'g_sSamp' (uniform sampler)
0:31 Constant:
0:31 0.100000
0:31 Constant:
0:31 1 (const int)
0:32 Sequence
0:32 move second child to first child (temp 4-component vector of int)
0:32 'txval11' (temp 4-component vector of int)
0:32 textureOffset (global 4-component vector of int)
0:32 Construct combined texture-sampler (temp isampler1D)
0:32 'g_tTex1di4' (uniform itexture1D)
0:32 'g_sSamp' (uniform sampler)
0:32 Constant:
0:32 0.200000
0:32 Constant:
0:32 1 (const int)
0:33 Sequence
0:33 move second child to first child (temp 4-component vector of uint)
0:33 'txval12' (temp 4-component vector of uint)
0:33 textureOffset (global 4-component vector of uint)
0:33 Construct combined texture-sampler (temp usampler1D)
0:33 'g_tTex1du4' (uniform utexture1D)
0:33 'g_sSamp' (uniform sampler)
0:33 Constant:
0:33 0.300000
0:33 Constant:
0:33 1 (const int)
0:35 Sequence
0:35 move second child to first child (temp 4-component vector of float)
0:35 'txval20' (temp 4-component vector of float)
0:35 textureOffset (global 4-component vector of float)
0:35 Construct combined texture-sampler (temp sampler2D)
0:35 'g_tTex2df4' (uniform texture2D)
0:35 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.100000
0:? 0.200000
0:? Constant:
0:? 1 (const int)
0:? 0 (const int)
0:36 Sequence
0:36 move second child to first child (temp 4-component vector of int)
0:36 'txval21' (temp 4-component vector of int)
0:36 textureOffset (global 4-component vector of int)
0:36 Construct combined texture-sampler (temp isampler2D)
0:36 'g_tTex2di4' (uniform itexture2D)
0:36 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.300000
0:? 0.400000
0:? Constant:
0:? 1 (const int)
0:? 1 (const int)
0:37 Sequence
0:37 move second child to first child (temp 4-component vector of uint)
0:37 'txval22' (temp 4-component vector of uint)
0:37 textureOffset (global 4-component vector of uint)
0:37 Construct combined texture-sampler (temp usampler2D)
0:37 'g_tTex2du4' (uniform utexture2D)
0:37 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.500000
0:? 0.600000
0:? Constant:
0:? 1 (const int)
0:? -1 (const int)
0:39 Sequence
0:39 move second child to first child (temp 4-component vector of float)
0:39 'txval30' (temp 4-component vector of float)
0:39 textureOffset (global 4-component vector of float)
0:39 Construct combined texture-sampler (temp sampler3D)
0:39 'g_tTex3df4' (uniform texture3D)
0:39 '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:? 1 (const int)
0:40 Sequence
0:40 move second child to first child (temp 4-component vector of int)
0:40 'txval31' (temp 4-component vector of int)
0:40 textureOffset (global 4-component vector of int)
0:40 Construct combined texture-sampler (temp isampler3D)
0:40 'g_tTex3di4' (uniform itexture3D)
0:40 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.400000
0:? 0.500000
0:? 0.600000
0:? Constant:
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:41 Sequence
0:41 move second child to first child (temp 4-component vector of uint)
0:41 'txval32' (temp 4-component vector of uint)
0:41 textureOffset (global 4-component vector of uint)
0:41 Construct combined texture-sampler (temp usampler3D)
0:41 'g_tTex3du4' (uniform utexture3D)
0:41 'g_sSamp' (uniform sampler)
0:? Constant:
0:? 0.700000
0:? 0.800000
0:? 0.900000
0:? Constant:
0:? 1 (const int)
0:? 0 (const int)
0:? -1 (const int)
0:46 move second child to first child (temp float)
0:46 Depth: direct index for structure (temp float FragDepth)
0:46 'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
0:46 Constant:
0:46 1 (const int)
0:46 Constant:
0:46 1.000000
0:48 Branch: Return with expression
0:48 '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 145
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 "txval10"
Name 12 "g_tTex1df4"
Name 16 "g_sSamp"
Name 26 "txval11"
Name 29 "g_tTex1di4"
Name 39 "txval12"
Name 42 "g_tTex1du4"
Name 49 "txval20"
Name 52 "g_tTex2df4"
Name 63 "txval21"
Name 66 "g_tTex2di4"
Name 75 "txval22"
Name 78 "g_tTex2du4"
Name 89 "txval30"
Name 92 "g_tTex3df4"
Name 102 "txval31"
Name 105 "g_tTex3di4"
Name 113 "txval32"
Name 116 "g_tTex3du4"
Name 127 "PS_OUTPUT"
MemberName 127(PS_OUTPUT) 0 "Color"
MemberName 127(PS_OUTPUT) 1 "Depth"
Name 129 "psout"
Name 135 "g_tTex1df4a"
Name 138 "g_tTexcdf4"
Name 141 "g_tTexcdi4"
Name 144 "g_tTexcdu4"
Decorate 12(g_tTex1df4) DescriptorSet 0
Decorate 16(g_sSamp) DescriptorSet 0
Decorate 29(g_tTex1di4) DescriptorSet 0
Decorate 42(g_tTex1du4) DescriptorSet 0
Decorate 52(g_tTex2df4) DescriptorSet 0
Decorate 66(g_tTex2di4) DescriptorSet 0
Decorate 78(g_tTex2du4) DescriptorSet 0
Decorate 92(g_tTex3df4) DescriptorSet 0
Decorate 105(g_tTex3di4) DescriptorSet 0
Decorate 116(g_tTex3du4) DescriptorSet 0
MemberDecorate 127(PS_OUTPUT) 1 BuiltIn FragDepth
Decorate 135(g_tTex1df4a) DescriptorSet 0
Decorate 138(g_tTexcdf4) DescriptorSet 0
Decorate 141(g_tTexcdi4) DescriptorSet 0
Decorate 144(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) 1D sampled format:Unknown
11: TypePointer UniformConstant 10
12(g_tTex1df4): 11(ptr) Variable UniformConstant
14: TypeSampler
15: TypePointer UniformConstant 14
16(g_sSamp): 15(ptr) Variable UniformConstant
18: TypeSampledImage 10
20: 6(float) Constant 1036831949
21: TypeInt 32 1
22: 21(int) Constant 1
24: TypeVector 21(int) 4
25: TypePointer Function 24(ivec4)
27: TypeImage 21(int) 1D sampled format:Unknown
28: TypePointer UniformConstant 27
29(g_tTex1di4): 28(ptr) Variable UniformConstant
32: TypeSampledImage 27
34: 6(float) Constant 1045220557
36: TypeInt 32 0
37: TypeVector 36(int) 4
38: TypePointer Function 37(ivec4)
40: TypeImage 36(int) 1D sampled format:Unknown
41: TypePointer UniformConstant 40
42(g_tTex1du4): 41(ptr) Variable UniformConstant
45: TypeSampledImage 40
47: 6(float) Constant 1050253722
50: TypeImage 6(float) 2D sampled format:Unknown
51: TypePointer UniformConstant 50
52(g_tTex2df4): 51(ptr) Variable UniformConstant
55: TypeSampledImage 50
57: TypeVector 6(float) 2
58: 57(fvec2) ConstantComposite 20 34
59: TypeVector 21(int) 2
60: 21(int) Constant 0
61: 59(ivec2) ConstantComposite 22 60
64: TypeImage 21(int) 2D sampled format:Unknown
65: TypePointer UniformConstant 64
66(g_tTex2di4): 65(ptr) Variable UniformConstant
69: TypeSampledImage 64
71: 6(float) Constant 1053609165
72: 57(fvec2) ConstantComposite 47 71
73: 59(ivec2) ConstantComposite 22 22
76: TypeImage 36(int) 2D sampled format:Unknown
77: TypePointer UniformConstant 76
78(g_tTex2du4): 77(ptr) Variable UniformConstant
81: TypeSampledImage 76
83: 6(float) Constant 1056964608
84: 6(float) Constant 1058642330
85: 57(fvec2) ConstantComposite 83 84
86: 21(int) Constant 4294967295
87: 59(ivec2) ConstantComposite 22 86
90: TypeImage 6(float) 3D sampled format:Unknown
91: TypePointer UniformConstant 90
92(g_tTex3df4): 91(ptr) Variable UniformConstant
95: TypeSampledImage 90
97: TypeVector 6(float) 3
98: 97(fvec3) ConstantComposite 20 34 47
99: TypeVector 21(int) 3
100: 99(ivec3) ConstantComposite 22 60 22
103: TypeImage 21(int) 3D sampled format:Unknown
104: TypePointer UniformConstant 103
105(g_tTex3di4): 104(ptr) Variable UniformConstant
108: TypeSampledImage 103
110: 97(fvec3) ConstantComposite 71 83 84
111: 99(ivec3) ConstantComposite 22 22 22
114: TypeImage 36(int) 3D sampled format:Unknown
115: TypePointer UniformConstant 114
116(g_tTex3du4): 115(ptr) Variable UniformConstant
119: TypeSampledImage 114
121: 6(float) Constant 1060320051
122: 6(float) Constant 1061997773
123: 6(float) Constant 1063675494
124: 97(fvec3) ConstantComposite 121 122 123
125: 99(ivec3) ConstantComposite 22 60 86
127(PS_OUTPUT): TypeStruct 7(fvec4) 6(float)
128: TypePointer Function 127(PS_OUTPUT)
130: 6(float) Constant 1065353216
131: TypePointer Function 6(float)
135(g_tTex1df4a): 11(ptr) Variable UniformConstant
136: TypeImage 6(float) Cube sampled format:Unknown
137: TypePointer UniformConstant 136
138(g_tTexcdf4): 137(ptr) Variable UniformConstant
139: TypeImage 21(int) Cube sampled format:Unknown
140: TypePointer UniformConstant 139
141(g_tTexcdi4): 140(ptr) Variable UniformConstant
142: TypeImage 36(int) Cube sampled format:Unknown
143: TypePointer UniformConstant 142
144(g_tTexcdu4): 143(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(txval10): 8(ptr) Variable Function
26(txval11): 25(ptr) Variable Function
39(txval12): 38(ptr) Variable Function
49(txval20): 8(ptr) Variable Function
63(txval21): 25(ptr) Variable Function
75(txval22): 38(ptr) Variable Function
89(txval30): 8(ptr) Variable Function
102(txval31): 25(ptr) Variable Function
113(txval32): 38(ptr) Variable Function
129(psout): 128(ptr) Variable Function
13: 10 Load 12(g_tTex1df4)
17: 14 Load 16(g_sSamp)
19: 18 SampledImage 13 17
23: 7(fvec4) ImageSampleImplicitLod 19 20 ConstOffset 22
Store 9(txval10) 23
30: 27 Load 29(g_tTex1di4)
31: 14 Load 16(g_sSamp)
33: 32 SampledImage 30 31
35: 24(ivec4) ImageSampleImplicitLod 33 34 ConstOffset 22
Store 26(txval11) 35
43: 40 Load 42(g_tTex1du4)
44: 14 Load 16(g_sSamp)
46: 45 SampledImage 43 44
48: 37(ivec4) ImageSampleImplicitLod 46 47 ConstOffset 22
Store 39(txval12) 48
53: 50 Load 52(g_tTex2df4)
54: 14 Load 16(g_sSamp)
56: 55 SampledImage 53 54
62: 7(fvec4) ImageSampleImplicitLod 56 58 ConstOffset 61
Store 49(txval20) 62
67: 64 Load 66(g_tTex2di4)
68: 14 Load 16(g_sSamp)
70: 69 SampledImage 67 68
74: 24(ivec4) ImageSampleImplicitLod 70 72 ConstOffset 73
Store 63(txval21) 74
79: 76 Load 78(g_tTex2du4)
80: 14 Load 16(g_sSamp)
82: 81 SampledImage 79 80
88: 37(ivec4) ImageSampleImplicitLod 82 85 ConstOffset 87
Store 75(txval22) 88
93: 90 Load 92(g_tTex3df4)
94: 14 Load 16(g_sSamp)
96: 95 SampledImage 93 94
101: 7(fvec4) ImageSampleImplicitLod 96 98 ConstOffset 100
Store 89(txval30) 101
106: 103 Load 105(g_tTex3di4)
107: 14 Load 16(g_sSamp)
109: 108 SampledImage 106 107
112: 24(ivec4) ImageSampleImplicitLod 109 110 ConstOffset 111
Store 102(txval31) 112
117: 114 Load 116(g_tTex3du4)
118: 14 Load 16(g_sSamp)
120: 119 SampledImage 117 118
126: 37(ivec4) ImageSampleImplicitLod 120 124 ConstOffset 125
Store 113(txval32) 126
132: 131(ptr) AccessChain 129(psout) 22
Store 132 130
133:127(PS_OUTPUT) Load 129(psout)
ReturnValue 133
FunctionEnd

Просмотреть файл

@ -0,0 +1,43 @@
SamplerState g_sSamp : register(s0);
Texture1DArray g_tTex1df4a : register(t1);
uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
Texture1DArray <int4> g_tTex1di4;
Texture1DArray <uint4> g_tTex1du4;
Texture2DArray <float4> g_tTex2df4;
Texture2DArray <int4> g_tTex2di4;
Texture2DArray <uint4> g_tTex2du4;
TextureCubeArray <float4> g_tTexcdf4;
TextureCubeArray <int4> g_tTexcdi4;
TextureCubeArray <uint4> g_tTexcdu4;
struct PS_OUTPUT
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
PS_OUTPUT main()
{
PS_OUTPUT psout;
float4 txval10 = g_tTex1df4 . Sample(g_sSamp, float2(0.1, 0.2));
int4 txval11 = g_tTex1di4 . Sample(g_sSamp, float2(0.2, 0.3));
uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, float2(0.3, 0.4));
float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float3(0.3, 0.4, 0.5));
uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float3(0.5, 0.6, 0.7));
float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float4(0.1, 0.2, 0.3, 0.4));
int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float4(0.4, 0.5, 0.6, 0.7));
uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float4(0.7, 0.8, 0.9, 1.0));
psout.Color = 1.0;
psout.Depth = 1.0;
return psout;
}

Просмотреть файл

@ -0,0 +1,37 @@
SamplerState g_sSamp : register(s0);
Texture1DArray g_tTex1df4a : register(t1);
uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
Texture1DArray <int4> g_tTex1di4;
Texture1DArray <uint4> g_tTex1du4;
Texture2DArray <float4> g_tTex2df4;
Texture2DArray <int4> g_tTex2di4;
Texture2DArray <uint4> g_tTex2du4;
struct PS_OUTPUT
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
PS_OUTPUT main()
{
PS_OUTPUT psout;
float4 txval10 = g_tTex1df4 . Sample(g_sSamp, float2(0.1, 0.2), 0);
int4 txval11 = g_tTex1di4 . Sample(g_sSamp, float2(0.2, 0.3), 1);
uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, float2(0.3, 0.4), 2);
float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3), int2(0,0));
int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float3(0.3, 0.4, 0.5), int2(0,0));
uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float3(0.5, 0.6, 0.7), int2(0,1));
// No offset array forms for 3D or cube
psout.Color = 1.0;
psout.Depth = 1.0;
return psout;
}

Просмотреть файл

@ -0,0 +1,49 @@
SamplerState g_sSamp : register(s0);
Texture1D g_tTex1df4a : register(t1);
uniform Texture1D <float4> g_tTex1df4 : register(t0);
Texture1D <int4> g_tTex1di4;
Texture1D <uint4> g_tTex1du4;
Texture2D <float4> g_tTex2df4;
Texture2D <int4> g_tTex2di4;
Texture2D <uint4> g_tTex2du4;
Texture3D <float4> g_tTex3df4;
Texture3D <int4> g_tTex3di4;
Texture3D <uint4> g_tTex3du4;
TextureCube <float4> g_tTexcdf4;
TextureCube <int4> g_tTexcdi4;
TextureCube <uint4> g_tTexcdu4;
struct PS_OUTPUT
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
PS_OUTPUT main()
{
PS_OUTPUT psout;
float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1, 1);
int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2, 1);
uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3, 1);
float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2), int2(1,0));
int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4), int2(1,1));
uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6), int2(1,-1));
float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3), int3(1,0,1));
int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6), int3(1,1,1));
uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9), int3(1,0,-1));
// There are no offset forms of cube textures, so we do not test them.
psout.Color = 1.0;
psout.Depth = 1.0;
return psout;
}

Просмотреть файл

@ -93,7 +93,10 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"}, {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"},
{"hlsl.intrinsics.negative.frag", "PixelShaderFunction"}, {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"},
{"hlsl.intrinsics.negative.vert", "VertexShaderFunction"}, {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"},
{"hlsl.sample.basicarraydx10.frag", "main"},
{"hlsl.sample.basicdx10.frag", "main"}, {"hlsl.sample.basicdx10.frag", "main"},
{"hlsl.sample.offsetdx10.frag", "main"},
{"hlsl.sample.offsetarraydx10.frag", "main"},
{"hlsl.intrinsics.vert", "VertexShaderFunction"}, {"hlsl.intrinsics.vert", "VertexShaderFunction"},
{"hlsl.matType.frag", "PixelShaderFunction"}, {"hlsl.matType.frag", "PixelShaderFunction"},
{"hlsl.max.frag", "PixelShaderFunction"}, {"hlsl.max.frag", "PixelShaderFunction"},

Просмотреть файл

@ -1236,9 +1236,17 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
switch (op) { switch (op) {
case EOpMethodSample: case EOpMethodSample:
{ {
TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped(); TIntermTyped* argTex = argAggregate->getSequence()[0]->getAsTyped();
TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped(); TIntermTyped* argSamp = argAggregate->getSequence()[1]->getAsTyped();
TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped(); TIntermTyped* argCoord = argAggregate->getSequence()[2]->getAsTyped();
TIntermTyped* argOffset = nullptr;
TOperator textureOp = EOpTexture;
if (argAggregate->getSequence().size() == 4) { // 4th parameter is offset form
textureOp = EOpTextureOffset;
argOffset = argAggregate->getSequence()[3]->getAsTyped();
}
TIntermAggregate* txcombine = new TIntermAggregate(EOpConstructTextureSampler); TIntermAggregate* txcombine = new TIntermAggregate(EOpConstructTextureSampler);
@ -1249,9 +1257,11 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
txcombine->setType(TType(samplerType, EvqTemporary)); txcombine->setType(TType(samplerType, EvqTemporary));
txcombine->setLoc(loc); txcombine->setLoc(loc);
TIntermAggregate* txsample = new TIntermAggregate(EOpTexture); TIntermAggregate* txsample = new TIntermAggregate(textureOp);
txsample->getSequence().push_back(txcombine); txsample->getSequence().push_back(txcombine);
txsample->getSequence().push_back(argCoord); txsample->getSequence().push_back(argCoord);
if (argOffset != nullptr)
txsample->getSequence().push_back(argOffset);
txsample->setType(node->getType()); txsample->setType(node->getType());
txsample->setLoc(loc); txsample->setLoc(loc);
node = txsample; node = txsample;

Просмотреть файл

@ -51,14 +51,15 @@
#include "hlslParseables.h" #include "hlslParseables.h"
#include <cctype> #include <cctype>
#include <utility> #include <utility>
#include <algorithm>
namespace { // anonymous namespace functions namespace { // anonymous namespace functions
const bool UseHlslTypes = false; const bool UseHlslTypes = false;
const char* BaseTypeName(const char* argOrder, const char* scalarName, const char* vecName, const char* matName) const char* BaseTypeName(const char argOrder, const char* scalarName, const char* vecName, const char* matName)
{ {
switch (*argOrder) { switch (argOrder) {
case 'S': return scalarName; case 'S': return scalarName;
case 'V': return vecName; case 'V': return vecName;
case 'M': return matName; case 'M': return matName;
@ -66,11 +67,28 @@ const char* BaseTypeName(const char* argOrder, const char* scalarName, const cha
} }
} }
bool IsTextureType(const char argType) bool IsTextureType(const char argOrder) { return argOrder == '%' || argOrder == '@'; }
{ bool IsTextureArrayed(const char argOrder) { return argOrder == '@'; }
return argType == 'T' || argType == 'i' || argType == 'u';
}
// Reject certain combinations that are illegal sample methods. For example,
// 3D arrays.
bool IsIllegalSample(const glslang::TString& name, const char* argOrder, int dim0)
{
const bool isArrayed = IsTextureArrayed(*argOrder);
if (isArrayed && dim0 == 3) // there are no 3D arrayed textures.
return true;
const int numArgs = int(std::count(argOrder, argOrder + strlen(argOrder), ',')) + 1;
// Reject invalid offset arrayed forms.
if (isArrayed && dim0 == 4) {
if (name == "Sample" && numArgs == 4)
return true;
}
return false;
}
// Create and return a type name. This is done in GLSL, not HLSL conventions, until such // 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. // time as builtins are parsed using the HLSL parser.
@ -81,43 +99,62 @@ bool IsTextureType(const char argType)
// dim1 = matrix 2nd dimension // dim1 = matrix 2nd dimension
glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, const char* argType, int dim0, int dim1) glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, const char* argType, int dim0, int dim1)
{ {
const bool transpose = (argOrder[0] == '^'); const bool isTranspose = (argOrder[0] == '^');
const bool matMul = (argOrder[0] == '#'); const bool isMatMul = (argOrder[0] == '#');
const bool isTexture = IsTextureType(argOrder[0]);
const bool isArrayed = IsTextureArrayed(argOrder[0]);
if (transpose) { // Take transpose of matrix dimensions char order = *argOrder;
char type = *argType;
if (isTranspose) { // Take transpose of matrix dimensions
order = *++argOrder;
std::swap(dim0, dim1); std::swap(dim0, dim1);
++argOrder; } else if (isMatMul) {
} else if (matMul) { order = *++argOrder;
dim0 = dim1; // set vector dimension to mat col dim0 = dim1; // set vector dimension to mat col
++argOrder; } 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')
type = 'i';
else if (type == 'U')
type = 'u';
} }
if (UseHlslTypes) { if (UseHlslTypes) {
switch (*argType) { switch (type) {
case '-': s += "void"; break; case '-': s += "void"; break;
case 'F': s += "float"; break; case 'F': s += "float"; break;
case 'D': s += "double"; break; case 'D': s += "double"; break;
case 'I': s += "int"; break; case 'I': s += "int"; break;
case 'U': s += "uint"; break; case 'U': s += "uint"; break;
case 'B': s += "bool"; break; case 'B': s += "bool"; break;
case 'S': s += "sampler"; break; case 'S': s += "sampler"; break;
case 'T': s += "Texture"; break; case 'T': s += "Texture"; break;
case 'i': assert(0); // TODO: ... case 'i': s += "Texture <int4>"; break;
case 'u': assert(0); // TODO: ... case 'u': s += "Texture <uint4>"; break;
default: s += "UNKNOWN_TYPE"; break; default: s += "UNKNOWN_TYPE"; break;
} }
} else { } else {
switch (*argType) { switch (type) {
case '-': s += "void"; break; case '-': s += "void"; break;
case 'F': s += BaseTypeName(argOrder, "float", "vec", "mat"); break; case 'F': s += BaseTypeName(order, "float", "vec", "mat"); break;
case 'D': s += BaseTypeName(argOrder, "double", "dvec", "dmat"); break; case 'D': s += BaseTypeName(order, "double", "dvec", "dmat"); break;
case 'I': s += BaseTypeName(argOrder, "int", "ivec", "imat"); break; case 'I': s += BaseTypeName(order, "int", "ivec", "imat"); break;
case 'U': s += BaseTypeName(argOrder, "uint", "uvec", "umat"); break; case 'U': s += BaseTypeName(order, "uint", "uvec", "umat"); break;
case 'B': s += BaseTypeName(argOrder, "bool", "bvec", "bmat"); break; case 'B': s += BaseTypeName(order, "bool", "bvec", "bmat"); break;
case 'S': s += BaseTypeName(argOrder, "sampler", "sampler", "sampler"); break; case 'S': s += "sampler"; break;
case 'T': s += BaseTypeName(argOrder, "texture", "texture", "texture"); break; case 'T': // fall through
case 'i': s += BaseTypeName(argOrder, "itexture", "itexture", "itexture"); break; case 'i': // ...
case 'u': s += BaseTypeName(argOrder, "utexture", "utexture", "utexture"); break; case 'u': // ...
if (type != 'T')
s += type;
s += "texture";
break;
default: s += "UNKNOWN_TYPE"; break; default: s += "UNKNOWN_TYPE"; break;
} }
} }
@ -128,8 +165,8 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
dim0 = dim1 = fixedVecSize; dim0 = dim1 = fixedVecSize;
// Add sampler dimensions // Add sampler dimensions
if (*argType == 'S' || IsTextureType(*argType)) { if (type == 'S' || isTexture) {
if (*argOrder == 'V') { if (order == 'V') {
switch (dim0) { switch (dim0) {
case 1: s += "1D"; break; case 1: s += "1D"; break;
case 2: s += "2D"; break; case 2: s += "2D"; break;
@ -141,13 +178,13 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
} else { } else {
// Non-sampler type: // Non-sampler type:
// verify dimensions // verify dimensions
if (((*argOrder == 'V' || *argOrder == 'M') && (dim0 < 1 || dim0 > 4)) || if (((order == 'V' || order == 'M') && (dim0 < 1 || dim0 > 4)) ||
(*argOrder == 'M' && (dim1 < 1 || dim1 > 4))) { (order == 'M' && (dim1 < 1 || dim1 > 4))) {
s += "UNKNOWN_DIMENSION"; s += "UNKNOWN_DIMENSION";
return s; return s;
} }
switch (*argOrder) { switch (order) {
case '-': break; // no dimensions for voids case '-': break; // no dimensions for voids
case 'S': break; // no dimensions on scalars case 'S': break; // no dimensions on scalars
case 'V': s += ('0' + (char)dim0); break; case 'V': s += ('0' + (char)dim0); break;
@ -163,19 +200,23 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
} }
} }
// handle arrayed textures
if (isArrayed)
s += "Array";
return s; return s;
} }
// TODO: the GLSL parser is currently used to parse HLSL prototypes. However, many valid HLSL prototypes // TODO: the GLSL parser is currently used to parse HLSL prototypes. However, many valid HLSL prototypes
// are not valid GLSL prototypes. This rejects the invalid ones. Thus, there is a single switch below // are not valid GLSL prototypes. This rejects the invalid ones. Thus, there is a single switch below
// to enable creation of the entire HLSL space. // to enable creation of the entire HLSL space.
inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char /*argOrder*/, char argType, inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char argOrder, char argType,
int dim0, int dim1, int dim0Max, int dim1Max) int dim0, int dim1, int dim0Max, int dim1Max)
{ {
const bool isVec = dim0Max > 1 || argType == 'V'; const bool isVec = dim0Max > 1 || argType == 'V';
const bool isMat = dim1Max > 1 || argType == 'M'; const bool isMat = dim1Max > 1 || argType == 'M';
if (!IsTextureType(argType) && if (!IsTextureType(argOrder) &&
((isVec && dim0 == 1) || // avoid vec1 ((isVec && dim0 == 1) || // avoid vec1
(isMat && dim0 == 1 && dim1 == 1))) // avoid mat1x1 (isMat && dim0 == 1 && dim1 == 1))) // avoid mat1x1
return false; return false;
@ -300,13 +341,14 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
// orderKey can be: // orderKey can be:
// S = scalar, V = vector, M = matrix, - = void // S = scalar, V = vector, M = matrix, - = void
// typekey can be: // typekey can be:
// D = double, F = float, U = uint, I = int, B = bool, // D = double, F = float, U = uint, I = int, B = bool, S = sampler
// S = sampler, T = texture, i = itexture, u = utexture, - = void
// An empty order or type key repeats the first one. E.g: SVM,, means 3 args each of SVM. // An empty order or type key repeats the first one. E.g: SVM,, means 3 args each of SVM.
// '>' as first letter of order creates an output parameter // '>' as first letter of order creates an output parameter
// '<' as first letter of order creates an input parameter // '<' as first letter of order creates an input parameter
// '^' as first letter of order takes transpose dimensions // '^' as first letter of order takes transpose dimensions
// '#' as first letter of order sets rows=cols for mats // '#' as first letter of order sets rows=cols for mats
// '%' as first letter of order creates texture of given F/I/U type (texture, itexture, etc)
// '@' as first letter of order creates arrayed texture of given type
static const struct { static const struct {
const char* name; // intrinsic name const char* name; // intrinsic name
@ -474,10 +516,11 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
{ "trunc", nullptr, nullptr, "SVM", "F", EShLangAll }, { "trunc", nullptr, nullptr, "SVM", "F", EShLangAll },
// Texture object methods. Return type can be overridden by shader declaration. // Texture object methods. Return type can be overridden by shader declaration.
{ "Sample", "V4", "F", "V,S,V", "T,S,F", EShLangFragmentMask }, // !O = no offset, O = offset, !A = no array, A = array
{ "Sample", "V4", "I", "V,S,V", "i,S,F", EShLangFragmentMask }, { "Sample", /*!O !A*/ "V4", nullptr, "%V,S,V", "FIU,S,F", EShLangFragmentMask },
{ "Sample", "V4", "U", "V,S,V", "u,S,F", EShLangFragmentMask }, { "Sample", /* O !A*/ "V4", nullptr, "%V,S,V,V", "FIU,S,F,I", EShLangFragmentMask },
// TODO: forms with texel-space offset parameter { "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 },
// Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet. // Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet.
{ nullptr, nullptr, nullptr, nullptr, nullptr, 0 }, { nullptr, nullptr, nullptr, nullptr, nullptr, 0 },
@ -499,6 +542,8 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
TString& s = (intrinsic.stage == EShLangAll) ? commonBuiltins : stageBuiltins[stage]; TString& s = (intrinsic.stage == EShLangAll) ? commonBuiltins : stageBuiltins[stage];
for (const char* argOrder = intrinsic.argOrder; !IsEndOfArg(argOrder); ++argOrder) { // for each order... for (const char* argOrder = intrinsic.argOrder; !IsEndOfArg(argOrder); ++argOrder) { // for each order...
const bool isTexture = IsTextureType(*argOrder);
const bool isArrayed = IsTextureArrayed(*argOrder);
const int fixedVecSize = isdigit(argOrder[1]) ? (argOrder[1] - '0') : 0; const int fixedVecSize = isdigit(argOrder[1]) ? (argOrder[1] - '0') : 0;
// calculate min and max vector and matrix dimensions // calculate min and max vector and matrix dimensions
@ -519,13 +564,15 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
dim0, dim1, dim0Max, dim1Max)) dim0, dim1, dim0Max, dim1Max))
continue; continue;
// Reject some forms of sample methods that don't exist.
if (isTexture && IsIllegalSample(s, argOrder, dim0))
continue;
AppendTypeName(s, retOrder, retType, dim0, dim1); // add return type AppendTypeName(s, retOrder, retType, dim0, dim1); // add return type
s.append(" "); // space between type and name s.append(" "); // space between type and name
s.append(intrinsic.name); // intrinsic name s.append(intrinsic.name); // intrinsic name
s.append("("); // open paren s.append("("); // open paren
const bool isTexture = IsTextureType(*argType);
// Append argument types, if any. // Append argument types, if any.
for (int arg = 0; ; ++arg) { for (int arg = 0; ; ++arg) {
const char* nthArgOrder(NthArg(argOrder, arg)); const char* nthArgOrder(NthArg(argOrder, arg));
@ -534,12 +581,16 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
if (nthArgOrder == nullptr || nthArgType == nullptr) if (nthArgOrder == nullptr || nthArgType == nullptr)
break; break;
// For textures, the 1D case isn't a 1-vector, but a scalar.
if (isTexture && dim0 == 1 && arg > 0 && *nthArgOrder == 'V')
nthArgOrder = "S";
// cube textures use vec3 coordinates // cube textures use vec3 coordinates
const int argDim0 = isTexture && arg > 0 ? std::min(dim0, 3) : dim0; int argDim0 = isTexture && arg > 0 ? std::min(dim0, 3) : dim0;
// arrayed textures have one extra coordinate dimension
if (isArrayed && arg == 2)
argDim0++;
// For textures, the 1D case isn't a 1-vector, but a scalar.
if (isTexture && argDim0 == 1 && arg > 0 && *nthArgOrder == 'V')
nthArgOrder = "S";
s.append(arg > 0 ? ", ": ""); // comma separator if needed s.append(arg > 0 ? ", ": ""); // comma separator if needed
@ -563,7 +614,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
} }
} }
if (fixedVecSize > 0) // skip over number for fixed size vectors if (fixedVecSize > 0 || isTexture) // skip over special characters
++argOrder; ++argOrder;
} }