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

View File

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

View File

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

View File

@ -1,9 +1,14 @@
struct VI { struct VI {
float4 m[2]; float4 m[2];
uint2 coord; 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 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). // 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" #define GLSLANG_DATE "16-Sep-2016"

View File

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

View File

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

View File

@ -129,7 +129,7 @@ public:
void boolCheck(const TSourceLoc&, const TIntermTyped*); void boolCheck(const TSourceLoc&, const TIntermTyped*);
void globalQualifierFix(const TSourceLoc&, TQualifier&); void globalQualifierFix(const TSourceLoc&, TQualifier&);
bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType); 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&); int computeSamplerTypeIndex(TSampler&);
TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration); 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); void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes);