Commit 32a385e9 by John Kessenich

HLSL: Fix #846: support mixed ternary types.

Vector conditions properly convert the true/false expression types to same width vector as the condition. Scalar conditions make the true/false expressions convert to each other.
parent 0603a383
......@@ -5,178 +5,231 @@ gl_FragCoord origin is upper left
0:8 Function Definition: vectorCond( ( temp 4-component vector of float)
0:8 Function Parameters:
0:? Sequence
0:11 Branch: Return with expression
0:10 add ( temp 4-component vector of float)
0:9 add ( temp 4-component vector of float)
0:9 mix ( temp 4-component vector of float)
0:9 f4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 2 (const uint)
0:9 t4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 1 (const uint)
0:9 Convert float to bool ( temp 4-component vector of bool)
0:9 c4: direct index for structure ( uniform 4-component vector of float)
0:12 Branch: Return with expression
0:11 add ( temp 4-component vector of float)
0:10 add ( temp 4-component vector of float)
0:9 add ( temp 4-component vector of float)
0:9 mix ( temp 4-component vector of float)
0:9 f4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 0 (const uint)
0:10 mix ( temp 4-component vector of float)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 f: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 4 (const uint)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 t: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 3 (const uint)
0:10 Convert float to bool ( temp 4-component vector of bool)
0:10 c4: direct index for structure ( uniform 4-component vector of float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 0 (const uint)
0:11 mix ( temp 4-component vector of float)
0:11 f4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 2 (const uint)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:11 Compare Less Than ( temp 4-component vector of bool)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:9 2 (const uint)
0:9 t4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 1 (const uint)
0:9 Convert float to bool ( temp 4-component vector of bool)
0:9 c4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 0 (const uint)
0:10 mix ( temp 4-component vector of float)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 f: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 4 (const uint)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 t: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 3 (const uint)
0:10 Convert float to bool ( temp 4-component vector of bool)
0:10 c4: direct index for structure ( uniform 4-component vector of float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 0 (const uint)
0:11 mix ( temp 4-component vector of float)
0:11 f4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 2 (const uint)
0:15 Function Definition: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:15 Function Parameters:
0:15 'cnd' ( in 2-component vector of bool)
0:15 'src0' ( in 2-component vector of float)
0:15 'src1' ( in 2-component vector of float)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:11 Compare Less Than ( temp 4-component vector of bool)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:11 f4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 2 (const uint)
0:12 mix ( temp 4-component vector of float)
0:12 f4: direct index for structure ( uniform 4-component vector of float)
0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
0:12 2 (const uint)
0:12 Construct vec4 ( temp 4-component vector of float)
0:12 t: direct index for structure ( uniform float)
0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
0:12 3 (const uint)
0:12 Convert float to bool ( temp 4-component vector of bool)
0:12 c4: direct index for structure ( uniform 4-component vector of float)
0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
0:12 0 (const uint)
0:16 Function Definition: scalarCond( ( temp 4-component vector of float)
0:16 Function Parameters:
0:? Sequence
0:16 Branch: Return with expression
0:16 mix ( temp 2-component vector of float)
0:16 'src1' ( in 2-component vector of float)
0:16 'src0' ( in 2-component vector of float)
0:16 'cnd' ( in 2-component vector of bool)
0:20 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:20 Function Parameters:
0:20 'input' ( in 4-component vector of float)
0:17 Sequence
0:17 move second child to first child ( temp 4-component vector of float)
0:17 'ret' ( temp 4-component vector of float)
0:17 Test condition and select ( temp 4-component vector of float)
0:17 Condition
0:17 Compare Not Equal ( temp bool)
0:17 t: direct index for structure ( uniform float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 3 (const uint)
0:17 f: direct index for structure ( uniform float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 4 (const uint)
0:17 true case
0:17 vector-scale ( temp 4-component vector of float)
0:17 t: direct index for structure ( uniform float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 3 (const uint)
0:17 f4: direct index for structure ( uniform 4-component vector of float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 2 (const uint)
0:17 false case
0:17 Constant:
0:17 1.000000
0:17 1.000000
0:17 1.000000
0:17 1.000000
0:18 Branch: Return with expression
0:18 'ret' ( temp 4-component vector of float)
0:22 Function Definition: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:22 Function Parameters:
0:22 'cnd' ( in 2-component vector of bool)
0:22 'src0' ( in 2-component vector of float)
0:22 'src1' ( in 2-component vector of float)
0:? Sequence
0:21 Sequence
0:21 move second child to first child ( temp int)
0:21 'a' ( temp int)
0:21 Constant:
0:21 5 (const int)
0:22 Sequence
0:22 move second child to first child ( temp int)
0:22 'b' ( temp int)
0:22 Constant:
0:22 6 (const int)
0:23 Sequence
0:23 move second child to first child ( temp int)
0:23 'c' ( temp int)
0:23 Constant:
0:23 7 (const int)
0:24 Sequence
0:24 move second child to first child ( temp int)
0:24 'd' ( temp int)
0:24 Constant:
0:24 7 (const int)
0:25 Sequence
0:25 move second child to first child ( temp 4-component vector of float)
0:25 'ret' ( temp 4-component vector of float)
0:27 add ( temp 4-component vector of float)
0:26 add ( temp 4-component vector of float)
0:25 add ( temp 4-component vector of float)
0:25 vector-scale ( temp 4-component vector of float)
0:25 Convert int to float ( temp float)
0:25 'a' ( temp int)
0:25 'input' ( in 4-component vector of float)
0:26 vector-scale ( temp 4-component vector of float)
0:26 Convert int to float ( temp float)
0:26 'b' ( temp int)
0:26 'input' ( in 4-component vector of float)
0:27 vector-scale ( temp 4-component vector of float)
0:27 Convert int to float ( temp float)
0:27 'c' ( temp int)
0:27 'input' ( in 4-component vector of float)
0:28 vector-scale ( temp 4-component vector of float)
0:28 Convert int to float ( temp float)
0:28 'd' ( temp int)
0:28 'input' ( in 4-component vector of float)
0:30 Comma ( temp int)
0:30 move second child to first child ( temp int)
0:30 'e' ( temp int)
0:30 move second child to first child ( temp int)
0:30 'a' ( temp int)
0:30 Test condition and select ( temp int)
0:30 Condition
0:30 Convert int to bool ( temp bool)
0:30 'b' ( temp int)
0:30 true case
0:30 move second child to first child ( temp int)
0:30 'c' ( temp int)
0:30 'd' ( temp int)
0:30 false case
0:30 Constant:
0:30 10 (const int)
0:23 Branch: Return with expression
0:23 mix ( temp 2-component vector of float)
0:23 'src1' ( in 2-component vector of float)
0:23 'src0' ( in 2-component vector of float)
0:23 'cnd' ( in 2-component vector of bool)
0:27 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:27 Function Parameters:
0:27 'input' ( in 4-component vector of float)
0:? Sequence
0:28 Sequence
0:28 move second child to first child ( temp int)
0:28 'a' ( temp int)
0:28 Constant:
0:28 5 (const int)
0:29 Sequence
0:29 move second child to first child ( temp int)
0:29 'b' ( temp int)
0:29 Constant:
0:29 6 (const int)
0:30 Sequence
0:30 move second child to first child ( temp int)
0:30 'b' ( temp int)
0:30 Test condition and select ( temp int)
0:30 Condition
0:30 Convert int to bool ( temp bool)
0:30 'a' ( temp int)
0:30 true case
0:30 move second child to first child ( temp int)
0:30 'd' ( temp int)
0:30 'c' ( temp int)
0:30 false case
0:30 Constant:
0:30 11 (const int)
0:32 move second child to first child ( temp 4-component vector of float)
0:32 'f' ( temp 4-component vector of float)
0:32 Test condition and select ( temp 4-component vector of float)
0:32 Condition
0:32 Compare Less Than ( temp bool)
0:32 direct index ( temp float)
0:32 'ret' ( temp 4-component vector of float)
0:32 Constant:
0:32 0 (const int)
0:32 direct index ( temp float)
0:32 'input' ( in 4-component vector of float)
0:32 Constant:
0:32 1 (const int)
0:32 true case
0:32 vector-scale ( temp 4-component vector of float)
0:32 Convert int to float ( temp float)
0:32 'c' ( temp int)
0:32 'input' ( in 4-component vector of float)
0:32 false case
0:32 vector-scale ( temp 4-component vector of float)
0:32 Convert int to float ( temp float)
0:32 'd' ( temp int)
0:32 'input' ( in 4-component vector of float)
0:34 Branch: Return with expression
0:33 add ( temp 4-component vector of float)
0:33 add ( temp 4-component vector of float)
0:30 'c' ( temp int)
0:30 Constant:
0:30 7 (const int)
0:31 Sequence
0:31 move second child to first child ( temp int)
0:31 'd' ( temp int)
0:31 Constant:
0:31 7 (const int)
0:32 Sequence
0:32 move second child to first child ( temp 4-component vector of float)
0:32 'ret' ( temp 4-component vector of float)
0:34 add ( temp 4-component vector of float)
0:33 add ( temp 4-component vector of float)
0:33 vector-scale ( temp 4-component vector of float)
0:33 Convert int to float ( temp float)
0:33 'e' ( temp int)
0:33 'ret' ( temp 4-component vector of float)
0:33 'f' ( temp 4-component vector of float)
0:33 Function Call: vectorCond( ( temp 4-component vector of float)
0:32 add ( temp 4-component vector of float)
0:32 vector-scale ( temp 4-component vector of float)
0:32 Convert int to float ( temp float)
0:32 'a' ( temp int)
0:32 'input' ( in 4-component vector of float)
0:33 vector-scale ( temp 4-component vector of float)
0:33 Convert int to float ( temp float)
0:33 'b' ( temp int)
0:33 'input' ( in 4-component vector of float)
0:34 vector-scale ( temp 4-component vector of float)
0:34 Convert int to float ( temp float)
0:34 'c' ( temp int)
0:34 'input' ( in 4-component vector of float)
0:35 vector-scale ( temp 4-component vector of float)
0:35 Convert int to float ( temp float)
0:35 'd' ( temp int)
0:35 'input' ( in 4-component vector of float)
0:37 Comma ( temp int)
0:37 move second child to first child ( temp int)
0:37 'e' ( temp int)
0:37 move second child to first child ( temp int)
0:37 'a' ( temp int)
0:37 Test condition and select ( temp int)
0:37 Condition
0:37 Convert int to bool ( temp bool)
0:37 'b' ( temp int)
0:37 true case
0:37 move second child to first child ( temp int)
0:37 'c' ( temp int)
0:37 'd' ( temp int)
0:37 false case
0:37 Constant:
0:37 10 (const int)
0:37 move second child to first child ( temp int)
0:37 'b' ( temp int)
0:37 Test condition and select ( temp int)
0:37 Condition
0:37 Convert int to bool ( temp bool)
0:37 'a' ( temp int)
0:37 true case
0:37 move second child to first child ( temp int)
0:37 'd' ( temp int)
0:37 'c' ( temp int)
0:37 false case
0:37 Constant:
0:37 11 (const int)
0:39 move second child to first child ( temp 4-component vector of float)
0:39 'f' ( temp 4-component vector of float)
0:39 Test condition and select ( temp 4-component vector of float)
0:39 Condition
0:39 Compare Less Than ( temp bool)
0:39 direct index ( temp float)
0:39 'ret' ( temp 4-component vector of float)
0:39 Constant:
0:39 0 (const int)
0:39 direct index ( temp float)
0:39 'input' ( in 4-component vector of float)
0:39 Constant:
0:39 1 (const int)
0:39 true case
0:39 vector-scale ( temp 4-component vector of float)
0:39 Convert int to float ( temp float)
0:39 'c' ( temp int)
0:39 'input' ( in 4-component vector of float)
0:39 false case
0:39 vector-scale ( temp 4-component vector of float)
0:39 Convert int to float ( temp float)
0:39 'd' ( temp int)
0:39 'input' ( in 4-component vector of float)
0:41 Branch: Return with expression
0:40 add ( temp 4-component vector of float)
0:40 add ( temp 4-component vector of float)
0:40 add ( temp 4-component vector of float)
0:40 add ( temp 4-component vector of float)
0:40 vector-scale ( temp 4-component vector of float)
0:40 Convert int to float ( temp float)
0:40 'e' ( temp int)
0:40 'ret' ( temp 4-component vector of float)
0:40 'f' ( temp 4-component vector of float)
0:40 Function Call: vectorCond( ( temp 4-component vector of float)
0:40 Function Call: scalarCond( ( temp 4-component vector of float)
0:? Construct vec4 ( temp 4-component vector of float)
0:34 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:? Constant:
0:? true (const bool)
0:? false (const bool)
......@@ -186,19 +239,19 @@ gl_FragCoord origin is upper left
0:? Constant:
0:? 3.000000
0:? 4.000000
0:34 Constant:
0:34 10.000000
0:34 Constant:
0:34 10.000000
0:20 Function Definition: PixelShaderFunction( ( temp void)
0:20 Function Parameters:
0:41 Constant:
0:41 10.000000
0:41 Constant:
0:41 10.000000
0:27 Function Definition: PixelShaderFunction( ( temp void)
0:27 Function Parameters:
0:? Sequence
0:20 move second child to first child ( temp 4-component vector of float)
0:27 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:20 move second child to first child ( temp 4-component vector of float)
0:27 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:20 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:27 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
......@@ -215,178 +268,231 @@ gl_FragCoord origin is upper left
0:8 Function Definition: vectorCond( ( temp 4-component vector of float)
0:8 Function Parameters:
0:? Sequence
0:11 Branch: Return with expression
0:10 add ( temp 4-component vector of float)
0:9 add ( temp 4-component vector of float)
0:9 mix ( temp 4-component vector of float)
0:9 f4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 2 (const uint)
0:9 t4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 1 (const uint)
0:9 Convert float to bool ( temp 4-component vector of bool)
0:9 c4: direct index for structure ( uniform 4-component vector of float)
0:12 Branch: Return with expression
0:11 add ( temp 4-component vector of float)
0:10 add ( temp 4-component vector of float)
0:9 add ( temp 4-component vector of float)
0:9 mix ( temp 4-component vector of float)
0:9 f4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 0 (const uint)
0:10 mix ( temp 4-component vector of float)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 f: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 4 (const uint)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 t: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 3 (const uint)
0:10 Convert float to bool ( temp 4-component vector of bool)
0:10 c4: direct index for structure ( uniform 4-component vector of float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 0 (const uint)
0:11 mix ( temp 4-component vector of float)
0:11 f4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 2 (const uint)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:11 Compare Less Than ( temp 4-component vector of bool)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:9 2 (const uint)
0:9 t4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 1 (const uint)
0:9 Convert float to bool ( temp 4-component vector of bool)
0:9 c4: direct index for structure ( uniform 4-component vector of float)
0:9 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:9 Constant:
0:9 0 (const uint)
0:10 mix ( temp 4-component vector of float)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 f: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 4 (const uint)
0:10 Construct vec4 ( temp 4-component vector of float)
0:10 t: direct index for structure ( uniform float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 3 (const uint)
0:10 Convert float to bool ( temp 4-component vector of bool)
0:10 c4: direct index for structure ( uniform 4-component vector of float)
0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:10 Constant:
0:10 0 (const uint)
0:11 mix ( temp 4-component vector of float)
0:11 f4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 2 (const uint)
0:15 Function Definition: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:15 Function Parameters:
0:15 'cnd' ( in 2-component vector of bool)
0:15 'src0' ( in 2-component vector of float)
0:15 'src1' ( in 2-component vector of float)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:11 Compare Less Than ( temp 4-component vector of bool)
0:11 t4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 1 (const uint)
0:11 f4: direct index for structure ( uniform 4-component vector of float)
0:11 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:11 Constant:
0:11 2 (const uint)
0:12 mix ( temp 4-component vector of float)
0:12 f4: direct index for structure ( uniform 4-component vector of float)
0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
0:12 2 (const uint)
0:12 Construct vec4 ( temp 4-component vector of float)
0:12 t: direct index for structure ( uniform float)
0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
0:12 3 (const uint)
0:12 Convert float to bool ( temp 4-component vector of bool)
0:12 c4: direct index for structure ( uniform 4-component vector of float)
0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:12 Constant:
0:12 0 (const uint)
0:16 Function Definition: scalarCond( ( temp 4-component vector of float)
0:16 Function Parameters:
0:? Sequence
0:16 Branch: Return with expression
0:16 mix ( temp 2-component vector of float)
0:16 'src1' ( in 2-component vector of float)
0:16 'src0' ( in 2-component vector of float)
0:16 'cnd' ( in 2-component vector of bool)
0:20 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:20 Function Parameters:
0:20 'input' ( in 4-component vector of float)
0:17 Sequence
0:17 move second child to first child ( temp 4-component vector of float)
0:17 'ret' ( temp 4-component vector of float)
0:17 Test condition and select ( temp 4-component vector of float)
0:17 Condition
0:17 Compare Not Equal ( temp bool)
0:17 t: direct index for structure ( uniform float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 3 (const uint)
0:17 f: direct index for structure ( uniform float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 4 (const uint)
0:17 true case
0:17 vector-scale ( temp 4-component vector of float)
0:17 t: direct index for structure ( uniform float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 3 (const uint)
0:17 f4: direct index for structure ( uniform 4-component vector of float)
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
0:17 Constant:
0:17 2 (const uint)
0:17 false case
0:17 Constant:
0:17 1.000000
0:17 1.000000
0:17 1.000000
0:17 1.000000
0:18 Branch: Return with expression
0:18 'ret' ( temp 4-component vector of float)
0:22 Function Definition: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:22 Function Parameters:
0:22 'cnd' ( in 2-component vector of bool)
0:22 'src0' ( in 2-component vector of float)
0:22 'src1' ( in 2-component vector of float)
0:? Sequence
0:21 Sequence
0:21 move second child to first child ( temp int)
0:21 'a' ( temp int)
0:21 Constant:
0:21 5 (const int)
0:22 Sequence
0:22 move second child to first child ( temp int)
0:22 'b' ( temp int)
0:22 Constant:
0:22 6 (const int)
0:23 Sequence
0:23 move second child to first child ( temp int)
0:23 'c' ( temp int)
0:23 Constant:
0:23 7 (const int)
0:24 Sequence
0:24 move second child to first child ( temp int)
0:24 'd' ( temp int)
0:24 Constant:
0:24 7 (const int)
0:25 Sequence
0:25 move second child to first child ( temp 4-component vector of float)
0:25 'ret' ( temp 4-component vector of float)
0:27 add ( temp 4-component vector of float)
0:26 add ( temp 4-component vector of float)
0:25 add ( temp 4-component vector of float)
0:25 vector-scale ( temp 4-component vector of float)
0:25 Convert int to float ( temp float)
0:25 'a' ( temp int)
0:25 'input' ( in 4-component vector of float)
0:26 vector-scale ( temp 4-component vector of float)
0:26 Convert int to float ( temp float)
0:26 'b' ( temp int)
0:26 'input' ( in 4-component vector of float)
0:27 vector-scale ( temp 4-component vector of float)
0:27 Convert int to float ( temp float)
0:27 'c' ( temp int)
0:27 'input' ( in 4-component vector of float)
0:28 vector-scale ( temp 4-component vector of float)
0:28 Convert int to float ( temp float)
0:28 'd' ( temp int)
0:28 'input' ( in 4-component vector of float)
0:30 Comma ( temp int)
0:30 move second child to first child ( temp int)
0:30 'e' ( temp int)
0:30 move second child to first child ( temp int)
0:30 'a' ( temp int)
0:30 Test condition and select ( temp int)
0:30 Condition
0:30 Convert int to bool ( temp bool)
0:30 'b' ( temp int)
0:30 true case
0:30 move second child to first child ( temp int)
0:30 'c' ( temp int)
0:30 'd' ( temp int)
0:30 false case
0:30 Constant:
0:30 10 (const int)
0:23 Branch: Return with expression
0:23 mix ( temp 2-component vector of float)
0:23 'src1' ( in 2-component vector of float)
0:23 'src0' ( in 2-component vector of float)
0:23 'cnd' ( in 2-component vector of bool)
0:27 Function Definition: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:27 Function Parameters:
0:27 'input' ( in 4-component vector of float)
0:? Sequence
0:28 Sequence
0:28 move second child to first child ( temp int)
0:28 'a' ( temp int)
0:28 Constant:
0:28 5 (const int)
0:29 Sequence
0:29 move second child to first child ( temp int)
0:29 'b' ( temp int)
0:29 Constant:
0:29 6 (const int)
0:30 Sequence
0:30 move second child to first child ( temp int)
0:30 'b' ( temp int)
0:30 Test condition and select ( temp int)
0:30 Condition
0:30 Convert int to bool ( temp bool)
0:30 'a' ( temp int)
0:30 true case
0:30 move second child to first child ( temp int)
0:30 'd' ( temp int)
0:30 'c' ( temp int)
0:30 false case
0:30 Constant:
0:30 11 (const int)
0:32 move second child to first child ( temp 4-component vector of float)
0:32 'f' ( temp 4-component vector of float)
0:32 Test condition and select ( temp 4-component vector of float)
0:32 Condition
0:32 Compare Less Than ( temp bool)
0:32 direct index ( temp float)
0:32 'ret' ( temp 4-component vector of float)
0:32 Constant:
0:32 0 (const int)
0:32 direct index ( temp float)
0:32 'input' ( in 4-component vector of float)
0:32 Constant:
0:32 1 (const int)
0:32 true case
0:32 vector-scale ( temp 4-component vector of float)
0:32 Convert int to float ( temp float)
0:32 'c' ( temp int)
0:32 'input' ( in 4-component vector of float)
0:32 false case
0:32 vector-scale ( temp 4-component vector of float)
0:32 Convert int to float ( temp float)
0:32 'd' ( temp int)
0:32 'input' ( in 4-component vector of float)
0:34 Branch: Return with expression
0:33 add ( temp 4-component vector of float)
0:33 add ( temp 4-component vector of float)
0:30 'c' ( temp int)
0:30 Constant:
0:30 7 (const int)
0:31 Sequence
0:31 move second child to first child ( temp int)
0:31 'd' ( temp int)
0:31 Constant:
0:31 7 (const int)
0:32 Sequence
0:32 move second child to first child ( temp 4-component vector of float)
0:32 'ret' ( temp 4-component vector of float)
0:34 add ( temp 4-component vector of float)
0:33 add ( temp 4-component vector of float)
0:33 vector-scale ( temp 4-component vector of float)
0:33 Convert int to float ( temp float)
0:33 'e' ( temp int)
0:33 'ret' ( temp 4-component vector of float)
0:33 'f' ( temp 4-component vector of float)
0:33 Function Call: vectorCond( ( temp 4-component vector of float)
0:32 add ( temp 4-component vector of float)
0:32 vector-scale ( temp 4-component vector of float)
0:32 Convert int to float ( temp float)
0:32 'a' ( temp int)
0:32 'input' ( in 4-component vector of float)
0:33 vector-scale ( temp 4-component vector of float)
0:33 Convert int to float ( temp float)
0:33 'b' ( temp int)
0:33 'input' ( in 4-component vector of float)
0:34 vector-scale ( temp 4-component vector of float)
0:34 Convert int to float ( temp float)
0:34 'c' ( temp int)
0:34 'input' ( in 4-component vector of float)
0:35 vector-scale ( temp 4-component vector of float)
0:35 Convert int to float ( temp float)
0:35 'd' ( temp int)
0:35 'input' ( in 4-component vector of float)
0:37 Comma ( temp int)
0:37 move second child to first child ( temp int)
0:37 'e' ( temp int)
0:37 move second child to first child ( temp int)
0:37 'a' ( temp int)
0:37 Test condition and select ( temp int)
0:37 Condition
0:37 Convert int to bool ( temp bool)
0:37 'b' ( temp int)
0:37 true case
0:37 move second child to first child ( temp int)
0:37 'c' ( temp int)
0:37 'd' ( temp int)
0:37 false case
0:37 Constant:
0:37 10 (const int)
0:37 move second child to first child ( temp int)
0:37 'b' ( temp int)
0:37 Test condition and select ( temp int)
0:37 Condition
0:37 Convert int to bool ( temp bool)
0:37 'a' ( temp int)
0:37 true case
0:37 move second child to first child ( temp int)
0:37 'd' ( temp int)
0:37 'c' ( temp int)
0:37 false case
0:37 Constant:
0:37 11 (const int)
0:39 move second child to first child ( temp 4-component vector of float)
0:39 'f' ( temp 4-component vector of float)
0:39 Test condition and select ( temp 4-component vector of float)
0:39 Condition
0:39 Compare Less Than ( temp bool)
0:39 direct index ( temp float)
0:39 'ret' ( temp 4-component vector of float)
0:39 Constant:
0:39 0 (const int)
0:39 direct index ( temp float)
0:39 'input' ( in 4-component vector of float)
0:39 Constant:
0:39 1 (const int)
0:39 true case
0:39 vector-scale ( temp 4-component vector of float)
0:39 Convert int to float ( temp float)
0:39 'c' ( temp int)
0:39 'input' ( in 4-component vector of float)
0:39 false case
0:39 vector-scale ( temp 4-component vector of float)
0:39 Convert int to float ( temp float)
0:39 'd' ( temp int)
0:39 'input' ( in 4-component vector of float)
0:41 Branch: Return with expression
0:40 add ( temp 4-component vector of float)
0:40 add ( temp 4-component vector of float)
0:40 add ( temp 4-component vector of float)
0:40 add ( temp 4-component vector of float)
0:40 vector-scale ( temp 4-component vector of float)
0:40 Convert int to float ( temp float)
0:40 'e' ( temp int)
0:40 'ret' ( temp 4-component vector of float)
0:40 'f' ( temp 4-component vector of float)
0:40 Function Call: vectorCond( ( temp 4-component vector of float)
0:40 Function Call: scalarCond( ( temp 4-component vector of float)
0:? Construct vec4 ( temp 4-component vector of float)
0:34 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
0:? Constant:
0:? true (const bool)
0:? false (const bool)
......@@ -396,19 +502,19 @@ gl_FragCoord origin is upper left
0:? Constant:
0:? 3.000000
0:? 4.000000
0:34 Constant:
0:34 10.000000
0:34 Constant:
0:34 10.000000
0:20 Function Definition: PixelShaderFunction( ( temp void)
0:20 Function Parameters:
0:41 Constant:
0:41 10.000000
0:41 Constant:
0:41 10.000000
0:27 Function Definition: PixelShaderFunction( ( temp void)
0:27 Function Parameters:
0:? Sequence
0:20 move second child to first child ( temp 4-component vector of float)
0:27 move second child to first child ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? 'input' (layout( location=0) in 4-component vector of float)
0:20 move second child to first child ( temp 4-component vector of float)
0:27 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:20 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:27 Function Call: @PixelShaderFunction(vf4; ( temp 4-component vector of float)
0:? 'input' ( temp 4-component vector of float)
0:? Linker Objects
0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float c4, uniform 4-component vector of float t4, uniform 4-component vector of float f4, uniform float t, uniform float f})
......@@ -417,270 +523,313 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 186
// Id's are bound by 220
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 179 182
EntryPoint Fragment 4 "PixelShaderFunction" 213 216
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "PixelShaderFunction"
Name 9 "vectorCond("
Name 20 "fbSelect(vb2;vf2;vf2;"
Name 17 "cnd"
Name 18 "src0"
Name 19 "src1"
Name 25 "@PixelShaderFunction(vf4;"
Name 24 "input"
Name 27 "$Global"
MemberName 27($Global) 0 "c4"
MemberName 27($Global) 1 "t4"
MemberName 27($Global) 2 "f4"
MemberName 27($Global) 3 "t"
MemberName 27($Global) 4 "f"
Name 29 ""
Name 80 "a"
Name 82 "b"
Name 84 "c"
Name 86 "d"
Name 87 "ret"
Name 107 "e"
Name 128 "f"
Name 166 "param"
Name 167 "param"
Name 168 "param"
Name 177 "input"
Name 179 "input"
Name 182 "@entryPointOutput"
Name 183 "param"
MemberDecorate 27($Global) 0 Offset 0
MemberDecorate 27($Global) 1 Offset 16
MemberDecorate 27($Global) 2 Offset 32
MemberDecorate 27($Global) 3 Offset 48
MemberDecorate 27($Global) 4 Offset 52
Decorate 27($Global) Block
Decorate 29 DescriptorSet 0
Decorate 179(input) Location 0
Decorate 182(@entryPointOutput) Location 0
Name 11 "scalarCond("
Name 22 "fbSelect(vb2;vf2;vf2;"
Name 19 "cnd"
Name 20 "src0"
Name 21 "src1"
Name 27 "@PixelShaderFunction(vf4;"
Name 26 "input"
Name 29 "$Global"
MemberName 29($Global) 0 "c4"
MemberName 29($Global) 1 "t4"
MemberName 29($Global) 2 "f4"
MemberName 29($Global) 3 "t"
MemberName 29($Global) 4 "f"
Name 31 ""
Name 85 "ret"
Name 113 "a"
Name 115 "b"
Name 117 "c"
Name 119 "d"
Name 120 "ret"
Name 140 "e"
Name 161 "f"
Name 200 "param"
Name 201 "param"
Name 202 "param"
Name 211 "input"
Name 213 "input"
Name 216 "@entryPointOutput"
Name 217 "param"
MemberDecorate 29($Global) 0 Offset 0
MemberDecorate 29($Global) 1 Offset 16
MemberDecorate 29($Global) 2 Offset 32
MemberDecorate 29($Global) 3 Offset 48
MemberDecorate 29($Global) 4 Offset 52
Decorate 29($Global) Block
Decorate 31 DescriptorSet 0
Decorate 213(input) Location 0
Decorate 216(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeFunction 7(fvec4)
11: TypeBool
12: TypeVector 11(bool) 2
13: TypePointer Function 12(bvec2)
14: TypeVector 6(float) 2
15: TypePointer Function 14(fvec2)
16: TypeFunction 14(fvec2) 13(ptr) 15(ptr) 15(ptr)
22: TypePointer Function 7(fvec4)
23: TypeFunction 7(fvec4) 22(ptr)
27($Global): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 6(float) 6(float)
28: TypePointer Uniform 27($Global)
29: 28(ptr) Variable Uniform
30: TypeInt 32 1
31: 30(int) Constant 2
32: TypePointer Uniform 7(fvec4)
35: 30(int) Constant 1
38: 30(int) Constant 0
41: TypeVector 11(bool) 4
42: 6(float) Constant 0
43: 7(fvec4) ConstantComposite 42 42 42 42
46: 30(int) Constant 4
47: TypePointer Uniform 6(float)
51: 30(int) Constant 3
79: TypePointer Function 30(int)
81: 30(int) Constant 5
83: 30(int) Constant 6
85: 30(int) Constant 7
110: TypeInt 32 0
111: 110(int) Constant 0
117: 30(int) Constant 10
126: 30(int) Constant 11
130: TypePointer Function 6(float)
133: 110(int) Constant 1
157: 11(bool) ConstantTrue
158: 11(bool) ConstantFalse
159: 12(bvec2) ConstantComposite 157 158
160: 6(float) Constant 1065353216
161: 6(float) Constant 1073741824
162: 14(fvec2) ConstantComposite 160 161
163: 6(float) Constant 1077936128
164: 6(float) Constant 1082130432
165: 14(fvec2) ConstantComposite 163 164
170: 6(float) Constant 1092616192
178: TypePointer Input 7(fvec4)
179(input): 178(ptr) Variable Input
181: TypePointer Output 7(fvec4)
182(@entryPointOutput): 181(ptr) Variable Output
13: TypeBool
14: TypeVector 13(bool) 2
15: TypePointer Function 14(bvec2)
16: TypeVector 6(float) 2
17: TypePointer Function 16(fvec2)
18: TypeFunction 16(fvec2) 15(ptr) 17(ptr) 17(ptr)
24: TypePointer Function 7(fvec4)
25: TypeFunction 7(fvec4) 24(ptr)
29($Global): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 6(float) 6(float)
30: TypePointer Uniform 29($Global)
31: 30(ptr) Variable Uniform
32: TypeInt 32 1
33: 32(int) Constant 2
34: TypePointer Uniform 7(fvec4)
37: 32(int) Constant 1
40: 32(int) Constant 0
43: TypeVector 13(bool) 4
44: 6(float) Constant 0
45: 7(fvec4) ConstantComposite 44 44 44 44
48: 32(int) Constant 4
49: TypePointer Uniform 6(float)
53: 32(int) Constant 3
100: 6(float) Constant 1065353216
101: 7(fvec4) ConstantComposite 100 100 100 100
112: TypePointer Function 32(int)
114: 32(int) Constant 5
116: 32(int) Constant 6
118: 32(int) Constant 7
143: TypeInt 32 0
144: 143(int) Constant 0
150: 32(int) Constant 10
159: 32(int) Constant 11
163: TypePointer Function 6(float)
166: 143(int) Constant 1
192: 13(bool) ConstantTrue
193: 13(bool) ConstantFalse
194: 14(bvec2) ConstantComposite 192 193
195: 6(float) Constant 1073741824
196: 16(fvec2) ConstantComposite 100 195
197: 6(float) Constant 1077936128
198: 6(float) Constant 1082130432
199: 16(fvec2) ConstantComposite 197 198
204: 6(float) Constant 1092616192
212: TypePointer Input 7(fvec4)
213(input): 212(ptr) Variable Input
215: TypePointer Output 7(fvec4)
216(@entryPointOutput): 215(ptr) Variable Output
4(PixelShaderFunction): 2 Function None 3
5: Label
177(input): 22(ptr) Variable Function
183(param): 22(ptr) Variable Function
180: 7(fvec4) Load 179(input)
Store 177(input) 180
184: 7(fvec4) Load 177(input)
Store 183(param) 184
185: 7(fvec4) FunctionCall 25(@PixelShaderFunction(vf4;) 183(param)
Store 182(@entryPointOutput) 185
211(input): 24(ptr) Variable Function
217(param): 24(ptr) Variable Function
214: 7(fvec4) Load 213(input)
Store 211(input) 214
218: 7(fvec4) Load 211(input)
Store 217(param) 218
219: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 217(param)
Store 216(@entryPointOutput) 219
Return
FunctionEnd
9(vectorCond(): 7(fvec4) Function None 8
10: Label
33: 32(ptr) AccessChain 29 31
34: 7(fvec4) Load 33
36: 32(ptr) AccessChain 29 35
37: 7(fvec4) Load 36
39: 32(ptr) AccessChain 29 38
40: 7(fvec4) Load 39
44: 41(bvec4) FOrdNotEqual 40 43
45: 7(fvec4) Select 44 37 34
48: 47(ptr) AccessChain 29 46
49: 6(float) Load 48
50: 7(fvec4) CompositeConstruct 49 49 49 49
52: 47(ptr) AccessChain 29 51
53: 6(float) Load 52
54: 7(fvec4) CompositeConstruct 53 53 53 53
55: 32(ptr) AccessChain 29 38
56: 7(fvec4) Load 55
57: 41(bvec4) FOrdNotEqual 56 43
58: 7(fvec4) Select 57 54 50
59: 7(fvec4) FAdd 45 58
60: 32(ptr) AccessChain 29 31
61: 7(fvec4) Load 60
62: 32(ptr) AccessChain 29 35
35: 34(ptr) AccessChain 31 33
36: 7(fvec4) Load 35
38: 34(ptr) AccessChain 31 37
39: 7(fvec4) Load 38
41: 34(ptr) AccessChain 31 40
42: 7(fvec4) Load 41
46: 43(bvec4) FOrdNotEqual 42 45
47: 7(fvec4) Select 46 39 36
50: 49(ptr) AccessChain 31 48
51: 6(float) Load 50
52: 7(fvec4) CompositeConstruct 51 51 51 51
54: 49(ptr) AccessChain 31 53
55: 6(float) Load 54
56: 7(fvec4) CompositeConstruct 55 55 55 55
57: 34(ptr) AccessChain 31 40
58: 7(fvec4) Load 57
59: 43(bvec4) FOrdNotEqual 58 45
60: 7(fvec4) Select 59 56 52
61: 7(fvec4) FAdd 47 60
62: 34(ptr) AccessChain 31 33
63: 7(fvec4) Load 62
64: 32(ptr) AccessChain 29 35
64: 34(ptr) AccessChain 31 37
65: 7(fvec4) Load 64
66: 32(ptr) AccessChain 29 31
66: 34(ptr) AccessChain 31 37
67: 7(fvec4) Load 66
68: 41(bvec4) FOrdLessThan 65 67
69: 7(fvec4) Select 68 63 61
70: 7(fvec4) FAdd 59 69
ReturnValue 70
68: 34(ptr) AccessChain 31 33
69: 7(fvec4) Load 68
70: 43(bvec4) FOrdLessThan 67 69
71: 7(fvec4) Select 70 65 63
72: 7(fvec4) FAdd 61 71
73: 34(ptr) AccessChain 31 33
74: 7(fvec4) Load 73
75: 49(ptr) AccessChain 31 53
76: 6(float) Load 75
77: 7(fvec4) CompositeConstruct 76 76 76 76
78: 34(ptr) AccessChain 31 40
79: 7(fvec4) Load 78
80: 43(bvec4) FOrdNotEqual 79 45
81: 7(fvec4) Select 80 77 74
82: 7(fvec4) FAdd 72 81
ReturnValue 82
FunctionEnd
11(scalarCond(): 7(fvec4) Function None 8
12: Label
85(ret): 24(ptr) Variable Function
86: 24(ptr) Variable Function
87: 49(ptr) AccessChain 31 53
88: 6(float) Load 87
89: 49(ptr) AccessChain 31 48
90: 6(float) Load 89
91: 13(bool) FOrdNotEqual 88 90
SelectionMerge 93 None
BranchConditional 91 92 99
92: Label
94: 49(ptr) AccessChain 31 53
95: 6(float) Load 94
96: 34(ptr) AccessChain 31 33
97: 7(fvec4) Load 96
98: 7(fvec4) VectorTimesScalar 97 95
Store 86 98
Branch 93
99: Label
Store 86 101
Branch 93
93: Label
102: 7(fvec4) Load 86
Store 85(ret) 102
103: 7(fvec4) Load 85(ret)
ReturnValue 103
FunctionEnd
20(fbSelect(vb2;vf2;vf2;): 14(fvec2) Function None 16
17(cnd): 13(ptr) FunctionParameter
18(src0): 15(ptr) FunctionParameter
19(src1): 15(ptr) FunctionParameter
21: Label
73: 14(fvec2) Load 19(src1)
74: 14(fvec2) Load 18(src0)
75: 12(bvec2) Load 17(cnd)
76: 14(fvec2) Select 75 74 73
ReturnValue 76
22(fbSelect(vb2;vf2;vf2;): 16(fvec2) Function None 18
19(cnd): 15(ptr) FunctionParameter
20(src0): 17(ptr) FunctionParameter
21(src1): 17(ptr) FunctionParameter
23: Label
106: 16(fvec2) Load 21(src1)
107: 16(fvec2) Load 20(src0)
108: 14(bvec2) Load 19(cnd)
109: 16(fvec2) Select 108 107 106
ReturnValue 109
FunctionEnd
25(@PixelShaderFunction(vf4;): 7(fvec4) Function None 23
24(input): 22(ptr) FunctionParameter
26: Label
80(a): 79(ptr) Variable Function
82(b): 79(ptr) Variable Function
84(c): 79(ptr) Variable Function
86(d): 79(ptr) Variable Function
87(ret): 22(ptr) Variable Function
107(e): 79(ptr) Variable Function
108: 79(ptr) Variable Function
119: 79(ptr) Variable Function
128(f): 22(ptr) Variable Function
129: 22(ptr) Variable Function
166(param): 13(ptr) Variable Function
167(param): 15(ptr) Variable Function
168(param): 15(ptr) Variable Function
Store 80(a) 81
Store 82(b) 83
Store 84(c) 85
Store 86(d) 85
88: 30(int) Load 80(a)
89: 6(float) ConvertSToF 88
90: 7(fvec4) Load 24(input)
91: 7(fvec4) VectorTimesScalar 90 89
92: 30(int) Load 82(b)
93: 6(float) ConvertSToF 92
94: 7(fvec4) Load 24(input)
95: 7(fvec4) VectorTimesScalar 94 93
96: 7(fvec4) FAdd 91 95
97: 30(int) Load 84(c)
98: 6(float) ConvertSToF 97
99: 7(fvec4) Load 24(input)
100: 7(fvec4) VectorTimesScalar 99 98
101: 7(fvec4) FAdd 96 100
102: 30(int) Load 86(d)
103: 6(float) ConvertSToF 102
104: 7(fvec4) Load 24(input)
105: 7(fvec4) VectorTimesScalar 104 103
106: 7(fvec4) FAdd 101 105
Store 87(ret) 106
109: 30(int) Load 82(b)
112: 11(bool) INotEqual 109 111
SelectionMerge 114 None
BranchConditional 112 113 116
113: Label
115: 30(int) Load 86(d)
Store 84(c) 115
Store 108 115
Branch 114
116: Label
Store 108 117
Branch 114
114: Label
118: 30(int) Load 108
Store 80(a) 118
Store 107(e) 118
120: 30(int) Load 80(a)
121: 11(bool) INotEqual 120 111
SelectionMerge 123 None
BranchConditional 121 122 125
122: Label
124: 30(int) Load 84(c)
Store 86(d) 124
Store 119 124
Branch 123
125: Label
Store 119 126
Branch 123
123: Label
127: 30(int) Load 119
Store 82(b) 127
131: 130(ptr) AccessChain 87(ret) 111
132: 6(float) Load 131
134: 130(ptr) AccessChain 24(input) 133
135: 6(float) Load 134
136: 11(bool) FOrdLessThan 132 135
SelectionMerge 138 None
BranchConditional 136 137 143
137: Label
139: 30(int) Load 84(c)
140: 6(float) ConvertSToF 139
141: 7(fvec4) Load 24(input)
142: 7(fvec4) VectorTimesScalar 141 140
Store 129 142
Branch 138
143: Label
144: 30(int) Load 86(d)
145: 6(float) ConvertSToF 144
146: 7(fvec4) Load 24(input)
147: 7(fvec4) VectorTimesScalar 146 145
Store 129 147
Branch 138
138: Label
148: 7(fvec4) Load 129
Store 128(f) 148
149: 30(int) Load 107(e)
150: 6(float) ConvertSToF 149
151: 7(fvec4) Load 87(ret)
152: 7(fvec4) VectorTimesScalar 151 150
153: 7(fvec4) Load 128(f)
154: 7(fvec4) FAdd 152 153
155: 7(fvec4) FunctionCall 9(vectorCond()
156: 7(fvec4) FAdd 154 155
Store 166(param) 159
Store 167(param) 162
Store 168(param) 165
169: 14(fvec2) FunctionCall 20(fbSelect(vb2;vf2;vf2;) 166(param) 167(param) 168(param)
171: 6(float) CompositeExtract 169 0
172: 6(float) CompositeExtract 169 1
173: 7(fvec4) CompositeConstruct 171 172 170 170
174: 7(fvec4) FAdd 156 173
ReturnValue 174
27(@PixelShaderFunction(vf4;): 7(fvec4) Function None 25
26(input): 24(ptr) FunctionParameter
28: Label
113(a): 112(ptr) Variable Function
115(b): 112(ptr) Variable Function
117(c): 112(ptr) Variable Function
119(d): 112(ptr) Variable Function
120(ret): 24(ptr) Variable Function
140(e): 112(ptr) Variable Function
141: 112(ptr) Variable Function
152: 112(ptr) Variable Function
161(f): 24(ptr) Variable Function
162: 24(ptr) Variable Function
200(param): 15(ptr) Variable Function
201(param): 17(ptr) Variable Function
202(param): 17(ptr) Variable Function
Store 113(a) 114
Store 115(b) 116
Store 117(c) 118
Store 119(d) 118
121: 32(int) Load 113(a)
122: 6(float) ConvertSToF 121
123: 7(fvec4) Load 26(input)
124: 7(fvec4) VectorTimesScalar 123 122
125: 32(int) Load 115(b)
126: 6(float) ConvertSToF 125
127: 7(fvec4) Load 26(input)
128: 7(fvec4) VectorTimesScalar 127 126
129: 7(fvec4) FAdd 124 128
130: 32(int) Load 117(c)
131: 6(float) ConvertSToF 130
132: 7(fvec4) Load 26(input)
133: 7(fvec4) VectorTimesScalar 132 131
134: 7(fvec4) FAdd 129 133
135: 32(int) Load 119(d)
136: 6(float) ConvertSToF 135
137: 7(fvec4) Load 26(input)
138: 7(fvec4) VectorTimesScalar 137 136
139: 7(fvec4) FAdd 134 138
Store 120(ret) 139
142: 32(int) Load 115(b)
145: 13(bool) INotEqual 142 144
SelectionMerge 147 None
BranchConditional 145 146 149
146: Label
148: 32(int) Load 119(d)
Store 117(c) 148
Store 141 148
Branch 147
149: Label
Store 141 150
Branch 147
147: Label
151: 32(int) Load 141
Store 113(a) 151
Store 140(e) 151
153: 32(int) Load 113(a)
154: 13(bool) INotEqual 153 144
SelectionMerge 156 None
BranchConditional 154 155 158
155: Label
157: 32(int) Load 117(c)
Store 119(d) 157
Store 152 157
Branch 156
158: Label
Store 152 159
Branch 156
156: Label
160: 32(int) Load 152
Store 115(b) 160
164: 163(ptr) AccessChain 120(ret) 144
165: 6(float) Load 164
167: 163(ptr) AccessChain 26(input) 166
168: 6(float) Load 167
169: 13(bool) FOrdLessThan 165 168
SelectionMerge 171 None
BranchConditional 169 170 176
170: Label
172: 32(int) Load 117(c)
173: 6(float) ConvertSToF 172
174: 7(fvec4) Load 26(input)
175: 7(fvec4) VectorTimesScalar 174 173
Store 162 175
Branch 171
176: Label
177: 32(int) Load 119(d)
178: 6(float) ConvertSToF 177
179: 7(fvec4) Load 26(input)
180: 7(fvec4) VectorTimesScalar 179 178
Store 162 180
Branch 171
171: Label
181: 7(fvec4) Load 162
Store 161(f) 181
182: 32(int) Load 140(e)
183: 6(float) ConvertSToF 182
184: 7(fvec4) Load 120(ret)
185: 7(fvec4) VectorTimesScalar 184 183
186: 7(fvec4) Load 161(f)
187: 7(fvec4) FAdd 185 186
188: 7(fvec4) FunctionCall 9(vectorCond()
189: 7(fvec4) FAdd 187 188
190: 7(fvec4) FunctionCall 11(scalarCond()
191: 7(fvec4) FAdd 189 190
Store 200(param) 194
Store 201(param) 196
Store 202(param) 199
203: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 200(param) 201(param) 202(param)
205: 6(float) CompositeExtract 203 0
206: 6(float) CompositeExtract 203 1
207: 7(fvec4) CompositeConstruct 205 206 204 204
208: 7(fvec4) FAdd 191 207
ReturnValue 208
FunctionEnd
......@@ -8,7 +8,14 @@ float4 vectorCond()
{
return (c4 ? t4 : f4) +
(c4 ? t : f ) +
(t4 < f4 ? t4 : f4);
(t4 < f4 ? t4 : f4) +
(c4 ? t : f4);
}
float4 scalarCond()
{
float4 ret = t != f ? t * f4 : 1;
return ret;
}
float2 fbSelect(bool2 cnd, float2 src0, float2 src1)
......@@ -30,6 +37,6 @@ float4 PixelShaderFunction(float4 input) : COLOR0
e = a = b ? c = d : 10, b = a ? d = c : 11;
float4 f;
f = ret.x < input.y ? c * input : d * input;
return e * ret + f + vectorCond() +
return e * ret + f + vectorCond() + scalarCond() +
float4(fbSelect(bool2(true, false), float2(1.0, 2.0), float2(3.0, 4.0)), 10.0, 10.0);
}
......@@ -836,6 +836,9 @@ TIntermTyped* TIntermediate::addUniShapeConversion(TOperator op, const TType& ty
case EOpAssign:
break;
case EOpMix:
break;
default:
return node;
}
......@@ -911,6 +914,8 @@ void TIntermediate::addBiShapeConversion(TOperator op, TIntermTyped*& lhsNode, T
case EOpAnd:
case EOpInclusiveOr:
case EOpExclusiveOr:
case EOpMix:
break;
default:
......@@ -1422,19 +1427,17 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
return nullptr;
}
// After conversion, types have to match.
if (falseBlock->getType() != trueBlock->getType())
return nullptr;
// Handle a vector condition as a mix
if (!cond->getType().isScalarOrVec1()) {
TType targetVectorType(trueBlock->getType().getBasicType(), EvqTemporary,
cond->getType().getVectorSize());
// smear true/false operations if needed
if (trueBlock->getType().isScalarOrVec1())
trueBlock = addShapeConversion(targetVectorType, trueBlock);
if (falseBlock->getType().isScalarOrVec1())
falseBlock = addShapeConversion(targetVectorType, falseBlock);
// smear true/false operands as needed
trueBlock = addUniShapeConversion(EOpMix, targetVectorType, trueBlock);
falseBlock = addUniShapeConversion(EOpMix, targetVectorType, falseBlock);
// After conversion, types have to match.
if (falseBlock->getType() != trueBlock->getType())
return nullptr;
// make the mix operation
TIntermAggregate* mix = makeAggregate(loc);
......@@ -1449,6 +1452,13 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
// Now have a scalar condition...
// Convert true and false expressions to matching types
addBiShapeConversion(EOpMix, trueBlock, falseBlock);
// After conversion, types have to match.
if (falseBlock->getType() != trueBlock->getType())
return nullptr;
// Eliminate the selection when the condition is a scalar and all operands are constant.
if (cond->getAsConstantUnion() && trueBlock->getAsConstantUnion() && falseBlock->getAsConstantUnion()) {
if (cond->getAsConstantUnion()->getConstArray()[0].getBConst())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment