HLSL: Move to fine-grained control for defining input/output/uniform IO types.
This commit is contained in:
parent
727b374fd3
commit
bf47286fe7
@ -87,7 +87,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:35 move second child to first child (temp 4-element array of float)
|
0:35 move second child to first child (temp 4-element array of float)
|
||||||
0:35 'local_float_array' (temp 4-element array of float)
|
0:35 'local_float_array' (temp 4-element array of float)
|
||||||
0:35 g_floats: direct index for structure (layout(offset=384 ) uniform 4-element array of float)
|
0:35 g_floats: direct index for structure (layout(offset=384 ) uniform 4-element array of float)
|
||||||
0:35 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
0:35 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
||||||
0:35 Constant:
|
0:35 Constant:
|
||||||
0:35 2 (const uint)
|
0:35 2 (const uint)
|
||||||
0:37 move second child to first child (temp 4-component vector of float)
|
0:37 move second child to first child (temp 4-component vector of float)
|
||||||
@ -165,7 +165,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
|
0:? 'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
|
||||||
0:? 'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
|
0:? 'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
|
||||||
0:? 'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
|
0:? 'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
|
||||||
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
||||||
0:? 'not_flattened_a' (global 5-element array of int)
|
0:? 'not_flattened_a' (global 5-element array of int)
|
||||||
0:? 'color' (layout(location=0 ) out 4-component vector of float)
|
0:? 'color' (layout(location=0 ) out 4-component vector of float)
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:35 move second child to first child (temp 4-element array of float)
|
0:35 move second child to first child (temp 4-element array of float)
|
||||||
0:35 'local_float_array' (temp 4-element array of float)
|
0:35 'local_float_array' (temp 4-element array of float)
|
||||||
0:35 g_floats: direct index for structure (layout(offset=384 ) uniform 4-element array of float)
|
0:35 g_floats: direct index for structure (layout(offset=384 ) uniform 4-element array of float)
|
||||||
0:35 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
0:35 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
||||||
0:35 Constant:
|
0:35 Constant:
|
||||||
0:35 2 (const uint)
|
0:35 2 (const uint)
|
||||||
0:37 move second child to first child (temp 4-component vector of float)
|
0:37 move second child to first child (temp 4-component vector of float)
|
||||||
@ -339,7 +339,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
|
0:? 'g_samp_explicit[0]' (layout(binding=5 ) uniform sampler)
|
||||||
0:? 'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
|
0:? 'g_samp_explicit[1]' (layout(binding=6 ) uniform sampler)
|
||||||
0:? 'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
|
0:? 'g_samp_explicit[2]' (layout(binding=7 ) uniform sampler)
|
||||||
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-element array of 3X3 matrix of float g_mats, layout(binding=10 offset=192 ) uniform 4-element array of 3X3 matrix of float g_mats_explicit, layout(offset=384 ) uniform 4-element array of float g_floats})
|
||||||
0:? 'not_flattened_a' (global 5-element array of int)
|
0:? 'not_flattened_a' (global 5-element array of int)
|
||||||
0:? 'color' (layout(location=0 ) out 4-component vector of float)
|
0:? 'color' (layout(location=0 ) out 4-component vector of float)
|
||||||
|
|
||||||
|
|||||||
@ -13,11 +13,11 @@ gl_FragCoord origin is upper left
|
|||||||
0:10 component-wise multiply (temp 4-component vector of float)
|
0:10 component-wise multiply (temp 4-component vector of float)
|
||||||
0:10 'input' (in 4-component vector of float)
|
0:10 'input' (in 4-component vector of float)
|
||||||
0:10 AmbientColor: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
|
0:10 AmbientColor: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
|
||||||
0:10 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(offset=32 ) uniform 4-component vector of float ff3, layout(offset=48 ) uniform 4-component vector of float ff4})
|
0:10 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
|
||||||
0:10 Constant:
|
0:10 Constant:
|
||||||
0:10 0 (const uint)
|
0:10 0 (const uint)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(offset=32 ) uniform 4-component vector of float ff3, layout(offset=48 ) uniform 4-component vector of float ff4})
|
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
|
||||||
|
|
||||||
|
|
||||||
Linked fragment stage:
|
Linked fragment stage:
|
||||||
@ -35,11 +35,11 @@ gl_FragCoord origin is upper left
|
|||||||
0:10 component-wise multiply (temp 4-component vector of float)
|
0:10 component-wise multiply (temp 4-component vector of float)
|
||||||
0:10 'input' (in 4-component vector of float)
|
0:10 'input' (in 4-component vector of float)
|
||||||
0:10 AmbientColor: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
|
0:10 AmbientColor: direct index for structure (layout(offset=0 ) uniform 4-component vector of float)
|
||||||
0:10 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(offset=32 ) uniform 4-component vector of float ff3, layout(offset=48 ) uniform 4-component vector of float ff4})
|
0:10 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
|
||||||
0:10 Constant:
|
0:10 Constant:
|
||||||
0:10 0 (const uint)
|
0:10 0 (const uint)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(offset=32 ) uniform 4-component vector of float ff3, layout(offset=48 ) uniform 4-component vector of float ff4})
|
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform 4-component vector of float AmbientColor, layout(offset=16 ) uniform bool ff1, layout(offset=20 ) uniform float ff2, layout(binding=0 offset=32 ) uniform 4-component vector of float ff3, layout(binding=1 offset=48 ) uniform 4-component vector of float ff4})
|
||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
|
|||||||
@ -38,7 +38,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 0 (const int)
|
0:34 0 (const int)
|
||||||
0:34 a: direct index for structure (smooth temp 4-component vector of float)
|
0:34 a: direct index for structure (smooth temp 4-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 0 (const int)
|
0:34 0 (const int)
|
||||||
0:34 move second child to first child (temp bool)
|
0:34 move second child to first child (temp bool)
|
||||||
@ -47,7 +47,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 1 (const int)
|
0:34 1 (const int)
|
||||||
0:34 b: direct index for structure (flat temp bool)
|
0:34 b: direct index for structure (flat temp bool)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 1 (const int)
|
0:34 1 (const int)
|
||||||
0:34 move second child to first child (temp 1-component vector of float)
|
0:34 move second child to first child (temp 1-component vector of float)
|
||||||
@ -56,7 +56,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 2 (const int)
|
0:34 2 (const int)
|
||||||
0:34 c: direct index for structure (centroid noperspective temp 1-component vector of float)
|
0:34 c: direct index for structure (centroid noperspective temp 1-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 2 (const int)
|
0:34 2 (const int)
|
||||||
0:34 move second child to first child (temp 2-component vector of float)
|
0:34 move second child to first child (temp 2-component vector of float)
|
||||||
@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 3 (const int)
|
0:34 3 (const int)
|
||||||
0:34 d: direct index for structure (centroid sample temp 2-component vector of float)
|
0:34 d: direct index for structure (centroid sample temp 2-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 3 (const int)
|
0:34 3 (const int)
|
||||||
0:34 move second child to first child (temp bool)
|
0:34 move second child to first child (temp bool)
|
||||||
@ -79,8 +79,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 5 (const int)
|
0:34 5 (const int)
|
||||||
0:34 ff2: direct index for structure (layout(offset=4 ) temp bool)
|
0:34 ff2: direct index for structure (temp bool)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 4 (const int)
|
0:34 4 (const int)
|
||||||
0:34 move second child to first child (temp bool)
|
0:34 move second child to first child (temp bool)
|
||||||
@ -88,8 +88,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 6 (const int)
|
0:34 6 (const int)
|
||||||
0:34 ff3: direct index for structure (layout(binding=0 offset=4 ) temp bool)
|
0:34 ff3: direct index for structure (temp bool)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 5 (const int)
|
0:34 5 (const int)
|
||||||
0:34 move second child to first child (temp 4-component vector of float)
|
0:34 move second child to first child (temp 4-component vector of float)
|
||||||
@ -97,8 +97,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 7 (const int)
|
0:34 7 (const int)
|
||||||
0:34 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float)
|
0:34 ff4: direct index for structure (temp 4-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 6 (const int)
|
0:34 6 (const int)
|
||||||
0:34 move second child to first child (temp 4-component vector of float)
|
0:34 move second child to first child (temp 4-component vector of float)
|
||||||
@ -110,8 +110,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's2' (global structure{temp 4-component vector of float i})
|
0:? 's2' (global structure{temp 4-component vector of float i})
|
||||||
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:? 's' (layout(location=1 ) 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, 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:? 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform float ff5, layout(offset=52 ) uniform float ff6})
|
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
|
||||||
0:? 's_ff1' (in bool Face)
|
0:? 's_ff1' (in bool Face)
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 0 (const int)
|
0:34 0 (const int)
|
||||||
0:34 a: direct index for structure (smooth temp 4-component vector of float)
|
0:34 a: direct index for structure (smooth temp 4-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 0 (const int)
|
0:34 0 (const int)
|
||||||
0:34 move second child to first child (temp bool)
|
0:34 move second child to first child (temp bool)
|
||||||
@ -162,7 +162,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 1 (const int)
|
0:34 1 (const int)
|
||||||
0:34 b: direct index for structure (flat temp bool)
|
0:34 b: direct index for structure (flat temp bool)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 1 (const int)
|
0:34 1 (const int)
|
||||||
0:34 move second child to first child (temp 1-component vector of float)
|
0:34 move second child to first child (temp 1-component vector of float)
|
||||||
@ -171,7 +171,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 2 (const int)
|
0:34 2 (const int)
|
||||||
0:34 c: direct index for structure (centroid noperspective temp 1-component vector of float)
|
0:34 c: direct index for structure (centroid noperspective temp 1-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 2 (const int)
|
0:34 2 (const int)
|
||||||
0:34 move second child to first child (temp 2-component vector of float)
|
0:34 move second child to first child (temp 2-component vector of float)
|
||||||
@ -180,7 +180,7 @@ gl_FragCoord origin is upper left
|
|||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 3 (const int)
|
0:34 3 (const int)
|
||||||
0:34 d: direct index for structure (centroid sample temp 2-component vector of float)
|
0:34 d: direct index for structure (centroid sample temp 2-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 3 (const int)
|
0:34 3 (const int)
|
||||||
0:34 move second child to first child (temp bool)
|
0:34 move second child to first child (temp bool)
|
||||||
@ -194,8 +194,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 5 (const int)
|
0:34 5 (const int)
|
||||||
0:34 ff2: direct index for structure (layout(offset=4 ) temp bool)
|
0:34 ff2: direct index for structure (temp bool)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 4 (const int)
|
0:34 4 (const int)
|
||||||
0:34 move second child to first child (temp bool)
|
0:34 move second child to first child (temp bool)
|
||||||
@ -203,8 +203,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 6 (const int)
|
0:34 6 (const int)
|
||||||
0:34 ff3: direct index for structure (layout(binding=0 offset=4 ) temp bool)
|
0:34 ff3: direct index for structure (temp bool)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 5 (const int)
|
0:34 5 (const int)
|
||||||
0:34 move second child to first child (temp 4-component vector of float)
|
0:34 move second child to first child (temp 4-component vector of float)
|
||||||
@ -212,8 +212,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
0:? 's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 7 (const int)
|
0:34 7 (const int)
|
||||||
0:34 ff4: direct index for structure (layout(binding=0 offset=4 ) temp 4-component vector of float)
|
0:34 ff4: direct index for structure (temp 4-component vector of float)
|
||||||
0:34 's' (layout(location=1 ) 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, 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:34 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:34 Constant:
|
0:34 Constant:
|
||||||
0:34 6 (const int)
|
0:34 6 (const int)
|
||||||
0:34 move second child to first child (temp 4-component vector of float)
|
0:34 move second child to first child (temp 4-component vector of float)
|
||||||
@ -225,8 +225,8 @@ gl_FragCoord origin is upper left
|
|||||||
0:? 's2' (global structure{temp 4-component vector of float i})
|
0:? 's2' (global structure{temp 4-component vector of float i})
|
||||||
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:? 's' (layout(location=1 ) 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, 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:? 's' (layout(location=1 ) 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 ff2, temp bool ff3, temp 4-component vector of float ff4})
|
||||||
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform float ff5, layout(offset=52 ) uniform float ff6})
|
0:? 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6})
|
||||||
0:? 's_ff1' (in bool Face)
|
0:? 's_ff1' (in bool Face)
|
||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
@ -292,8 +292,8 @@ gl_FragCoord origin is upper left
|
|||||||
MemberDecorate 93(myS) 2 Offset 16
|
MemberDecorate 93(myS) 2 Offset 16
|
||||||
MemberDecorate 93(myS) 3 Offset 32
|
MemberDecorate 93(myS) 3 Offset 32
|
||||||
MemberDecorate 94($Global) 0 Offset 0
|
MemberDecorate 94($Global) 0 Offset 0
|
||||||
MemberDecorate 94($Global) 1 Offset 48
|
MemberDecorate 94($Global) 1 Offset 1620
|
||||||
MemberDecorate 94($Global) 2 Offset 52
|
MemberDecorate 94($Global) 2 Offset 1636
|
||||||
Decorate 94($Global) Block
|
Decorate 94($Global) Block
|
||||||
Decorate 96 DescriptorSet 0
|
Decorate 96 DescriptorSet 0
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
|
|||||||
@ -52,16 +52,16 @@ Shader version: 450
|
|||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:17 Constant:
|
0:17 Constant:
|
||||||
0:17 1 (const int)
|
0:17 1 (const int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:17 move second child to first child (temp int)
|
0:17 move second child to first child (temp int)
|
||||||
0:17 x1_in: direct index for structure (temp int)
|
0:17 x1_in: direct index for structure (temp int)
|
||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:17 Constant:
|
0:17 Constant:
|
||||||
0:17 2 (const int)
|
0:17 2 (const int)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
0:17 move second child to first child (temp 4-component vector of float)
|
0:17 move second child to first child (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (temp 4-component vector of float)
|
0:? 'Pos_loose' (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=3 ) in 4-component vector of float)
|
||||||
0:17 Sequence
|
0:17 Sequence
|
||||||
0:17 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:17 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
0:17 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:17 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
@ -95,9 +95,9 @@ Shader version: 450
|
|||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
||||||
0:? 'x0_in' (layout(location=0 ) in int)
|
0:? 'x0_in' (layout(location=0 ) in int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=3 ) in 4-component vector of float)
|
||||||
|
|
||||||
|
|
||||||
Linked vertex stage:
|
Linked vertex stage:
|
||||||
@ -156,16 +156,16 @@ Shader version: 450
|
|||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:17 Constant:
|
0:17 Constant:
|
||||||
0:17 1 (const int)
|
0:17 1 (const int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:17 move second child to first child (temp int)
|
0:17 move second child to first child (temp int)
|
||||||
0:17 x1_in: direct index for structure (temp int)
|
0:17 x1_in: direct index for structure (temp int)
|
||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:17 Constant:
|
0:17 Constant:
|
||||||
0:17 2 (const int)
|
0:17 2 (const int)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
0:17 move second child to first child (temp 4-component vector of float)
|
0:17 move second child to first child (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (temp 4-component vector of float)
|
0:? 'Pos_loose' (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=3 ) in 4-component vector of float)
|
||||||
0:17 Sequence
|
0:17 Sequence
|
||||||
0:17 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:17 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
0:17 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:17 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
@ -199,9 +199,9 @@ Shader version: 450
|
|||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
||||||
0:? 'x0_in' (layout(location=0 ) in int)
|
0:? 'x0_in' (layout(location=0 ) in int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=3 ) in 4-component vector of float)
|
||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
@ -239,9 +239,9 @@ Shader version: 450
|
|||||||
Name 61 "@entryPointOutput"
|
Name 61 "@entryPointOutput"
|
||||||
Name 67 "@entryPointOutput_Pos_out"
|
Name 67 "@entryPointOutput_Pos_out"
|
||||||
Decorate 40(x0_in) Location 0
|
Decorate 40(x0_in) Location 0
|
||||||
Decorate 44(Pos_in) BuiltIn Position
|
Decorate 44(Pos_in) Location 1
|
||||||
Decorate 47(x1_in) Location 1
|
Decorate 47(x1_in) Location 2
|
||||||
Decorate 51(Pos_loose) BuiltIn Position
|
Decorate 51(Pos_loose) Location 3
|
||||||
Decorate 61(@entryPointOutput) Location 0
|
Decorate 61(@entryPointOutput) Location 0
|
||||||
Decorate 67(@entryPointOutput_Pos_out) BuiltIn Position
|
Decorate 67(@entryPointOutput_Pos_out) BuiltIn Position
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
|
|||||||
@ -66,13 +66,13 @@ Shader version: 450
|
|||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:22 Constant:
|
0:22 Constant:
|
||||||
0:22 1 (const int)
|
0:22 1 (const int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:22 move second child to first child (temp int)
|
0:22 move second child to first child (temp int)
|
||||||
0:22 x1_in: direct index for structure (temp int)
|
0:22 x1_in: direct index for structure (temp int)
|
||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:22 Constant:
|
0:22 Constant:
|
||||||
0:22 2 (const int)
|
0:22 2 (const int)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
0:22 Sequence
|
0:22 Sequence
|
||||||
0:22 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:22 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
0:22 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:22 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
@ -105,8 +105,8 @@ Shader version: 450
|
|||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
||||||
0:? 'x0_in' (layout(location=0 ) in int)
|
0:? 'x0_in' (layout(location=0 ) in int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
|
|
||||||
|
|
||||||
Linked vertex stage:
|
Linked vertex stage:
|
||||||
@ -179,13 +179,13 @@ Shader version: 450
|
|||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:22 Constant:
|
0:22 Constant:
|
||||||
0:22 1 (const int)
|
0:22 1 (const int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:22 move second child to first child (temp int)
|
0:22 move second child to first child (temp int)
|
||||||
0:22 x1_in: direct index for structure (temp int)
|
0:22 x1_in: direct index for structure (temp int)
|
||||||
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
0:? 'vsin' (temp structure{temp int x0_in, temp 4-component vector of float Pos_in, temp int x1_in})
|
||||||
0:22 Constant:
|
0:22 Constant:
|
||||||
0:22 2 (const int)
|
0:22 2 (const int)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
0:22 Sequence
|
0:22 Sequence
|
||||||
0:22 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:22 move second child to first child (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
0:22 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
0:22 'flattenTemp' (temp structure{temp int x0_out, temp 4-component vector of float Pos_out, temp int x1_out})
|
||||||
@ -218,8 +218,8 @@ Shader version: 450
|
|||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
0:? '@entryPointOutput' (layout(location=0 ) out structure{temp int x0_out, temp int x1_out})
|
||||||
0:? 'x0_in' (layout(location=0 ) in int)
|
0:? 'x0_in' (layout(location=0 ) in int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:? 'x1_in' (layout(location=1 ) in int)
|
0:? 'x1_in' (layout(location=2 ) in int)
|
||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
@ -258,8 +258,8 @@ Shader version: 450
|
|||||||
Name 68 "@entryPointOutput"
|
Name 68 "@entryPointOutput"
|
||||||
Name 74 "@entryPointOutput_Pos_out"
|
Name 74 "@entryPointOutput_Pos_out"
|
||||||
Decorate 52(x0_in) Location 0
|
Decorate 52(x0_in) Location 0
|
||||||
Decorate 56(Pos_in) BuiltIn Position
|
Decorate 56(Pos_in) Location 1
|
||||||
Decorate 59(x1_in) Location 1
|
Decorate 59(x1_in) Location 2
|
||||||
Decorate 68(@entryPointOutput) Location 0
|
Decorate 68(@entryPointOutput) Location 0
|
||||||
Decorate 74(@entryPointOutput_Pos_out) BuiltIn Position
|
Decorate 74(@entryPointOutput_Pos_out) BuiltIn Position
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
|
|||||||
@ -28,10 +28,10 @@ Shader version: 450
|
|||||||
0:? 'vsin' (temp structure{temp 4-component vector of float Pos_in})
|
0:? 'vsin' (temp structure{temp 4-component vector of float Pos_in})
|
||||||
0:16 Constant:
|
0:16 Constant:
|
||||||
0:16 0 (const int)
|
0:16 0 (const int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=0 ) in 4-component vector of float)
|
||||||
0:16 move second child to first child (temp 4-component vector of float)
|
0:16 move second child to first child (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (temp 4-component vector of float)
|
0:? 'Pos_loose' (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:16 Sequence
|
0:16 Sequence
|
||||||
0:16 move second child to first child (temp 4-component vector of float)
|
0:16 move second child to first child (temp 4-component vector of float)
|
||||||
0:? '@entryPointOutput_Pos' (out 4-component vector of float Position)
|
0:? '@entryPointOutput_Pos' (out 4-component vector of float Position)
|
||||||
@ -42,8 +42,8 @@ Shader version: 450
|
|||||||
0:16 Constant:
|
0:16 Constant:
|
||||||
0:16 0 (const int)
|
0:16 0 (const int)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=0 ) in 4-component vector of float)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=1 ) in 4-component vector of float)
|
||||||
|
|
||||||
|
|
||||||
Linked vertex stage:
|
Linked vertex stage:
|
||||||
@ -78,10 +78,10 @@ Shader version: 450
|
|||||||
0:? 'vsin' (temp structure{temp 4-component vector of float Pos_in})
|
0:? 'vsin' (temp structure{temp 4-component vector of float Pos_in})
|
||||||
0:16 Constant:
|
0:16 Constant:
|
||||||
0:16 0 (const int)
|
0:16 0 (const int)
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=0 ) in 4-component vector of float)
|
||||||
0:16 move second child to first child (temp 4-component vector of float)
|
0:16 move second child to first child (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (temp 4-component vector of float)
|
0:? 'Pos_loose' (temp 4-component vector of float)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:16 Sequence
|
0:16 Sequence
|
||||||
0:16 move second child to first child (temp 4-component vector of float)
|
0:16 move second child to first child (temp 4-component vector of float)
|
||||||
0:? '@entryPointOutput_Pos' (out 4-component vector of float Position)
|
0:? '@entryPointOutput_Pos' (out 4-component vector of float Position)
|
||||||
@ -92,8 +92,8 @@ Shader version: 450
|
|||||||
0:16 Constant:
|
0:16 Constant:
|
||||||
0:16 0 (const int)
|
0:16 0 (const int)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'Pos_in' (in 4-component vector of float Position)
|
0:? 'Pos_in' (layout(location=0 ) in 4-component vector of float)
|
||||||
0:? 'Pos_loose' (in 4-component vector of float Position)
|
0:? 'Pos_loose' (layout(location=1 ) in 4-component vector of float)
|
||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
@ -119,8 +119,8 @@ Shader version: 450
|
|||||||
Name 38 "@entryPointOutput_Pos"
|
Name 38 "@entryPointOutput_Pos"
|
||||||
Name 39 "param"
|
Name 39 "param"
|
||||||
Name 41 "param"
|
Name 41 "param"
|
||||||
Decorate 31(Pos_in) BuiltIn Position
|
Decorate 31(Pos_in) Location 0
|
||||||
Decorate 35(Pos_loose) BuiltIn Position
|
Decorate 35(Pos_loose) Location 1
|
||||||
Decorate 38(@entryPointOutput_Pos) BuiltIn Position
|
Decorate 38(@entryPointOutput_Pos) BuiltIn Position
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
|
|||||||
@ -79,7 +79,7 @@ Shader version: 450
|
|||||||
0:? 'vi' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
|
0:? 'vi' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
|
||||||
0:8 Constant:
|
0:8 Constant:
|
||||||
0:8 2 (const int)
|
0:8 2 (const int)
|
||||||
0:? 'b' (layout(location=4 ) smooth in 4-component vector of float)
|
0:? 'b' (layout(location=4 ) in 4-component vector of float)
|
||||||
0:8 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:? 'e' (temp 4-component vector of float)
|
0:? 'e' (temp 4-component vector of float)
|
||||||
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
||||||
@ -125,7 +125,7 @@ Shader version: 450
|
|||||||
0:? 'm[0]' (layout(location=1 ) in 4-component vector of float)
|
0:? 'm[0]' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:? 'm[1]' (layout(location=2 ) in 4-component vector of float)
|
0:? 'm[1]' (layout(location=2 ) in 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:? 'b' (layout(location=4 ) smooth in 4-component vector of float)
|
0:? 'b' (layout(location=4 ) in 4-component vector of float)
|
||||||
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
||||||
|
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ Shader version: 450
|
|||||||
0:? 'vi' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
|
0:? 'vi' (temp structure{temp 2-element array of 4-component vector of float m, temp 2-component vector of uint coord, temp 4-component vector of float b})
|
||||||
0:8 Constant:
|
0:8 Constant:
|
||||||
0:8 2 (const int)
|
0:8 2 (const int)
|
||||||
0:? 'b' (layout(location=4 ) smooth in 4-component vector of float)
|
0:? 'b' (layout(location=4 ) in 4-component vector of float)
|
||||||
0:8 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:? 'e' (temp 4-component vector of float)
|
0:? 'e' (temp 4-component vector of float)
|
||||||
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
||||||
@ -258,7 +258,7 @@ Shader version: 450
|
|||||||
0:? 'm[0]' (layout(location=1 ) in 4-component vector of float)
|
0:? 'm[0]' (layout(location=1 ) in 4-component vector of float)
|
||||||
0:? 'm[1]' (layout(location=2 ) in 4-component vector of float)
|
0:? 'm[1]' (layout(location=2 ) in 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:? 'b' (layout(location=4 ) smooth in 4-component vector of float)
|
0:? 'b' (layout(location=4 ) in 4-component vector of float)
|
||||||
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
0:? 'e' (layout(location=5 ) in 4-component vector of float)
|
||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
|
|||||||
@ -401,21 +401,16 @@ public:
|
|||||||
// drop qualifiers that don't belong in a temporary variable
|
// drop qualifiers that don't belong in a temporary variable
|
||||||
void makeTemporary()
|
void makeTemporary()
|
||||||
{
|
{
|
||||||
makeNonIo();
|
storage = EvqTemporary;
|
||||||
storage = EvqTemporary;
|
builtIn = EbvNone;
|
||||||
|
clearInterstage();
|
||||||
|
clearMemory();
|
||||||
specConstant = false;
|
specConstant = false;
|
||||||
coherent = false;
|
clearLayout();
|
||||||
volatil = false;
|
|
||||||
restrict = false;
|
|
||||||
readonly = false;
|
|
||||||
writeonly = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove IO related data from qualifier.
|
void clearInterstage()
|
||||||
void makeNonIo() //?? remove?
|
|
||||||
{
|
{
|
||||||
// This preserves the storage type
|
|
||||||
builtIn = EbvNone;
|
|
||||||
centroid = false;
|
centroid = false;
|
||||||
smooth = false;
|
smooth = false;
|
||||||
flat = false;
|
flat = false;
|
||||||
@ -425,16 +420,15 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
patch = false;
|
patch = false;
|
||||||
sample = false;
|
sample = false;
|
||||||
clearLayout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return true if there is data which would be scrubbed by makeNonIo
|
void clearMemory()
|
||||||
bool hasIoData() const // ?? remove?
|
|
||||||
{
|
{
|
||||||
return builtIn != EbvNone ||
|
coherent = false;
|
||||||
hasLayout() ||
|
volatil = false;
|
||||||
isInterpolation() ||
|
restrict = false;
|
||||||
isAuxiliary();
|
readonly = false;
|
||||||
|
writeonly = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drop just the storage qualification, which perhaps should
|
// Drop just the storage qualification, which perhaps should
|
||||||
@ -591,37 +585,43 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield
|
// Implementing an embedded layout-qualifier class here, since C++ can't have a real class bitfield
|
||||||
void clearLayout()
|
void clearLayout() // all layout
|
||||||
{
|
{
|
||||||
layoutMatrix = ElmNone;
|
clearUniformLayout();
|
||||||
layoutPacking = ElpNone;
|
|
||||||
layoutOffset = layoutNotSet;
|
|
||||||
layoutAlign = layoutNotSet;
|
|
||||||
|
|
||||||
layoutLocation = layoutLocationEnd;
|
|
||||||
layoutComponent = layoutComponentEnd;
|
|
||||||
layoutSet = layoutSetEnd;
|
|
||||||
layoutBinding = layoutBindingEnd;
|
|
||||||
layoutIndex = layoutIndexEnd;
|
|
||||||
|
|
||||||
layoutStream = layoutStreamEnd;
|
|
||||||
|
|
||||||
layoutXfbBuffer = layoutXfbBufferEnd;
|
|
||||||
layoutXfbStride = layoutXfbStrideEnd;
|
|
||||||
layoutXfbOffset = layoutXfbOffsetEnd;
|
|
||||||
layoutAttachment = layoutAttachmentEnd;
|
|
||||||
layoutSpecConstantId = layoutSpecConstantIdEnd;
|
|
||||||
|
|
||||||
layoutFormat = ElfNone;
|
|
||||||
|
|
||||||
layoutPushConstant = false;
|
layoutPushConstant = false;
|
||||||
#ifdef NV_EXTENSIONS
|
#ifdef NV_EXTENSIONS
|
||||||
layoutPassthrough = false;
|
layoutPassthrough = false;
|
||||||
layoutViewportRelative = false;
|
layoutViewportRelative = false;
|
||||||
// -2048 as the default vaule indicating layoutSecondaryViewportRelative is not set
|
// -2048 as the default value indicating layoutSecondaryViewportRelative is not set
|
||||||
layoutSecondaryViewportRelativeOffset = -2048;
|
layoutSecondaryViewportRelativeOffset = -2048;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
clearInterstageLayout();
|
||||||
|
|
||||||
|
layoutSpecConstantId = layoutSpecConstantIdEnd;
|
||||||
|
|
||||||
|
layoutFormat = ElfNone;
|
||||||
}
|
}
|
||||||
|
void clearInterstageLayout()
|
||||||
|
{
|
||||||
|
layoutLocation = layoutLocationEnd;
|
||||||
|
layoutComponent = layoutComponentEnd;
|
||||||
|
layoutIndex = layoutIndexEnd;
|
||||||
|
clearStreamLayout();
|
||||||
|
clearXfbLayout();
|
||||||
|
}
|
||||||
|
void clearStreamLayout()
|
||||||
|
{
|
||||||
|
layoutStream = layoutStreamEnd;
|
||||||
|
}
|
||||||
|
void clearXfbLayout()
|
||||||
|
{
|
||||||
|
layoutXfbBuffer = layoutXfbBufferEnd;
|
||||||
|
layoutXfbStride = layoutXfbStrideEnd;
|
||||||
|
layoutXfbOffset = layoutXfbOffsetEnd;
|
||||||
|
}
|
||||||
|
|
||||||
bool hasLayout() const
|
bool hasLayout() const
|
||||||
{
|
{
|
||||||
return hasUniformLayout() ||
|
return hasUniformLayout() ||
|
||||||
@ -685,8 +685,21 @@ public:
|
|||||||
hasPacking() ||
|
hasPacking() ||
|
||||||
hasOffset() ||
|
hasOffset() ||
|
||||||
hasBinding() ||
|
hasBinding() ||
|
||||||
|
hasSet() ||
|
||||||
hasAlign();
|
hasAlign();
|
||||||
}
|
}
|
||||||
|
void clearUniformLayout() // only uniform specific
|
||||||
|
{
|
||||||
|
layoutMatrix = ElmNone;
|
||||||
|
layoutPacking = ElpNone;
|
||||||
|
layoutOffset = layoutNotSet;
|
||||||
|
layoutAlign = layoutNotSet;
|
||||||
|
|
||||||
|
layoutSet = layoutSetEnd;
|
||||||
|
layoutBinding = layoutBindingEnd;
|
||||||
|
layoutAttachment = layoutAttachmentEnd;
|
||||||
|
}
|
||||||
|
|
||||||
bool hasMatrix() const
|
bool hasMatrix() const
|
||||||
{
|
{
|
||||||
return layoutMatrix != ElmNone;
|
return layoutMatrix != ElmNone;
|
||||||
@ -1220,7 +1233,7 @@ public:
|
|||||||
// Make complete copy of the whole type graph rooted at 'copyOf'.
|
// Make complete copy of the whole type graph rooted at 'copyOf'.
|
||||||
void deepCopy(const TType& copyOf)
|
void deepCopy(const TType& copyOf)
|
||||||
{
|
{
|
||||||
TMap<TTypeList*,TTypeList*> copied; // to enable copying a type graph as a graph, not a tree //?? turn off again?
|
TMap<TTypeList*,TTypeList*> copied; // to enable copying a type graph as a graph, not a tree
|
||||||
deepCopy(copyOf, copied);
|
deepCopy(copyOf, copied);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,4 +3,4 @@
|
|||||||
// 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.1791"
|
#define GLSLANG_REVISION "Overload400-PrecQual.1791"
|
||||||
#define GLSLANG_DATE "04-Feb-2017"
|
#define GLSLANG_DATE "05-Feb-2017"
|
||||||
|
|||||||
@ -161,7 +161,7 @@ bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const
|
|||||||
|
|
||||||
void HlslParseContext::growGlobalUniformBlock(TSourceLoc& loc, TType& memberType, TString& memberName)
|
void HlslParseContext::growGlobalUniformBlock(TSourceLoc& loc, TType& memberType, TString& memberName)
|
||||||
{
|
{
|
||||||
memberType.getQualifier().makeNonIo(); //?? losing offsets is okay?
|
correctUniform(memberType.getQualifier());
|
||||||
TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName);
|
TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1690,63 +1690,43 @@ void HlslParseContext::handleFunctionBody(const TSourceLoc& loc, TFunction& func
|
|||||||
void HlslParseContext::remapEntryPointIO(TFunction& function, TVariable*& returnValue,
|
void HlslParseContext::remapEntryPointIO(TFunction& function, TVariable*& returnValue,
|
||||||
TVector<TVariable*>& inputs, TVector<TVariable*>& outputs)
|
TVector<TVariable*>& inputs, TVector<TVariable*>& outputs)
|
||||||
{
|
{
|
||||||
const auto makeIoVariable = [this](const char* name, TType& type) {
|
// Do the actual work to make a type be a shader input or output variable,
|
||||||
const auto remapType = [&](TType& type) {
|
// and clear the original to be non-IO (for use as a normal function parameter/return).
|
||||||
const auto remapBuiltInType = [&](TType& type) {
|
const auto makeIoVariable = [this](const char* name, TType& type, TStorageQualifier storage) {
|
||||||
switch (type.getQualifier().builtIn) {
|
|
||||||
case EbvFragDepthGreater:
|
|
||||||
intermediate.setDepth(EldGreater);
|
|
||||||
type.getQualifier().builtIn = EbvFragDepth;
|
|
||||||
break;
|
|
||||||
case EbvFragDepthLesser:
|
|
||||||
intermediate.setDepth(EldLess);
|
|
||||||
type.getQualifier().builtIn = EbvFragDepth;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
remapBuiltInType(type);
|
|
||||||
if (type.isStruct()) {
|
|
||||||
auto& members = *type.getStruct();
|
|
||||||
for (auto member = members.begin(); member != members.end(); ++member)
|
|
||||||
remapBuiltInType(*member->type); // TODO: lack-of-recursion structure depth problem
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TVariable* ioVariable = makeInternalVariable(name, type);
|
TVariable* ioVariable = makeInternalVariable(name, type);
|
||||||
// We might have already lost the IO-aspect of the deep parts of this type,
|
clearUniformInputOutput(type.getQualifier());
|
||||||
// get them back and also make them if that hadn't been done yet.
|
|
||||||
// (The shallow part of IO is already safely copied into the return value.)
|
|
||||||
type.getQualifier().makeNonIo();
|
|
||||||
if (type.getStruct() != nullptr) {
|
if (type.getStruct() != nullptr) {
|
||||||
auto newList = ioTypeMap.find(ioVariable->getType().getStruct());
|
auto newLists = ioTypeMap.find(ioVariable->getType().getStruct());
|
||||||
if (newList != ioTypeMap.end())
|
if (newLists != ioTypeMap.end()) {
|
||||||
ioVariable->getWritableType().setStruct(newList->second);
|
if (storage == EvqVaryingIn && newLists->second.input)
|
||||||
|
ioVariable->getWritableType().setStruct(newLists->second.input);
|
||||||
|
else if (storage == EvqVaryingOut && newLists->second.output)
|
||||||
|
ioVariable->getWritableType().setStruct(newLists->second.output);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
remapType(ioVariable->getWritableType());
|
if (storage == EvqVaryingIn)
|
||||||
|
correctInput(ioVariable->getWritableType().getQualifier());
|
||||||
|
else
|
||||||
|
correctOutput(ioVariable->getWritableType().getQualifier());
|
||||||
|
ioVariable->getWritableType().getQualifier().storage = storage;
|
||||||
return ioVariable;
|
return ioVariable;
|
||||||
};
|
};
|
||||||
|
|
||||||
// return value is actually a shader-scoped output (out)
|
// return value is actually a shader-scoped output (out)
|
||||||
if (function.getType().getBasicType() == EbtVoid)
|
if (function.getType().getBasicType() == EbtVoid)
|
||||||
returnValue = nullptr;
|
returnValue = nullptr;
|
||||||
else {
|
else
|
||||||
returnValue = makeIoVariable("@entryPointOutput", function.getWritableType());
|
returnValue = makeIoVariable("@entryPointOutput", function.getWritableType(), EvqVaryingOut);
|
||||||
returnValue->getWritableType().getQualifier().storage = EvqVaryingOut;
|
|
||||||
}
|
|
||||||
|
|
||||||
// parameters are actually shader-scoped inputs and outputs (in or out)
|
// parameters are actually shader-scoped inputs and outputs (in or out)
|
||||||
for (int i = 0; i < function.getParamCount(); i++) {
|
for (int i = 0; i < function.getParamCount(); i++) {
|
||||||
TType& paramType = *function[i].type;
|
TType& paramType = *function[i].type;
|
||||||
if (paramType.getQualifier().isParamInput()) {
|
if (paramType.getQualifier().isParamInput()) {
|
||||||
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType);
|
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingIn);
|
||||||
argAsGlobal->getWritableType().getQualifier().storage = EvqVaryingIn;
|
|
||||||
inputs.push_back(argAsGlobal);
|
inputs.push_back(argAsGlobal);
|
||||||
}
|
}
|
||||||
if (paramType.getQualifier().isParamOutput()) {
|
if (paramType.getQualifier().isParamOutput()) {
|
||||||
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType);
|
TVariable* argAsGlobal = makeIoVariable(function[i].name->c_str(), paramType, EvqVaryingOut);
|
||||||
argAsGlobal->getWritableType().getQualifier().storage = EvqVaryingOut;
|
|
||||||
outputs.push_back(argAsGlobal);
|
outputs.push_back(argAsGlobal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1758,11 +1738,11 @@ void HlslParseContext::remapNonEntryPointIO(TFunction& function)
|
|||||||
{
|
{
|
||||||
// return value
|
// return value
|
||||||
if (function.getType().getBasicType() != EbtVoid)
|
if (function.getType().getBasicType() != EbtVoid)
|
||||||
function.getWritableType().getQualifier().makeNonIo();
|
clearUniformInputOutput(function.getWritableType().getQualifier());
|
||||||
|
|
||||||
// parameters
|
// parameters
|
||||||
for (int i = 0; i < function.getParamCount(); i++)
|
for (int i = 0; i < function.getParamCount(); i++)
|
||||||
function[i].type->getQualifier().makeNonIo();
|
clearUniformInputOutput(function[i].type->getQualifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle function returns, including type conversions to the function return type
|
// Handle function returns, including type conversions to the function return type
|
||||||
@ -5379,40 +5359,81 @@ void HlslParseContext::declareStruct(const TSourceLoc& loc, TString& structName,
|
|||||||
|
|
||||||
// See if we need IO aliases for the structure typeList
|
// See if we need IO aliases for the structure typeList
|
||||||
|
|
||||||
bool hasIo = false;
|
const auto condAlloc = [](bool pred, TTypeList*& list) {
|
||||||
|
if (pred && list == nullptr)
|
||||||
|
list = new TTypeList;
|
||||||
|
};
|
||||||
|
|
||||||
|
tIoKinds newLists = { nullptr, nullptr, nullptr }; // allocate for each kind found
|
||||||
for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
|
for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
|
||||||
if (member->type->getQualifier().hasIoData()) {
|
condAlloc(hasUniform(member->type->getQualifier()), newLists.uniform);
|
||||||
hasIo = true;
|
condAlloc( hasInput(member->type->getQualifier()), newLists.input);
|
||||||
break;
|
condAlloc( hasOutput(member->type->getQualifier()), newLists.output);
|
||||||
}
|
|
||||||
if (member->type->isStruct()) {
|
if (member->type->isStruct()) {
|
||||||
if (ioTypeMap.find(member->type->getStruct()) != ioTypeMap.end()) {
|
auto it = ioTypeMap.find(member->type->getStruct());
|
||||||
hasIo = true;
|
if (it != ioTypeMap.end()) {
|
||||||
break;
|
condAlloc(it->second.uniform != nullptr, newLists.uniform);
|
||||||
|
condAlloc(it->second.input != nullptr, newLists.input);
|
||||||
|
condAlloc(it->second.output != nullptr, newLists.output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!hasIo)
|
if (newLists.uniform == nullptr &&
|
||||||
|
newLists.input == nullptr &&
|
||||||
|
newLists.output == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// We have IO involved.
|
// We have IO involved.
|
||||||
|
|
||||||
// Make a pure typeList for the symbol table, and cache side copies of IO versions.
|
// Make a pure typeList for the symbol table, and cache side copies of IO versions.
|
||||||
TTypeList* newList = new TTypeList;
|
|
||||||
for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
|
for (auto member = type.getStruct()->begin(); member != type.getStruct()->end(); ++member) {
|
||||||
TType* memberType = new TType;
|
const auto inheritStruct = [&](TTypeList* s, TTypeLoc& ioMember) {
|
||||||
memberType->shallowCopy(*member->type);
|
if (s != nullptr) {
|
||||||
TTypeLoc newMember = { memberType, member->loc };
|
ioMember.type = new TType;
|
||||||
|
ioMember.type->shallowCopy(*member->type);
|
||||||
|
ioMember.type->setStruct(s);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const auto newMember = [&](TTypeLoc& m) {
|
||||||
|
if (m.type == nullptr) {
|
||||||
|
m.type = new TType;
|
||||||
|
m.type->shallowCopy(*member->type);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
TTypeLoc newUniformMember = { nullptr, member->loc };
|
||||||
|
TTypeLoc newInputMember = { nullptr, member->loc };
|
||||||
|
TTypeLoc newOutputMember = { nullptr, member->loc };
|
||||||
if (member->type->isStruct()) {
|
if (member->type->isStruct()) {
|
||||||
// swap in an IO child if there is one
|
// swap in an IO child if there is one
|
||||||
auto it = ioTypeMap.find(member->type->getStruct());
|
auto it = ioTypeMap.find(member->type->getStruct());
|
||||||
if (it != ioTypeMap.end())
|
if (it != ioTypeMap.end()) {
|
||||||
newMember.type->setStruct(it->second);
|
inheritStruct(it->second.uniform, newUniformMember);
|
||||||
|
inheritStruct(it->second.input, newInputMember);
|
||||||
|
inheritStruct(it->second.output, newOutputMember);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
newList->push_back(newMember);
|
if (newLists.uniform) {
|
||||||
member->type->getQualifier().makeNonIo();
|
newMember(newUniformMember);
|
||||||
|
correctUniform(newUniformMember.type->getQualifier());
|
||||||
|
newLists.uniform->push_back(newUniformMember);
|
||||||
|
}
|
||||||
|
if (newLists.input) {
|
||||||
|
newMember(newInputMember);
|
||||||
|
correctInput(newInputMember.type->getQualifier());
|
||||||
|
newLists.input->push_back(newInputMember);
|
||||||
|
}
|
||||||
|
if (newLists.output) {
|
||||||
|
newMember(newOutputMember);
|
||||||
|
correctOutput(newOutputMember.type->getQualifier());
|
||||||
|
newLists.output->push_back(newOutputMember);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make original pure
|
||||||
|
clearUniformInputOutput(member->type->getQualifier());
|
||||||
}
|
}
|
||||||
ioTypeMap[type.getStruct()] = newList;
|
ioTypeMap[type.getStruct()] = newLists;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -5441,11 +5462,16 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& i
|
|||||||
|
|
||||||
const bool flattenVar = shouldFlattenUniform(type);
|
const bool flattenVar = shouldFlattenUniform(type);
|
||||||
|
|
||||||
// make non-IO version of type
|
// correct IO in the type
|
||||||
switch (type.getQualifier().storage) {
|
switch (type.getQualifier().storage) {
|
||||||
case EvqGlobal:
|
case EvqGlobal:
|
||||||
case EvqTemporary:
|
case EvqTemporary:
|
||||||
type.getQualifier().makeNonIo();
|
clearUniformInputOutput(type.getQualifier());
|
||||||
|
break;
|
||||||
|
case EvqUniform:
|
||||||
|
case EvqBuffer:
|
||||||
|
correctUniform(type.getQualifier());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6514,6 +6540,187 @@ void HlslParseContext::renameShaderFunction(TString*& name) const
|
|||||||
name = NewPoolTString(intermediate.getEntryPointName().c_str());
|
name = NewPoolTString(intermediate.getEntryPointName().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return true if this has uniform-interface like decorations.
|
||||||
|
bool HlslParseContext::hasUniform(const TQualifier& qualifier) const
|
||||||
|
{
|
||||||
|
return qualifier.hasUniformLayout() ||
|
||||||
|
qualifier.layoutPushConstant;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Potentially not the opposite of hasUniform(), as if some characteristic is
|
||||||
|
// ever used for more than one thing (e.g., uniform or input), hasUniform() should
|
||||||
|
// say it exists, but clearUniform() should leave it in place.
|
||||||
|
void HlslParseContext::clearUniform(TQualifier& qualifier)
|
||||||
|
{
|
||||||
|
qualifier.clearUniformLayout();
|
||||||
|
qualifier.layoutPushConstant = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return false if builtIn by itself doesn't force this qualifier to be an input qualifier.
|
||||||
|
bool HlslParseContext::isInputBuiltIn(const TQualifier& qualifier) const
|
||||||
|
{
|
||||||
|
switch (qualifier.builtIn) {
|
||||||
|
case EbvPosition:
|
||||||
|
case EbvPointSize:
|
||||||
|
return language != EShLangVertex && language != EShLangCompute && language != EShLangFragment;
|
||||||
|
case EbvClipDistance:
|
||||||
|
case EbvCullDistance:
|
||||||
|
return language != EShLangVertex && language != EShLangCompute;
|
||||||
|
case EbvFragCoord:
|
||||||
|
case EbvFace:
|
||||||
|
case EbvHelperInvocation:
|
||||||
|
case EbvLayer:
|
||||||
|
case EbvPointCoord:
|
||||||
|
case EbvSampleId:
|
||||||
|
case EbvSampleMask:
|
||||||
|
case EbvSamplePosition:
|
||||||
|
case EbvViewportIndex:
|
||||||
|
return language == EShLangFragment;
|
||||||
|
case EbvGlobalInvocationId:
|
||||||
|
case EbvLocalInvocationIndex:
|
||||||
|
case EbvLocalInvocationId:
|
||||||
|
case EbvNumWorkGroups:
|
||||||
|
case EbvWorkGroupId:
|
||||||
|
case EbvWorkGroupSize:
|
||||||
|
return language == EShLangCompute;
|
||||||
|
case EbvInvocationId:
|
||||||
|
return language == EShLangTessControl || language == EShLangTessEvaluation || language == EShLangGeometry;
|
||||||
|
case EbvPatchVertices:
|
||||||
|
return language == EShLangTessControl || language == EShLangTessEvaluation;
|
||||||
|
case EbvInstanceId:
|
||||||
|
case EbvInstanceIndex:
|
||||||
|
case EbvVertexId:
|
||||||
|
case EbvVertexIndex:
|
||||||
|
return language == EShLangVertex;
|
||||||
|
case EbvPrimitiveId:
|
||||||
|
return language == EShLangGeometry || language == EShLangFragment;
|
||||||
|
case EbvTessLevelInner:
|
||||||
|
case EbvTessLevelOuter:
|
||||||
|
return language == EShLangTessEvaluation;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return true if there are decorations to preserve for input-like storage,
|
||||||
|
// except for builtIn.
|
||||||
|
bool HlslParseContext::hasInput(const TQualifier& qualifier) const
|
||||||
|
{
|
||||||
|
if (qualifier.hasAnyLocation())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (language != EShLangVertex && language != EShLangCompute &&
|
||||||
|
(qualifier.isInterpolation() || qualifier.isAuxiliary()))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (isInputBuiltIn(qualifier))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return false if builtIn by itself doesn't force this qualifier to be an output qualifier.
|
||||||
|
bool HlslParseContext::isOutputBuiltIn(const TQualifier& qualifier) const
|
||||||
|
{
|
||||||
|
switch (qualifier.builtIn) {
|
||||||
|
case EbvPosition:
|
||||||
|
case EbvPointSize:
|
||||||
|
case EbvClipVertex:
|
||||||
|
case EbvClipDistance:
|
||||||
|
case EbvCullDistance:
|
||||||
|
return language != EShLangFragment && language != EShLangCompute;
|
||||||
|
case EbvFragDepth:
|
||||||
|
case EbvSampleMask:
|
||||||
|
return language == EShLangFragment;
|
||||||
|
case EbvLayer:
|
||||||
|
case EbvViewportIndex:
|
||||||
|
return language == EShLangGeometry;
|
||||||
|
case EbvPrimitiveId:
|
||||||
|
return language == EShLangGeometry || language == EShLangTessControl || language == EShLangTessEvaluation;
|
||||||
|
case EbvTessLevelInner:
|
||||||
|
case EbvTessLevelOuter:
|
||||||
|
return language == EShLangTessControl;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return true if there are decorations to preserve for output-like storage,
|
||||||
|
// except for builtIn.
|
||||||
|
bool HlslParseContext::hasOutput(const TQualifier& qualifier) const
|
||||||
|
{
|
||||||
|
if (qualifier.hasAnyLocation())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (language != EShLangFragment && language != EShLangCompute &&
|
||||||
|
(qualifier.hasXfb() || qualifier.isInterpolation() || qualifier.isAuxiliary()))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (language == EShLangGeometry && qualifier.hasStream())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (isOutputBuiltIn(qualifier))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the IO decorations etc. be appropriate only for an input interface.
|
||||||
|
void HlslParseContext::correctInput(TQualifier& qualifier)
|
||||||
|
{
|
||||||
|
clearUniform(qualifier);
|
||||||
|
if (language == EShLangVertex)
|
||||||
|
qualifier.clearInterstage();
|
||||||
|
qualifier.clearStreamLayout();
|
||||||
|
qualifier.clearXfbLayout();
|
||||||
|
|
||||||
|
if (! isInputBuiltIn(qualifier))
|
||||||
|
qualifier.builtIn = EbvNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the IO decorations etc. be appropriate only for an output interface.
|
||||||
|
void HlslParseContext::correctOutput(TQualifier& qualifier)
|
||||||
|
{
|
||||||
|
clearUniform(qualifier);
|
||||||
|
if (language == EShLangFragment)
|
||||||
|
qualifier.clearInterstage();
|
||||||
|
if (language != EShLangGeometry)
|
||||||
|
qualifier.clearStreamLayout();
|
||||||
|
if (language == EShLangFragment)
|
||||||
|
qualifier.clearXfbLayout();
|
||||||
|
|
||||||
|
switch (qualifier.builtIn) {
|
||||||
|
case EbvFragDepthGreater:
|
||||||
|
intermediate.setDepth(EldGreater);
|
||||||
|
qualifier.builtIn = EbvFragDepth;
|
||||||
|
break;
|
||||||
|
case EbvFragDepthLesser:
|
||||||
|
intermediate.setDepth(EldLess);
|
||||||
|
qualifier.builtIn = EbvFragDepth;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! isOutputBuiltIn(qualifier))
|
||||||
|
qualifier.builtIn = EbvNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the IO decorations etc. be appropriate only for uniform type interfaces.
|
||||||
|
void HlslParseContext::correctUniform(TQualifier& qualifier)
|
||||||
|
{
|
||||||
|
qualifier.builtIn = EbvNone;
|
||||||
|
qualifier.clearInterstage();
|
||||||
|
qualifier.clearInterstageLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear out all IO/Uniform stuff, so this has nothing to do with being an IO interface.
|
||||||
|
void HlslParseContext::clearUniformInputOutput(TQualifier& qualifier)
|
||||||
|
{
|
||||||
|
clearUniform(qualifier);
|
||||||
|
correctUniform(qualifier);
|
||||||
|
}
|
||||||
|
|
||||||
// post-processing
|
// post-processing
|
||||||
void HlslParseContext::finish()
|
void HlslParseContext::finish()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -231,6 +231,17 @@ protected:
|
|||||||
int flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
|
int flattenStruct(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
|
||||||
int flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
|
int flattenArray(const TSourceLoc& loc, const TVariable& variable, const TType&, TFlattenData&, TString name);
|
||||||
|
|
||||||
|
bool hasUniform(const TQualifier& qualifier) const;
|
||||||
|
void clearUniform(TQualifier& qualifier);
|
||||||
|
bool isInputBuiltIn(const TQualifier& qualifier) const;
|
||||||
|
bool hasInput(const TQualifier& qualifier) const;
|
||||||
|
void correctOutput(TQualifier& qualifier);
|
||||||
|
bool isOutputBuiltIn(const TQualifier& qualifier) const;
|
||||||
|
bool hasOutput(const TQualifier& qualifier) const;
|
||||||
|
void correctInput(TQualifier& qualifier);
|
||||||
|
void correctUniform(TQualifier& qualifier);
|
||||||
|
void clearUniformInputOutput(TQualifier& qualifier);
|
||||||
|
|
||||||
void finish() override; // post-processing
|
void finish() override; // post-processing
|
||||||
|
|
||||||
// Current state of parsing
|
// Current state of parsing
|
||||||
@ -296,8 +307,15 @@ protected:
|
|||||||
TVector<int> flattenLevel; // nested postfix operator level for flattening
|
TVector<int> flattenLevel; // nested postfix operator level for flattening
|
||||||
TVector<int> flattenOffset; // cumulative offset for flattening
|
TVector<int> flattenOffset; // cumulative offset for flattening
|
||||||
|
|
||||||
// IO-type map.
|
// IO-type map. Maps a pure symbol-table form of a structure-member list into
|
||||||
TMap<const TTypeList*, TTypeList*> ioTypeMap;
|
// each of the (up to) three kinds of IO, as each as different allowed decorations,
|
||||||
|
// but HLSL allows mixing all in the same structure.
|
||||||
|
struct tIoKinds {
|
||||||
|
TTypeList* input;
|
||||||
|
TTypeList* output;
|
||||||
|
TTypeList* uniform;
|
||||||
|
};
|
||||||
|
TMap<const TTypeList*, tIoKinds> ioTypeMap;
|
||||||
|
|
||||||
// Structure splitting data:
|
// Structure splitting data:
|
||||||
TMap<int, TVariable*> splitIoVars; // variables with the builtin interstage IO removed, indexed by unique ID.
|
TMap<int, TVariable*> splitIoVars; // variables with the builtin interstage IO removed, indexed by unique ID.
|
||||||
@ -319,7 +337,7 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TMap<tInterstageIoData, TVariable*> interstageBuiltInIo; // individual builtin interstage IO vars, inxed by builtin type.
|
TMap<tInterstageIoData, TVariable*> interstageBuiltInIo; // individual builtin interstage IO vars, indexed by builtin type.
|
||||||
|
|
||||||
// We have to move array references to structs containing builtin interstage IO to the split variables.
|
// We have to move array references to structs containing builtin interstage IO to the split variables.
|
||||||
// This is only handled for one level. This stores the index, because we'll need it in the future, since
|
// This is only handled for one level. This stores the index, because we'll need it in the future, since
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user