HLSL: Improve setting and testing of interpolation qualifiers.

Notably, use of 'linear' on a non-input could mark it as an input.
This commit is contained in:
John Kessenich 2016-09-16 17:10:39 -06:00
parent d21baed6bc
commit 34e7ee79bb
8 changed files with 299 additions and 184 deletions

View File

@ -6,9 +6,10 @@ WARNING: 0:30: 'register' : ignoring shader_profile
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:34 Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
0:34 Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (global 4-component vector of float)
0:34 Function Parameters:
0:34 'input' (layout(location=0 ) in 4-component vector of float)
0:34 's' (in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? Sequence
0:39 Compare Equal (temp bool)
0:39 's3' (temp structure{temp 3-component vector of bool b3})
@ -18,10 +19,7 @@ gl_FragCoord origin is upper left
0:40 's2' (global structure{temp 4-component vector of float i})
0:40 Constant:
0:40 0 (const int)
0:40 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float)
0:40 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:40 Constant:
0:40 7 (const int)
0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
0:42 Sequence
0:42 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
@ -30,11 +28,18 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
0:? 's2' (global structure{temp 4-component vector of float i})
0:? 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? 'ff5' (layout(binding=5 offset=20 ) global 3-component vector of float)
0:? 'ff6' (layout(binding=8 offset=36 ) global 3-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float)
0:? 'a' (layout(location=1 ) smooth in 4-component vector of float)
0:? 'b' (layout(location=2 ) flat in bool)
0:? 'c' (layout(location=3 ) centroid noperspective in 1-component vector of float)
0:? 'd' (layout(location=4 ) centroid sample in 2-component vector of float)
0:? 'ff1' (in bool Face)
0:? 'ff2' (layout(location=5 offset=4 ) in bool)
0:? 'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
Linked fragment stage:
@ -43,9 +48,10 @@ Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:34 Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
0:34 Function Definition: PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (global 4-component vector of float)
0:34 Function Parameters:
0:34 'input' (layout(location=0 ) in 4-component vector of float)
0:34 's' (in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? Sequence
0:39 Compare Equal (temp bool)
0:39 's3' (temp structure{temp 3-component vector of bool b3})
@ -55,10 +61,7 @@ gl_FragCoord origin is upper left
0:40 's2' (global structure{temp 4-component vector of float i})
0:40 Constant:
0:40 0 (const int)
0:40 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float)
0:40 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:40 Constant:
0:40 7 (const int)
0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
0:42 Sequence
0:42 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
@ -67,20 +70,27 @@ gl_FragCoord origin is upper left
0:? Linker Objects
0:? 's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
0:? 's2' (global structure{temp 4-component vector of float i})
0:? 's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, layout(offset=4 ) temp bool ff2, layout(binding=0 offset=4 ) temp bool ff3, layout(binding=0 offset=4 ) temp 4-component vector of float ff4})
0:? 'ff5' (layout(binding=5 offset=20 ) global 3-component vector of float)
0:? 'ff6' (layout(binding=8 offset=36 ) global 3-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float)
0:? 'a' (layout(location=1 ) smooth in 4-component vector of float)
0:? 'b' (layout(location=2 ) flat in bool)
0:? 'c' (layout(location=3 ) centroid noperspective in 1-component vector of float)
0:? 'd' (layout(location=4 ) centroid sample in 2-component vector of float)
0:? 'ff1' (in bool Face)
0:? 'ff2' (layout(location=5 offset=4 ) in bool)
0:? 'ff3' (layout(location=6 binding=0 offset=4 ) in bool)
0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 46
// Id's are bound by 52
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 34 36
EntryPoint Fragment 4 "PixelShaderFunction" 25 30 31 41 43 45 48 49 50 51
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 8 "FS"
@ -89,33 +99,47 @@ gl_FragCoord origin is upper left
Name 19 ""
MemberName 19 0 "i"
Name 21 "s2"
Name 25 ""
MemberName 25 0 "a"
MemberName 25 1 "b"
MemberName 25 2 "c"
MemberName 25 3 "d"
MemberName 25 4 "ff1"
MemberName 25 5 "ff2"
MemberName 25 6 "ff3"
MemberName 25 7 "ff4"
Name 27 "s4"
Name 34 "@entryPointOutput"
Name 36 "input"
Name 39 "myS"
MemberName 39(myS) 0 "b"
MemberName 39(myS) 1 "c"
MemberName 39(myS) 2 "a"
MemberName 39(myS) 3 "d"
Name 41 "s1"
Name 44 "ff5"
Name 45 "ff6"
MemberDecorate 25 4 BuiltIn FrontFacing
Decorate 34(@entryPointOutput) Location 0
Decorate 36(input) Location 0
Decorate 44(ff5) Offset 20
Decorate 44(ff5) Binding 5
Decorate 45(ff6) Offset 36
Decorate 45(ff6) Binding 8
Name 25 "ff4"
Name 30 "@entryPointOutput"
Name 31 "input"
Name 34 "myS"
MemberName 34(myS) 0 "b"
MemberName 34(myS) 1 "c"
MemberName 34(myS) 2 "a"
MemberName 34(myS) 3 "d"
Name 36 "s1"
Name 39 "ff5"
Name 40 "ff6"
Name 41 "a"
Name 43 "b"
Name 45 "c"
Name 48 "d"
Name 49 "ff1"
Name 50 "ff2"
Name 51 "ff3"
Decorate 25(ff4) Offset 4
Decorate 25(ff4) Location 7
Decorate 25(ff4) Binding 0
Decorate 30(@entryPointOutput) Location 0
Decorate 31(input) Location 0
Decorate 39(ff5) Offset 20
Decorate 39(ff5) Binding 5
Decorate 40(ff6) Offset 36
Decorate 40(ff6) Binding 8
Decorate 41(a) Location 1
Decorate 43(b) Flat
Decorate 43(b) Location 2
Decorate 45(c) NoPerspective
Decorate 45(c) Centroid
Decorate 45(c) Location 3
Decorate 48(d) Centroid
Decorate 48(d) Location 4
Decorate 49(ff1) BuiltIn FrontFacing
Decorate 50(ff2) Offset 4
Decorate 50(ff2) Location 5
Decorate 51(ff3) Offset 4
Decorate 51(ff3) Location 6
Decorate 51(ff3) Binding 0
2: TypeVoid
3: TypeFunction 2
6: TypeBool
@ -129,23 +153,30 @@ gl_FragCoord origin is upper left
21(s2): 20(ptr) Variable Private
22: TypeInt 32 1
23: 22(int) Constant 0
24: TypeVector 17(float) 2
25: TypeStruct 18(fvec4) 6(bool) 17(float) 24(fvec2) 6(bool) 6(bool) 6(bool) 18(fvec4)
26: TypePointer Private 25(struct)
27(s4): 26(ptr) Variable Private
28: 22(int) Constant 7
29: TypePointer Private 18(fvec4)
33: TypePointer Output 18(fvec4)
34(@entryPointOutput): 33(ptr) Variable Output
35: TypePointer Input 18(fvec4)
36(input): 35(ptr) Variable Input
39(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
40: TypePointer Private 39(myS)
41(s1): 40(ptr) Variable Private
42: TypeVector 17(float) 3
43: TypePointer Private 42(fvec3)
44(ff5): 43(ptr) Variable Private
45(ff6): 43(ptr) Variable Private
24: TypePointer Input 18(fvec4)
25(ff4): 24(ptr) Variable Input
27: TypePointer Private 18(fvec4)
29: TypePointer Output 18(fvec4)
30(@entryPointOutput): 29(ptr) Variable Output
31(input): 24(ptr) Variable Input
34(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
35: TypePointer Private 34(myS)
36(s1): 35(ptr) Variable Private
37: TypeVector 17(float) 3
38: TypePointer Private 37(fvec3)
39(ff5): 38(ptr) Variable Private
40(ff6): 38(ptr) Variable Private
41(a): 24(ptr) Variable Input
42: TypePointer Input 6(bool)
43(b): 42(ptr) Variable Input
44: TypePointer Input 17(float)
45(c): 44(ptr) Variable Input
46: TypeVector 17(float) 2
47: TypePointer Input 46(fvec2)
48(d): 47(ptr) Variable Input
49(ff1): 42(ptr) Variable Input
50(ff2): 42(ptr) Variable Input
51(ff3): 42(ptr) Variable Input
4(PixelShaderFunction): 2 Function None 3
5: Label
10(s3): 9(ptr) Variable Function
@ -155,11 +186,10 @@ gl_FragCoord origin is upper left
14: 7(bvec3) CompositeExtract 12 0
15: 7(bvec3) LogicalEqual 13 14
16: 6(bool) All 15
30: 29(ptr) AccessChain 27(s4) 28
31: 18(fvec4) Load 30
32: 29(ptr) AccessChain 21(s2) 23
Store 32 31
37: 18(fvec4) Load 36(input)
Store 34(@entryPointOutput) 37
26: 18(fvec4) Load 25(ff4)
28: 27(ptr) AccessChain 21(s2) 23
Store 28 26
32: 18(fvec4) Load 31(input)
Store 30(@entryPointOutput) 32
Return
FunctionEnd

View File

@ -1,42 +1,67 @@
hlsl.structin.vert
Shader version: 450
0:? Sequence
0:7 Function Definition: main(vf4;struct-VI-vf4[2]-vu21;vf4; (global 4-component vector of float Position)
0:7 Function Parameters:
0:7 'd' (layout(location=0 ) in 4-component vector of float)
0:7 'vi' (in structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord})
0:7 'e' (layout(location=4 ) in 4-component vector of float)
0:8 Function Definition: main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; (global structure Position{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:8 Function Parameters:
0:8 'd' (layout(location=0 ) in 4-component vector of float)
0:8 'vi' (in structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:8 'e' (layout(location=5 ) in 4-component vector of float)
0:? Sequence
0:8 Sequence
0:8 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float Position)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:8 Constant:
0:8 1 (const int)
0:8 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:8 Constant:
0:8 0 (const int)
0:8 Construct vec4 (temp 4-component vector of float)
0:8 Convert uint to float (temp float)
0:8 direct index (temp uint)
0:? 'coord' (layout(location=3 ) in 2-component vector of uint)
0:8 Constant:
0:8 0 (const int)
0:8 'd' (layout(location=0 ) in 4-component vector of float)
0:8 'e' (layout(location=4 ) in 4-component vector of float)
0:8 Branch: Return
0:11 move second child to first child (temp 4-component vector of float)
0:11 b: direct index for structure (smooth temp 4-component vector of float)
0:11 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:11 Constant:
0:11 2 (const int)
0:11 add (temp 4-component vector of float)
0:11 add (temp 4-component vector of float)
0:11 add (temp 4-component vector of float)
0:11 add (temp 4-component vector of float)
0:11 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:11 Constant:
0:11 1 (const int)
0:11 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:11 Constant:
0:11 0 (const int)
0:11 Construct vec4 (temp 4-component vector of float)
0:11 Convert uint to float (temp float)
0:11 direct index (temp uint)
0:? 'coord' (layout(location=3 ) in 2-component vector of uint)
0:11 Constant:
0:11 0 (const int)
0:11 'd' (layout(location=0 ) in 4-component vector of float)
0:11 'e' (layout(location=5 ) in 4-component vector of float)
0:? Sequence
0:? Sequence
0:13 move second child to first child (temp 2-element array of 4-component vector of float)
0:? 'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
0:13 m: direct index for structure (temp 2-element array of 4-component vector of float)
0:13 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child (temp 2-component vector of uint)
0:? 'coord' (layout(location=2 ) out 2-component vector of uint)
0:13 coord: direct index for structure (temp 2-component vector of uint)
0:13 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:13 Constant:
0:13 1 (const int)
0:13 move second child to first child (temp 4-component vector of float)
0:? 'b' (layout(location=3 ) smooth out 4-component vector of float)
0:13 b: direct index for structure (smooth temp 4-component vector of float)
0:13 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:13 Constant:
0:13 2 (const int)
0:13 Branch: Return
0:? Linker Objects
0:? '@entryPointOutput' (out 4-component vector of float Position)
0:? 'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
0:? 'coord' (layout(location=2 ) out 2-component vector of uint)
0:? 'b' (layout(location=3 ) smooth out 4-component vector of float)
0:? 'd' (layout(location=0 ) in 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:? 'coord' (layout(location=3 ) in 2-component vector of uint)
0:? 'e' (layout(location=4 ) in 4-component vector of float)
0:? 'b' (layout(location=4 ) smooth in 4-component vector of float)
0:? 'e' (layout(location=5 ) in 4-component vector of float)
Linked vertex stage:
@ -44,100 +69,158 @@ Linked vertex stage:
Shader version: 450
0:? Sequence
0:7 Function Definition: main(vf4;struct-VI-vf4[2]-vu21;vf4; (global 4-component vector of float Position)
0:7 Function Parameters:
0:7 'd' (layout(location=0 ) in 4-component vector of float)
0:7 'vi' (in structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord})
0:7 'e' (layout(location=4 ) in 4-component vector of float)
0:8 Function Definition: main(vf4;struct-VI-vf4[2]-vu2-vf41;vf4; (global structure Position{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:8 Function Parameters:
0:8 'd' (layout(location=0 ) in 4-component vector of float)
0:8 'vi' (in structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:8 'e' (layout(location=5 ) in 4-component vector of float)
0:? Sequence
0:8 Sequence
0:8 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (out 4-component vector of float Position)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 add (temp 4-component vector of float)
0:8 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:8 Constant:
0:8 1 (const int)
0:8 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:8 Constant:
0:8 0 (const int)
0:8 Construct vec4 (temp 4-component vector of float)
0:8 Convert uint to float (temp float)
0:8 direct index (temp uint)
0:? 'coord' (layout(location=3 ) in 2-component vector of uint)
0:8 Constant:
0:8 0 (const int)
0:8 'd' (layout(location=0 ) in 4-component vector of float)
0:8 'e' (layout(location=4 ) in 4-component vector of float)
0:8 Branch: Return
0:11 move second child to first child (temp 4-component vector of float)
0:11 b: direct index for structure (smooth temp 4-component vector of float)
0:11 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:11 Constant:
0:11 2 (const int)
0:11 add (temp 4-component vector of float)
0:11 add (temp 4-component vector of float)
0:11 add (temp 4-component vector of float)
0:11 add (temp 4-component vector of float)
0:11 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:11 Constant:
0:11 1 (const int)
0:11 direct index (layout(location=1 ) temp 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:11 Constant:
0:11 0 (const int)
0:11 Construct vec4 (temp 4-component vector of float)
0:11 Convert uint to float (temp float)
0:11 direct index (temp uint)
0:? 'coord' (layout(location=3 ) in 2-component vector of uint)
0:11 Constant:
0:11 0 (const int)
0:11 'd' (layout(location=0 ) in 4-component vector of float)
0:11 'e' (layout(location=5 ) in 4-component vector of float)
0:? Sequence
0:? Sequence
0:13 move second child to first child (temp 2-element array of 4-component vector of float)
0:? 'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
0:13 m: direct index for structure (temp 2-element array of 4-component vector of float)
0:13 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:13 Constant:
0:13 0 (const int)
0:13 move second child to first child (temp 2-component vector of uint)
0:? 'coord' (layout(location=2 ) out 2-component vector of uint)
0:13 coord: direct index for structure (temp 2-component vector of uint)
0:13 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:13 Constant:
0:13 1 (const int)
0:13 move second child to first child (temp 4-component vector of float)
0:? 'b' (layout(location=3 ) smooth out 4-component vector of float)
0:13 b: direct index for structure (smooth temp 4-component vector of float)
0:13 'local' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, smooth temp 4-component vector of float b})
0:13 Constant:
0:13 2 (const int)
0:13 Branch: Return
0:? Linker Objects
0:? '@entryPointOutput' (out 4-component vector of float Position)
0:? 'm' (layout(location=0 ) out 2-element array of 4-component vector of float)
0:? 'coord' (layout(location=2 ) out 2-component vector of uint)
0:? 'b' (layout(location=3 ) smooth out 4-component vector of float)
0:? 'd' (layout(location=0 ) in 4-component vector of float)
0:? 'm' (layout(location=1 ) in 2-element array of 4-component vector of float)
0:? 'coord' (layout(location=3 ) in 2-component vector of uint)
0:? 'e' (layout(location=4 ) in 4-component vector of float)
0:? 'b' (layout(location=4 ) smooth in 4-component vector of float)
0:? 'e' (layout(location=5 ) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 41
// Id's are bound by 60
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 9 14 26 34 37
EntryPoint Vertex 4 "main" 18 28 36 39 45 50 55 59
Name 4 "main"
Name 9 "@entryPointOutput"
Name 14 "m"
Name 26 "coord"
Name 34 "d"
Name 37 "e"
Decorate 9(@entryPointOutput) BuiltIn Position
Decorate 14(m) Location 1
Decorate 26(coord) Location 3
Decorate 34(d) Location 0
Decorate 37(e) Location 4
Name 12 "VI"
MemberName 12(VI) 0 "m"
MemberName 12(VI) 1 "coord"
MemberName 12(VI) 2 "b"
Name 14 "local"
Name 18 "m"
Name 28 "coord"
Name 36 "d"
Name 39 "e"
Name 45 "m"
Name 50 "coord"
Name 55 "b"
Name 59 "b"
Decorate 18(m) Location 1
Decorate 28(coord) Location 3
Decorate 36(d) Location 0
Decorate 39(e) Location 5
Decorate 45(m) Location 0
Decorate 50(coord) Location 2
Decorate 55(b) Location 3
Decorate 59(b) Location 4
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Output 7(fvec4)
9(@entryPointOutput): 8(ptr) Variable Output
10: TypeInt 32 0
11: 10(int) Constant 2
12: TypeArray 7(fvec4) 11
13: TypePointer Input 12
14(m): 13(ptr) Variable Input
8: TypeInt 32 0
9: 8(int) Constant 2
10: TypeArray 7(fvec4) 9
11: TypeVector 8(int) 2
12(VI): TypeStruct 10 11(ivec2) 7(fvec4)
13: TypePointer Function 12(VI)
15: TypeInt 32 1
16: 15(int) Constant 1
17: TypePointer Input 7(fvec4)
20: 15(int) Constant 0
24: TypeVector 10(int) 2
25: TypePointer Input 24(ivec2)
26(coord): 25(ptr) Variable Input
27: 10(int) Constant 0
28: TypePointer Input 10(int)
34(d): 17(ptr) Variable Input
37(e): 17(ptr) Variable Input
16: 15(int) Constant 2
17: TypePointer Input 10
18(m): 17(ptr) Variable Input
19: 15(int) Constant 1
20: TypePointer Input 7(fvec4)
23: 15(int) Constant 0
27: TypePointer Input 11(ivec2)
28(coord): 27(ptr) Variable Input
29: 8(int) Constant 0
30: TypePointer Input 8(int)
36(d): 20(ptr) Variable Input
39(e): 20(ptr) Variable Input
42: TypePointer Function 7(fvec4)
44: TypePointer Output 10
45(m): 44(ptr) Variable Output
46: TypePointer Function 10
49: TypePointer Output 11(ivec2)
50(coord): 49(ptr) Variable Output
51: TypePointer Function 11(ivec2)
54: TypePointer Output 7(fvec4)
55(b): 54(ptr) Variable Output
59(b): 20(ptr) Variable Input
4(main): 2 Function None 3
5: Label
18: 17(ptr) AccessChain 14(m) 16
19: 7(fvec4) Load 18
21: 17(ptr) AccessChain 14(m) 20
14(local): 13(ptr) Variable Function
21: 20(ptr) AccessChain 18(m) 19
22: 7(fvec4) Load 21
23: 7(fvec4) FAdd 19 22
29: 28(ptr) AccessChain 26(coord) 27
30: 10(int) Load 29
31: 6(float) ConvertUToF 30
32: 7(fvec4) CompositeConstruct 31 31 31 31
33: 7(fvec4) FAdd 23 32
35: 7(fvec4) Load 34(d)
36: 7(fvec4) FAdd 33 35
38: 7(fvec4) Load 37(e)
39: 7(fvec4) FAdd 36 38
Store 9(@entryPointOutput) 39
24: 20(ptr) AccessChain 18(m) 23
25: 7(fvec4) Load 24
26: 7(fvec4) FAdd 22 25
31: 30(ptr) AccessChain 28(coord) 29
32: 8(int) Load 31
33: 6(float) ConvertUToF 32
34: 7(fvec4) CompositeConstruct 33 33 33 33
35: 7(fvec4) FAdd 26 34
37: 7(fvec4) Load 36(d)
38: 7(fvec4) FAdd 35 37
40: 7(fvec4) Load 39(e)
41: 7(fvec4) FAdd 38 40
43: 42(ptr) AccessChain 14(local) 16
Store 43 41
47: 46(ptr) AccessChain 14(local) 23
48: 10 Load 47
Store 45(m) 48
52: 51(ptr) AccessChain 14(local) 19
53: 11(ivec2) Load 52
Store 50(coord) 53
56: 42(ptr) AccessChain 14(local) 16
57: 7(fvec4) Load 56
Store 55(b) 57
Return
FunctionEnd

View File

@ -16,7 +16,7 @@ struct {
float4 i;
} s2;
struct {
struct IN_S {
linear float4 a;
nointerpolation bool b;
noperspective centroid float1 c;
@ -25,19 +25,19 @@ struct {
bool ff2 : packoffset(c0.y);
bool ff3 : packoffset(c0.y) : register(ps_5_0, s0) ;
float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s0) <int bambam=30;> ;
} s4;
};
float3 ff5 : packoffset(c1.y) : register(ps_5_0, s[5]);
float3 ff6 : packoffset(c2.y) : register(s3[5]);
float4 PixelShaderFunction(float4 input) : COLOR0
float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0
{
struct FS {
bool3 b3;
} s3;
s3 == s3;
s2.i = s4.ff4;
s2.i = s.ff4;
return input;
}

View File

@ -1,9 +1,14 @@
struct VI {
float4 m[2];
uint2 coord;
linear float4 b;
};
float4 main(float4 d, VI vi, float4 e) : SV_POSITION
VI main(float4 d, VI vi, float4 e) : SV_POSITION
{
return vi.m[1] + vi.m[0] + float4(vi.coord.x) + d + e;
VI local;
local.b = vi.m[1] + vi.m[0] + float4(vi.coord.x) + d + e;
return local;
}

View File

@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.1489"
#define GLSLANG_REVISION "Overload400-PrecQual.1490"
#define GLSLANG_DATE "16-Sep-2016"

View File

@ -435,7 +435,7 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type)
return false;
if (type.getBasicType() == EbtBlock) {
// the type was a block, which set some parts of the qualifier
parseContext.mergeQualifiers(loc, type.getQualifier(), qualifier, true);
parseContext.mergeQualifiers(type.getQualifier(), qualifier);
// further, it can create an anonymous instance of the block
if (peekTokenClass(EHTokSemicolon))
parseContext.declareBlock(loc, type);
@ -476,7 +476,6 @@ bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
qualifier.volatil = true;
break;
case EHTokLinear:
qualifier.storage = EvqVaryingIn;
qualifier.smooth = true;
break;
case EHTokCentroid:

View File

@ -728,7 +728,7 @@ void HlslParseContext::flattenStruct(const TVariable& variable)
for (int member = 0; member < (int)members.size(); ++member) {
TVariable* memberVariable = makeInternalVariable(members[member].type->getFieldName().c_str(),
*members[member].type);
memberVariable->getWritableType().getQualifier().storage = variable.getType().getQualifier().storage;
mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier());
memberVariables.push_back(memberVariable);
}
@ -3049,7 +3049,7 @@ void HlslParseContext::globalQualifierFix(const TSourceLoc&, TQualifier& qualifi
// 'dst', for the purpose of error checking order for versions
// that require specific orderings of qualifiers.
//
void HlslParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, const TQualifier& src, bool force)
void HlslParseContext::mergeQualifiers(TQualifier& dst, const TQualifier& src)
{
// Storage qualification
if (dst.storage == EvqTemporary || dst.storage == EvqGlobal)
@ -3060,8 +3060,6 @@ void HlslParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, c
else if ((dst.storage == EvqIn && src.storage == EvqConst) ||
(dst.storage == EvqConst && src.storage == EvqIn))
dst.storage = EvqConstReadOnly;
else if (src.storage != EvqTemporary && src.storage != EvqGlobal)
error(loc, "too many storage qualifiers", GetStorageQualifierString(src.storage), "");
// Layout qualifiers
mergeObjectLayoutQualifiers(dst, src, false);
@ -4586,7 +4584,7 @@ void HlslParseContext::declareBlock(const TSourceLoc& loc, TType& type, const TS
}
TQualifier newMemberQualification = defaultQualification;
mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false);
mergeQualifiers(newMemberQualification, memberQualifier);
memberQualifier = newMemberQualification;
}

View File

@ -129,7 +129,7 @@ public:
void boolCheck(const TSourceLoc&, const TIntermTyped*);
void globalQualifierFix(const TSourceLoc&, TQualifier&);
bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
void mergeQualifiers(const TSourceLoc&, TQualifier& dst, const TQualifier& src, bool force);
void mergeQualifiers(TQualifier& dst, const TQualifier& src);
int computeSamplerTypeIndex(TSampler&);
TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration);
void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);