HLSL: Add CalculateLevelOfDetail, and unimplemented errors for *Unclamped and GetSamp...
authorsteve-lunarg <nospam@nowhere.net>
Tue, 26 Jul 2016 14:57:53 +0000 (08:57 -0600)
committersteve-lunarg <nospam@nowhere.net>
Wed, 27 Jul 2016 16:46:33 +0000 (10:46 -0600)
Test/baseResults/hlsl.calculatelod.dx10.frag.out [new file with mode: 0644]
Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out [new file with mode: 0644]
Test/baseResults/hlsl.getsampleposition.dx10.frag.out [new file with mode: 0644]
Test/hlsl.calculatelod.dx10.frag [new file with mode: 0644]
Test/hlsl.calculatelodunclamped.dx10.frag [new file with mode: 0644]
Test/hlsl.getsampleposition.dx10.frag [new file with mode: 0644]
gtests/Hlsl.FromFile.cpp
hlsl/hlslParseHelper.cpp
hlsl/hlslParseables.cpp

diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
new file mode 100644 (file)
index 0000000..a48351c
--- /dev/null
@@ -0,0 +1,494 @@
+hlsl.calculatelod.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:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (uniform texture1DArray)
+0:28                'g_sSamp' (uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (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 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:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (uniform texture1DArray)
+0:28                'g_sSamp' (uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (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 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 140
+
+                              Capability Shader
+                              Capability Sampled1D
+                              Capability SampledCubeArray
+                              Capability ImageQuery
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "main"
+                              Name 8  "txval10"
+                              Name 11  "g_tTex1df4a"
+                              Name 15  "g_sSamp"
+                              Name 26  "txval11"
+                              Name 29  "g_tTex1di4a"
+                              Name 38  "txval12"
+                              Name 42  "g_tTex1du4a"
+                              Name 51  "txval20"
+                              Name 54  "g_tTex2df4a"
+                              Name 63  "txval21"
+                              Name 66  "g_tTex2di4a"
+                              Name 76  "txval22"
+                              Name 79  "g_tTex2du4a"
+                              Name 90  "txval40"
+                              Name 93  "g_tTexcdf4a"
+                              Name 103  "txval41"
+                              Name 106  "g_tTexcdi4a"
+                              Name 115  "txval42"
+                              Name 118  "g_tTexcdu4a"
+                              Name 131  "PS_OUTPUT"
+                              MemberName 131(PS_OUTPUT) 0  "Color"
+                              MemberName 131(PS_OUTPUT) 1  "Depth"
+                              Name 133  "psout"
+                              Name 139  "g_tTex1df4"
+                              Decorate 11(g_tTex1df4a) DescriptorSet 0
+                              Decorate 15(g_sSamp) DescriptorSet 0
+                              Decorate 29(g_tTex1di4a) DescriptorSet 0
+                              Decorate 42(g_tTex1du4a) DescriptorSet 0
+                              Decorate 54(g_tTex2df4a) DescriptorSet 0
+                              Decorate 66(g_tTex2di4a) DescriptorSet 0
+                              Decorate 79(g_tTex2du4a) DescriptorSet 0
+                              Decorate 93(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 106(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 118(g_tTexcdu4a) DescriptorSet 0
+                              MemberDecorate 131(PS_OUTPUT) 1 BuiltIn FragDepth
+                              Decorate 139(g_tTex1df4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:             TypeImage 6(float) 1D array sampled format:Unknown
+              10:             TypePointer UniformConstant 9
+ 11(g_tTex1df4a):     10(ptr) Variable UniformConstant
+              13:             TypeSampler
+              14:             TypePointer UniformConstant 13
+     15(g_sSamp):     14(ptr) Variable UniformConstant
+              17:             TypeSampledImage 9
+              19:    6(float) Constant 1036831949
+              21:             TypeVector 6(float) 2
+              23:             TypeInt 32 1
+              24:     23(int) Constant 0
+              27:             TypeImage 23(int) 1D array sampled format:Unknown
+              28:             TypePointer UniformConstant 27
+ 29(g_tTex1di4a):     28(ptr) Variable UniformConstant
+              32:             TypeSampledImage 27
+              34:    6(float) Constant 1045220557
+              39:             TypeInt 32 0
+              40:             TypeImage 39(int) 1D array sampled format:Unknown
+              41:             TypePointer UniformConstant 40
+ 42(g_tTex1du4a):     41(ptr) Variable UniformConstant
+              45:             TypeSampledImage 40
+              47:    6(float) Constant 1050253722
+              52:             TypeImage 6(float) 2D array sampled format:Unknown
+              53:             TypePointer UniformConstant 52
+ 54(g_tTex2df4a):     53(ptr) Variable UniformConstant
+              57:             TypeSampledImage 52
+              59:   21(fvec2) ConstantComposite 19 34
+              64:             TypeImage 23(int) 2D array sampled format:Unknown
+              65:             TypePointer UniformConstant 64
+ 66(g_tTex2di4a):     65(ptr) Variable UniformConstant
+              69:             TypeSampledImage 64
+              71:    6(float) Constant 1053609165
+              72:   21(fvec2) ConstantComposite 47 71
+              77:             TypeImage 39(int) 2D array sampled format:Unknown
+              78:             TypePointer UniformConstant 77
+ 79(g_tTex2du4a):     78(ptr) Variable UniformConstant
+              82:             TypeSampledImage 77
+              84:    6(float) Constant 1056964608
+              85:    6(float) Constant 1058642330
+              86:   21(fvec2) ConstantComposite 84 85
+              91:             TypeImage 6(float) Cube array sampled format:Unknown
+              92:             TypePointer UniformConstant 91
+ 93(g_tTexcdf4a):     92(ptr) Variable UniformConstant
+              96:             TypeSampledImage 91
+              98:             TypeVector 6(float) 3
+              99:   98(fvec3) ConstantComposite 19 34 47
+             104:             TypeImage 23(int) Cube array sampled format:Unknown
+             105:             TypePointer UniformConstant 104
+106(g_tTexcdi4a):    105(ptr) Variable UniformConstant
+             109:             TypeSampledImage 104
+             111:   98(fvec3) ConstantComposite 71 84 85
+             116:             TypeImage 39(int) Cube array sampled format:Unknown
+             117:             TypePointer UniformConstant 116
+118(g_tTexcdu4a):    117(ptr) Variable UniformConstant
+             121:             TypeSampledImage 116
+             123:    6(float) Constant 1060320051
+             124:    6(float) Constant 1061997773
+             125:    6(float) Constant 1063675494
+             126:   98(fvec3) ConstantComposite 123 124 125
+             130:             TypeVector 6(float) 4
+  131(PS_OUTPUT):             TypeStruct 130(fvec4) 6(float)
+             132:             TypePointer Function 131(PS_OUTPUT)
+             134:     23(int) Constant 1
+             135:    6(float) Constant 1065353216
+ 139(g_tTex1df4):     10(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+      8(txval10):      7(ptr) Variable Function
+     26(txval11):      7(ptr) Variable Function
+     38(txval12):      7(ptr) Variable Function
+     51(txval20):      7(ptr) Variable Function
+     63(txval21):      7(ptr) Variable Function
+     76(txval22):      7(ptr) Variable Function
+     90(txval40):      7(ptr) Variable Function
+    103(txval41):      7(ptr) Variable Function
+    115(txval42):      7(ptr) Variable Function
+      133(psout):    132(ptr) Variable Function
+              12:           9 Load 11(g_tTex1df4a)
+              16:          13 Load 15(g_sSamp)
+              18:          17 SampledImage 12 16
+              20:           9 Image 18
+              22:   21(fvec2) ImageQueryLod 20 19
+              25:    6(float) CompositeExtract 22 0
+                              Store 8(txval10) 25
+              30:          27 Load 29(g_tTex1di4a)
+              31:          13 Load 15(g_sSamp)
+              33:          32 SampledImage 30 31
+              35:          27 Image 33
+              36:   21(fvec2) ImageQueryLod 35 34
+              37:    6(float) CompositeExtract 36 0
+                              Store 26(txval11) 37
+              43:          40 Load 42(g_tTex1du4a)
+              44:          13 Load 15(g_sSamp)
+              46:          45 SampledImage 43 44
+              48:          40 Image 46
+              49:   21(fvec2) ImageQueryLod 48 47
+              50:    6(float) CompositeExtract 49 0
+                              Store 38(txval12) 50
+              55:          52 Load 54(g_tTex2df4a)
+              56:          13 Load 15(g_sSamp)
+              58:          57 SampledImage 55 56
+              60:          52 Image 58
+              61:   21(fvec2) ImageQueryLod 60 59
+              62:    6(float) CompositeExtract 61 0
+                              Store 51(txval20) 62
+              67:          64 Load 66(g_tTex2di4a)
+              68:          13 Load 15(g_sSamp)
+              70:          69 SampledImage 67 68
+              73:          64 Image 70
+              74:   21(fvec2) ImageQueryLod 73 72
+              75:    6(float) CompositeExtract 74 0
+                              Store 63(txval21) 75
+              80:          77 Load 79(g_tTex2du4a)
+              81:          13 Load 15(g_sSamp)
+              83:          82 SampledImage 80 81
+              87:          77 Image 83
+              88:   21(fvec2) ImageQueryLod 87 86
+              89:    6(float) CompositeExtract 88 0
+                              Store 76(txval22) 89
+              94:          91 Load 93(g_tTexcdf4a)
+              95:          13 Load 15(g_sSamp)
+              97:          96 SampledImage 94 95
+             100:          91 Image 97
+             101:   21(fvec2) ImageQueryLod 100 99
+             102:    6(float) CompositeExtract 101 0
+                              Store 90(txval40) 102
+             107:         104 Load 106(g_tTexcdi4a)
+             108:          13 Load 15(g_sSamp)
+             110:         109 SampledImage 107 108
+             112:         104 Image 110
+             113:   21(fvec2) ImageQueryLod 112 111
+             114:    6(float) CompositeExtract 113 0
+                              Store 103(txval41) 114
+             119:         116 Load 118(g_tTexcdu4a)
+             120:          13 Load 15(g_sSamp)
+             122:         121 SampledImage 119 120
+             127:         116 Image 122
+             128:   21(fvec2) ImageQueryLod 127 126
+             129:    6(float) CompositeExtract 128 0
+                              Store 115(txval42) 129
+             136:      7(ptr) AccessChain 133(psout) 134
+                              Store 136 135
+             137:131(PS_OUTPUT) Load 133(psout)
+                              ReturnValue 137
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
new file mode 100644 (file)
index 0000000..11a52b5
--- /dev/null
@@ -0,0 +1,308 @@
+hlsl.calculatelodunclamped.dx10.frag
+ERROR: 0:28: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:29: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:30: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:32: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:33: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:34: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:36: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:37: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 0:38: '' : unimplemented: CalculateLevelOfDetailUnclamped 
+ERROR: 9 compilation errors.  No code generated.
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (uniform texture1DArray)
+0:28                'g_sSamp' (uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (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 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
+ERROR: node is still EOpNull!
+0:45  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:24    Function Parameters: 
+0:?     Sequence
+0:28      Sequence
+0:28        move second child to first child (temp float)
+0:28          'txval10' (temp float)
+0:28          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:28              Construct combined texture-sampler (temp sampler1DArray)
+0:28                'g_tTex1df4a' (uniform texture1DArray)
+0:28                'g_sSamp' (uniform sampler)
+0:28              Constant:
+0:28                0.100000
+0:28            Constant:
+0:28              0 (const int)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'txval11' (temp float)
+0:29          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:29              Construct combined texture-sampler (temp isampler1DArray)
+0:29                'g_tTex1di4a' (uniform itexture1DArray)
+0:29                'g_sSamp' (uniform sampler)
+0:29              Constant:
+0:29                0.200000
+0:29            Constant:
+0:29              0 (const int)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'txval12' (temp float)
+0:30          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:30              Construct combined texture-sampler (temp usampler1DArray)
+0:30                'g_tTex1du4a' (uniform utexture1DArray)
+0:30                'g_sSamp' (uniform sampler)
+0:30              Constant:
+0:30                0.300000
+0:30            Constant:
+0:30              0 (const int)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'txval20' (temp float)
+0:32          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:32              Construct combined texture-sampler (temp sampler2DArray)
+0:32                'g_tTex2df4a' (uniform texture2DArray)
+0:32                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:32            Constant:
+0:32              0 (const int)
+0:33      Sequence
+0:33        move second child to first child (temp float)
+0:33          'txval21' (temp float)
+0:33          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:33              Construct combined texture-sampler (temp isampler2DArray)
+0:33                'g_tTex2di4a' (uniform itexture2DArray)
+0:33                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.300000
+0:?                 0.400000
+0:33            Constant:
+0:33              0 (const int)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'txval22' (temp float)
+0:34          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:34              Construct combined texture-sampler (temp usampler2DArray)
+0:34                'g_tTex2du4a' (uniform utexture2DArray)
+0:34                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.500000
+0:?                 0.600000
+0:34            Constant:
+0:34              0 (const int)
+0:36      Sequence
+0:36        move second child to first child (temp float)
+0:36          'txval40' (temp float)
+0:36          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:36              Construct combined texture-sampler (temp samplerCubeArray)
+0:36                'g_tTexcdf4a' (uniform textureCubeArray)
+0:36                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.100000
+0:?                 0.200000
+0:?                 0.300000
+0:36            Constant:
+0:36              0 (const int)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'txval41' (temp float)
+0:37          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:37              Construct combined texture-sampler (temp isamplerCubeArray)
+0:37                'g_tTexcdi4a' (uniform itextureCubeArray)
+0:37                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.400000
+0:?                 0.500000
+0:?                 0.600000
+0:37            Constant:
+0:37              0 (const int)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'txval42' (temp float)
+0:38          direct index (temp float)
+0:?             textureQueryLod (temp float)
+0:38              Construct combined texture-sampler (temp usamplerCubeArray)
+0:38                'g_tTexcdu4a' (uniform utextureCubeArray)
+0:38                'g_sSamp' (uniform sampler)
+0:?               Constant:
+0:?                 0.700000
+0:?                 0.800000
+0:?                 0.900000
+0:38            Constant:
+0:38              0 (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 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)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
new file mode 100644 (file)
index 0000000..ae9d3ae
--- /dev/null
@@ -0,0 +1,83 @@
+hlsl.getsampleposition.dx10.frag
+ERROR: 0:16: '' : unimplemented: GetSamplePosition 
+ERROR: 0:17: '' : unimplemented: GetSamplePosition 
+ERROR: 2 compilation errors.  No code generated.
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:24  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:13    Function Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp 2-component vector of float)
+0:16          'r00' (temp 2-component vector of float)
+0:16          ERROR: Bad aggregation op
+ (global 2-component vector of float)
+0:16            'g_tTex2dmsf4' (uniform texture2DMS)
+0:16            Constant:
+0:16              1 (const int)
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of float)
+0:17          'r01' (temp 2-component vector of float)
+0:17          ERROR: Bad aggregation op
+ (global 2-component vector of float)
+0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:17            Constant:
+0:17              2 (const int)
+0:20      move second child to first child (temp float)
+0:20        Depth: direct index for structure (temp float FragDepth)
+0:20          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:20          Constant:
+0:20            1 (const int)
+0:20        Constant:
+0:20          1.000000
+0:22      Branch: Return with expression
+0:22        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (uniform sampler)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:24  Function Definition: main( (global structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:13    Function Parameters: 
+0:?     Sequence
+0:16      Sequence
+0:16        move second child to first child (temp 2-component vector of float)
+0:16          'r00' (temp 2-component vector of float)
+0:16          ERROR: Bad aggregation op
+ (global 2-component vector of float)
+0:16            'g_tTex2dmsf4' (uniform texture2DMS)
+0:16            Constant:
+0:16              1 (const int)
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of float)
+0:17          'r01' (temp 2-component vector of float)
+0:17          ERROR: Bad aggregation op
+ (global 2-component vector of float)
+0:17            'g_tTex2dmsf4a' (uniform texture2DMSArray)
+0:17            Constant:
+0:17              2 (const int)
+0:20      move second child to first child (temp float)
+0:20        Depth: direct index for structure (temp float FragDepth)
+0:20          'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:20          Constant:
+0:20            1 (const int)
+0:20        Constant:
+0:20          1.000000
+0:22      Branch: Return with expression
+0:22        'psout' (temp structure{temp 4-component vector of float Color, temp float FragDepth Depth})
+0:?   Linker Objects
+0:?     'g_sSamp' (uniform sampler)
+0:?     'g_tTex2dmsf4' (uniform texture2DMS)
+0:?     'g_tTex2dmsf4a' (uniform texture2DMSArray)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/hlsl.calculatelod.dx10.frag b/Test/hlsl.calculatelod.dx10.frag
new file mode 100644 (file)
index 0000000..0fb7607
--- /dev/null
@@ -0,0 +1,44 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // LOD queries do not pass array level in coordinate.
+   float txval10 = g_tTex1df4a . CalculateLevelOfDetail(g_sSamp, 0.1);
+   float txval11 = g_tTex1di4a . CalculateLevelOfDetail(g_sSamp, 0.2);
+   float txval12 = g_tTex1du4a . CalculateLevelOfDetail(g_sSamp, 0.3);
+
+   float txval20 = g_tTex2df4a . CalculateLevelOfDetail(g_sSamp, float2(0.1, 0.2));
+   float txval21 = g_tTex2di4a . CalculateLevelOfDetail(g_sSamp, float2(0.3, 0.4));
+   float txval22 = g_tTex2du4a . CalculateLevelOfDetail(g_sSamp, float2(0.5, 0.6));
+
+   float txval40 = g_tTexcdf4a . CalculateLevelOfDetail(g_sSamp, float3(0.1, 0.2, 0.3));
+   float txval41 = g_tTexcdi4a . CalculateLevelOfDetail(g_sSamp, float3(0.4, 0.5, 0.6));
+   float txval42 = g_tTexcdu4a . CalculateLevelOfDetail(g_sSamp, float3(0.7, 0.8, 0.9));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.calculatelodunclamped.dx10.frag b/Test/hlsl.calculatelodunclamped.dx10.frag
new file mode 100644 (file)
index 0000000..4c79aed
--- /dev/null
@@ -0,0 +1,44 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture1DArray          g_tTex1df4a : register(t1);
+
+uniform Texture1DArray <float4> g_tTex1df4 : register(t0);
+Texture1DArray <int4>   g_tTex1di4a;
+Texture1DArray <uint4>  g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4>   g_tTex2di4a;
+Texture2DArray <uint4>  g_tTex2du4a;
+
+TextureCubeArray <float4> g_tTexcdf4a;
+TextureCubeArray <int4>   g_tTexcdi4a;
+TextureCubeArray <uint4>  g_tTexcdu4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   // LOD queries do not pass array level in coordinate.
+   float txval10 = g_tTex1df4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.1);
+   float txval11 = g_tTex1di4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.2);
+   float txval12 = g_tTex1du4a . CalculateLevelOfDetailUnclamped(g_sSamp, 0.3);
+
+   float txval20 = g_tTex2df4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.1, 0.2));
+   float txval21 = g_tTex2di4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.3, 0.4));
+   float txval22 = g_tTex2du4a . CalculateLevelOfDetailUnclamped(g_sSamp, float2(0.5, 0.6));
+
+   float txval40 = g_tTexcdf4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.1, 0.2, 0.3));
+   float txval41 = g_tTexcdi4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.4, 0.5, 0.6));
+   float txval42 = g_tTexcdu4a . CalculateLevelOfDetailUnclamped(g_sSamp, float3(0.7, 0.8, 0.9));
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
diff --git a/Test/hlsl.getsampleposition.dx10.frag b/Test/hlsl.getsampleposition.dx10.frag
new file mode 100644 (file)
index 0000000..a7a93b3
--- /dev/null
@@ -0,0 +1,23 @@
+SamplerState       g_sSamp : register(s0);
+
+Texture2DMS      <float4>  g_tTex2dmsf4;
+Texture2DMSArray <float4>  g_tTex2dmsf4a;
+
+struct PS_OUTPUT
+{
+    float4 Color : SV_Target0;
+    float  Depth : SV_Depth;
+};
+
+PS_OUTPUT main()
+{
+   PS_OUTPUT psout;
+
+   float2 r00 = g_tTex2dmsf4.GetSamplePosition(1);
+   float2 r01 = g_tTex2dmsf4a.GetSamplePosition(2);
+
+   psout.Color = 1.0;
+   psout.Depth = 1.0;
+
+   return psout;
+}
index 2561af9..e4cb4b0 100644 (file)
@@ -76,6 +76,8 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.assoc.frag", "PixelShaderFunction"},
         {"hlsl.attribute.frag", "PixelShaderFunction"},
         {"hlsl.buffer.frag", "PixelShaderFunction"},
+        {"hlsl.calculatelod.dx10.frag", "main"},
+        {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
         {"hlsl.conditional.frag", "PixelShaderFunction"},
         {"hlsl.discard.frag", "PixelShaderFunction"},
@@ -90,6 +92,7 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.gather.offsetarray.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.frag", "main"},
         {"hlsl.getdimensions.dx10.vert", "main"},
+        {"hlsl.getsampleposition.dx10.frag", "main"},
         {"hlsl.if.frag", "PixelShaderFunction"},
         {"hlsl.inoutquals.frag", "main"},
         {"hlsl.init.frag", "ShaderFunction"},
index 814a848..d695ca1 100755 (executable)
@@ -1273,6 +1273,38 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
             break;
         }
         
+    case EOpMethodCalculateLevelOfDetail:
+    case EOpMethodCalculateLevelOfDetailUnclamped:
+        {
+            TIntermTyped* argTex    = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* argSamp   = argAggregate->getSequence()[1]->getAsTyped();
+            TIntermTyped* argCoord  = argAggregate->getSequence()[2]->getAsTyped();
+
+            TIntermAggregate* txquerylod = new TIntermAggregate(EOpTextureQueryLod);
+
+            TIntermAggregate* txcombine = handleSamplerTextureCombine(loc, argTex, argSamp);
+            txquerylod->getSequence().push_back(txcombine);
+            txquerylod->getSequence().push_back(argCoord);
+
+            TIntermTyped* lodComponent = intermediate.addConstantUnion(0, loc, true);
+            TIntermTyped* lodComponentIdx = intermediate.addIndex(EOpIndexDirect, txquerylod, lodComponent, loc);
+            lodComponentIdx->setType(TType(EbtFloat, EvqTemporary, 1));
+
+            node = lodComponentIdx;
+
+            // We cannot currently obtain the unclamped LOD
+            if (op == EOpMethodCalculateLevelOfDetailUnclamped)
+                error(loc, "unimplemented: CalculateLevelOfDetailUnclamped", "", "");
+
+            break;
+        }
+
+    case EOpMethodGetSamplePosition:
+        {
+            error(loc, "unimplemented: GetSamplePosition", "", "");
+            break;
+        }
+
     default:
         break; // most pass through unchanged
     }
index e78f465..edfba9c 100755 (executable)
@@ -132,6 +132,12 @@ bool HasMipInCoord(const glslang::TString& name, bool isMS)
     return name == "Load" && !isMS;
 }
 
+// LOD calculations don't pass the array level in the coordinate.
+bool NoArrayCoord(const glslang::TString& name)
+{
+    return name == "CalculateLevelOfDetail" || name == "CalculateLevelOfDetailUnclamped";
+}
+
 // Handle IO params marked with > or <
 const char* IoParam(glslang::TString& s, const char* nthArgOrder)
 {
@@ -632,6 +638,11 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
         { "Gather",             /*!O*/        "V4",    nullptr,   "%@,S,V",         "FIU,S,F",       EShLangVSPSGS },
         { "Gather",             /* O*/        "V4",    nullptr,   "%@,S,V,V",       "FIU,S,F,I",     EShLangVSPSGS },
 
+        { "CalculateLevelOfDetail",           "S",     "F",       "%@,S,V",         "FUI,S,F",       EShLangFragmentMask },
+        { "CalculateLevelOfDetailUnclamped",  "S",     "F",       "%@,S,V",         "FUI,S,F",       EShLangFragmentMask },
+
+        { "GetSamplePosition",                "V2",    "F",       "$&2,S",          "FUI,I",         EShLangVSPSGS },
+
         // table of overloads from: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509693(v=vs.85).aspx
         // 
         // UINT Width
@@ -770,8 +781,9 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c
                                 // 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)
+                                // arrayed textures have one extra coordinate dimension, except for
+                                // the CalculateLevelOfDetail family.
+                                if (isArrayed && arg == coordArg && !NoArrayCoord(intrinsic.name))
                                     argDim0++;
 
                                 // Some texture methods use an addition arg dimension to hold mip
@@ -982,7 +994,10 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil
     symbolTable.relateToOperator("SampleLevel",                 EOpMethodSampleLevel);
     symbolTable.relateToOperator("Load",                        EOpMethodLoad);
     symbolTable.relateToOperator("GetDimensions",               EOpMethodGetDimensions);
+    symbolTable.relateToOperator("GetSamplePosition",           EOpMethodGetSamplePosition);
     symbolTable.relateToOperator("Gather",                      EOpMethodGather);
+    symbolTable.relateToOperator("CalculateLevelOfDetail",      EOpMethodCalculateLevelOfDetail);
+    symbolTable.relateToOperator("CalculateLevelOfDetailUnclamped", EOpMethodCalculateLevelOfDetailUnclamped);
 }
 
 //