From ae8af5d33e11513ac93113c254f2dcaee809c6f1 Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 20 Aug 2017 10:44:21 +0200 Subject: [PATCH] HLSL: fix array[1] of vec4 constant declaration. --- Test/baseResults/150.tesc.out | 2 +- Test/baseResults/420.tese.out | 2 +- Test/baseResults/hlsl.array.frag.out | 611 +++++++++++++-------- Test/hlsl.array.frag | 7 +- glslang/MachineIndependent/ParseHelper.cpp | 2 +- hlsl/hlslParseHelper.cpp | 2 +- 6 files changed, 381 insertions(+), 245 deletions(-) diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out index 5cc9e804c..25e44edda 100644 --- a/Test/baseResults/150.tesc.out +++ b/Test/baseResults/150.tesc.out @@ -754,7 +754,7 @@ ERROR: 0:29: 'constructor' : cannot convert parameter 2 from ' const 2X2 matrix ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments ERROR: 0:29: '=' : cannot convert from ' const float' to ' global 2-element array of 4-component vector of float' ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float -ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s, global float t}' +ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' const structure{ global 4-component vector of float a, global 4-component vector of float b}' to ' temp structure{ global float s, global float t}' ERROR: 0:70: 'initializer list' : wrong number of structure members ERROR: 13 compilation errors. No code generated. diff --git a/Test/baseResults/420.tese.out b/Test/baseResults/420.tese.out index 66d41e55b..f14e1c0d3 100644 --- a/Test/baseResults/420.tese.out +++ b/Test/baseResults/420.tese.out @@ -10,7 +10,7 @@ ERROR: 0:29: 'constructor' : cannot convert parameter 2 from ' const 2X2 matrix ERROR: 0:29: ' const 2-element array of 4-component vector of float' : cannot construct with these arguments ERROR: 0:29: '=' : cannot convert from ' const float' to ' global 2-element array of 4-component vector of float' ERROR: 0:30: 'initializer list' : wrong number of matrix columns: temp 4X2 matrix of float -ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' temp float' to ' temp structure{ global float s, global float t}' +ERROR: 0:40: 'constructor' : cannot convert parameter 1 from ' const structure{ global 4-component vector of float a, global 4-component vector of float b}' to ' temp structure{ global float s, global float t}' ERROR: 0:70: 'initializer list' : wrong number of structure members ERROR: 13 compilation errors. No code generated. diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out index 88bed81cf..54a907ecb 100755 --- a/Test/baseResults/hlsl.array.frag.out +++ b/Test/baseResults/hlsl.array.frag.out @@ -10,87 +10,134 @@ gl_FragCoord origin is upper left 0:? 2.000000 0:? 3.000000 0:? 4.000000 -0:10 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) -0:10 Function Parameters: -0:10 'i' ( in int) -0:10 'input' ( in 3-element array of 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp 2-element array of 4-component vector of float) +0:11 'c2' ( global 2-element array of 4-component vector of float) +0:11 Construct vec4 ( temp 2-element array of 4-component vector of float) +0:11 'C' ( global 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:14 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) +0:14 Function Parameters: +0:14 'i' ( in int) +0:14 'input' ( in 3-element array of 4-component vector of float) 0:? Sequence -0:11 Sequence -0:11 move second child to first child ( temp 10-element array of 4-component vector of float) -0:11 'b' ( temp 10-element array of 4-component vector of float) -0:11 Construct vec4 ( temp 10-element array of 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:12 Branch: Return with expression -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 direct index ( temp 4-component vector of float) -0:12 a: direct index for structure ( uniform 4-element array of 4-component vector of float) -0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) -0:12 Constant: -0:12 0 (const uint) -0:12 Constant: -0:12 1 (const int) -0:12 indirect index ( temp 4-component vector of float) -0:12 a: direct index for structure ( uniform 4-element array of 4-component vector of float) -0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) -0:12 Constant: -0:12 0 (const uint) -0:12 'i' ( in int) -0:12 direct index ( temp 4-component vector of float) -0:12 'input' ( in 3-element array of 4-component vector of float) -0:12 Constant: -0:12 2 (const int) -0:12 indirect index ( temp 4-component vector of float) -0:12 'input' ( in 3-element array of 4-component vector of float) -0:12 'i' ( in int) -0:12 direct index ( temp 4-component vector of float) -0:12 'b' ( temp 10-element array of 4-component vector of float) -0:12 Constant: -0:12 5 (const int) -0:12 indirect index ( temp 4-component vector of float) -0:12 'b' ( temp 10-element array of 4-component vector of float) -0:12 'i' ( in int) -0:12 indirect index ( temp 4-component vector of float) -0:12 m: direct index for structure ( temp 7-element array of 4-component vector of float) -0:12 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m}) -0:12 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m}) -0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) -0:12 Constant: -0:12 1 (const uint) -0:12 'i' ( in int) -0:12 Constant: -0:12 0 (const int) -0:12 'i' ( in int) -0:10 Function Definition: PixelShaderFunction( ( temp void) -0:10 Function Parameters: +0:15 Sequence +0:15 move second child to first child ( temp 10-element array of 4-component vector of float) +0:15 'b' ( temp 10-element array of 4-component vector of float) +0:15 Construct vec4 ( temp 10-element array of 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'tmp' ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 'C' ( global 4-component vector of float) +0:16 direct index ( temp 4-component vector of float) +0:16 a1: direct index for structure ( uniform 1-element array of 4-component vector of float) +0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1.000000 +0:16 2.000000 +0:16 3.000000 +0:16 4.000000 +0:16 indirect index ( temp 4-component vector of float) +0:16 a2: direct index for structure ( uniform 2-element array of 4-component vector of float) +0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:16 Constant: +0:16 3 (const uint) +0:16 'i' ( in int) +0:16 indirect index ( temp 4-component vector of float) +0:16 'c2' ( global 2-element array of 4-component vector of float) +0:16 'i' ( in int) +0:17 Branch: Return with expression +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 direct index ( temp 4-component vector of float) +0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:17 Constant: +0:17 0 (const uint) +0:17 Constant: +0:17 1 (const int) +0:17 indirect index ( temp 4-component vector of float) +0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:17 Constant: +0:17 0 (const uint) +0:17 'i' ( in int) +0:17 direct index ( temp 4-component vector of float) +0:17 'input' ( in 3-element array of 4-component vector of float) +0:17 Constant: +0:17 2 (const int) +0:17 indirect index ( temp 4-component vector of float) +0:17 'input' ( in 3-element array of 4-component vector of float) +0:17 'i' ( in int) +0:17 direct index ( temp 4-component vector of float) +0:17 'b' ( temp 10-element array of 4-component vector of float) +0:17 Constant: +0:17 5 (const int) +0:17 indirect index ( temp 4-component vector of float) +0:17 'b' ( temp 10-element array of 4-component vector of float) +0:17 'i' ( in int) +0:17 indirect index ( temp 4-component vector of float) +0:17 m: direct index for structure ( temp 7-element array of 4-component vector of float) +0:17 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m}) +0:17 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m}) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:17 Constant: +0:17 1 (const uint) +0:17 'i' ( in int) +0:17 Constant: +0:17 0 (const int) +0:17 'i' ( in int) +0:17 'tmp' ( temp 4-component vector of float) +0:14 Function Definition: PixelShaderFunction( ( temp void) +0:14 Function Parameters: 0:? Sequence -0:10 move second child to first child ( temp int) +0:14 move second child to first child ( temp int) 0:? 'i' ( temp int) 0:? 'i' (layout( location=0) flat in int) -0:10 move second child to first child ( temp 3-element array of 4-component vector of float) +0:14 move second child to first child ( temp 3-element array of 4-component vector of float) 0:? 'input' ( temp 3-element array of 4-component vector of float) 0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float) -0:10 move second child to first child ( temp 4-component vector of float) +0:14 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:10 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) +0:14 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) 0:? 'i' ( temp int) 0:? 'input' ( temp 3-element array of 4-component vector of float) 0:? Linker Objects -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) 0:? 'C' ( global 4-component vector of float) +0:? 'c1' ( const 1-element array of 4-component vector of float) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 'c2' ( global 2-element array of 4-component vector of float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'i' (layout( location=0) flat in int) 0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float) @@ -110,99 +157,146 @@ gl_FragCoord origin is upper left 0:? 2.000000 0:? 3.000000 0:? 4.000000 -0:10 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) -0:10 Function Parameters: -0:10 'i' ( in int) -0:10 'input' ( in 3-element array of 4-component vector of float) +0:11 Sequence +0:11 move second child to first child ( temp 2-element array of 4-component vector of float) +0:11 'c2' ( global 2-element array of 4-component vector of float) +0:11 Construct vec4 ( temp 2-element array of 4-component vector of float) +0:11 'C' ( global 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:14 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) +0:14 Function Parameters: +0:14 'i' ( in int) +0:14 'input' ( in 3-element array of 4-component vector of float) 0:? Sequence -0:11 Sequence -0:11 move second child to first child ( temp 10-element array of 4-component vector of float) -0:11 'b' ( temp 10-element array of 4-component vector of float) -0:11 Construct vec4 ( temp 10-element array of 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:11 'C' ( global 4-component vector of float) -0:12 Branch: Return with expression -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 add ( temp 4-component vector of float) -0:12 direct index ( temp 4-component vector of float) -0:12 a: direct index for structure ( uniform 4-element array of 4-component vector of float) -0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) -0:12 Constant: -0:12 0 (const uint) -0:12 Constant: -0:12 1 (const int) -0:12 indirect index ( temp 4-component vector of float) -0:12 a: direct index for structure ( uniform 4-element array of 4-component vector of float) -0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) -0:12 Constant: -0:12 0 (const uint) -0:12 'i' ( in int) -0:12 direct index ( temp 4-component vector of float) -0:12 'input' ( in 3-element array of 4-component vector of float) -0:12 Constant: -0:12 2 (const int) -0:12 indirect index ( temp 4-component vector of float) -0:12 'input' ( in 3-element array of 4-component vector of float) -0:12 'i' ( in int) -0:12 direct index ( temp 4-component vector of float) -0:12 'b' ( temp 10-element array of 4-component vector of float) -0:12 Constant: -0:12 5 (const int) -0:12 indirect index ( temp 4-component vector of float) -0:12 'b' ( temp 10-element array of 4-component vector of float) -0:12 'i' ( in int) -0:12 indirect index ( temp 4-component vector of float) -0:12 m: direct index for structure ( temp 7-element array of 4-component vector of float) -0:12 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m}) -0:12 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m}) -0:12 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) -0:12 Constant: -0:12 1 (const uint) -0:12 'i' ( in int) -0:12 Constant: -0:12 0 (const int) -0:12 'i' ( in int) -0:10 Function Definition: PixelShaderFunction( ( temp void) -0:10 Function Parameters: +0:15 Sequence +0:15 move second child to first child ( temp 10-element array of 4-component vector of float) +0:15 'b' ( temp 10-element array of 4-component vector of float) +0:15 Construct vec4 ( temp 10-element array of 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:15 'C' ( global 4-component vector of float) +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'tmp' ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 add ( temp 4-component vector of float) +0:16 'C' ( global 4-component vector of float) +0:16 direct index ( temp 4-component vector of float) +0:16 a1: direct index for structure ( uniform 1-element array of 4-component vector of float) +0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1.000000 +0:16 2.000000 +0:16 3.000000 +0:16 4.000000 +0:16 indirect index ( temp 4-component vector of float) +0:16 a2: direct index for structure ( uniform 2-element array of 4-component vector of float) +0:16 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:16 Constant: +0:16 3 (const uint) +0:16 'i' ( in int) +0:16 indirect index ( temp 4-component vector of float) +0:16 'c2' ( global 2-element array of 4-component vector of float) +0:16 'i' ( in int) +0:17 Branch: Return with expression +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 add ( temp 4-component vector of float) +0:17 direct index ( temp 4-component vector of float) +0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:17 Constant: +0:17 0 (const uint) +0:17 Constant: +0:17 1 (const int) +0:17 indirect index ( temp 4-component vector of float) +0:17 a: direct index for structure ( uniform 4-element array of 4-component vector of float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:17 Constant: +0:17 0 (const uint) +0:17 'i' ( in int) +0:17 direct index ( temp 4-component vector of float) +0:17 'input' ( in 3-element array of 4-component vector of float) +0:17 Constant: +0:17 2 (const int) +0:17 indirect index ( temp 4-component vector of float) +0:17 'input' ( in 3-element array of 4-component vector of float) +0:17 'i' ( in int) +0:17 direct index ( temp 4-component vector of float) +0:17 'b' ( temp 10-element array of 4-component vector of float) +0:17 Constant: +0:17 5 (const int) +0:17 indirect index ( temp 4-component vector of float) +0:17 'b' ( temp 10-element array of 4-component vector of float) +0:17 'i' ( in int) +0:17 indirect index ( temp 4-component vector of float) +0:17 m: direct index for structure ( temp 7-element array of 4-component vector of float) +0:17 indirect index ( temp structure{ temp 7-element array of 4-component vector of float m}) +0:17 s: direct index for structure ( uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m}) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) +0:17 Constant: +0:17 1 (const uint) +0:17 'i' ( in int) +0:17 Constant: +0:17 0 (const int) +0:17 'i' ( in int) +0:17 'tmp' ( temp 4-component vector of float) +0:14 Function Definition: PixelShaderFunction( ( temp void) +0:14 Function Parameters: 0:? Sequence -0:10 move second child to first child ( temp int) +0:14 move second child to first child ( temp int) 0:? 'i' ( temp int) 0:? 'i' (layout( location=0) flat in int) -0:10 move second child to first child ( temp 3-element array of 4-component vector of float) +0:14 move second child to first child ( temp 3-element array of 4-component vector of float) 0:? 'input' ( temp 3-element array of 4-component vector of float) 0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float) -0:10 move second child to first child ( temp 4-component vector of float) +0:14 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:10 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) +0:14 Function Call: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) 0:? 'i' ( temp int) 0:? 'input' ( temp 3-element array of 4-component vector of float) 0:? Linker Objects -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-element array of 4-component vector of float a, uniform 11-element array of structure{ temp 7-element array of 4-component vector of float m} s, uniform 1-element array of 4-component vector of float a1, uniform 2-element array of 4-component vector of float a2}) 0:? 'C' ( global 4-component vector of float) +0:? 'c1' ( const 1-element array of 4-component vector of float) +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? 'c2' ( global 2-element array of 4-component vector of float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'i' (layout( location=0) flat in int) 0:? 'input' (layout( location=1) in 3-element array of 4-component vector of float) // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 99 +// Id's are bound by 126 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 86 90 93 + EntryPoint Fragment 4 "PixelShaderFunction" 112 116 119 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "PixelShaderFunction" @@ -210,32 +304,40 @@ gl_FragCoord origin is upper left Name 15 "i" Name 16 "input" Name 20 "C" - Name 29 "b" - Name 45 "" - MemberName 45 0 "m" - Name 48 "$Global" - MemberName 48($Global) 0 "a" - MemberName 48($Global) 1 "s" - Name 50 "" - Name 84 "i" - Name 86 "i" - Name 88 "input" - Name 90 "input" - Name 93 "@entryPointOutput" - Name 94 "param" - Name 96 "param" - Decorate 42 ArrayStride 16 - Decorate 44 ArrayStride 16 - MemberDecorate 45 0 Offset 0 - Decorate 47 ArrayStride 112 - MemberDecorate 48($Global) 0 Offset 0 - MemberDecorate 48($Global) 1 Offset 64 - Decorate 48($Global) Block - Decorate 50 DescriptorSet 0 - Decorate 86(i) Flat - Decorate 86(i) Location 0 - Decorate 90(input) Location 1 - Decorate 93(@entryPointOutput) Location 0 + Name 29 "c2" + Name 35 "b" + Name 48 "tmp" + Name 54 "" + MemberName 54 0 "m" + Name 60 "$Global" + MemberName 60($Global) 0 "a" + MemberName 60($Global) 1 "s" + MemberName 60($Global) 2 "a1" + MemberName 60($Global) 3 "a2" + Name 62 "" + Name 110 "i" + Name 112 "i" + Name 114 "input" + Name 116 "input" + Name 119 "@entryPointOutput" + Name 120 "param" + Name 122 "param" + Decorate 51 ArrayStride 16 + Decorate 53 ArrayStride 16 + MemberDecorate 54 0 Offset 0 + Decorate 56 ArrayStride 112 + Decorate 58 ArrayStride 16 + Decorate 59 ArrayStride 16 + MemberDecorate 60($Global) 0 Offset 0 + MemberDecorate 60($Global) 1 Offset 64 + MemberDecorate 60($Global) 2 Offset 1296 + MemberDecorate 60($Global) 3 Offset 1312 + Decorate 60($Global) Block + Decorate 62 DescriptorSet 0 + Decorate 112(i) Flat + Decorate 112(i) Location 0 + Decorate 116(input) Location 1 + Decorate 119(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -254,91 +356,120 @@ gl_FragCoord origin is upper left 23: 8(float) Constant 1077936128 24: 8(float) Constant 1082130432 25: 9(fvec4) ConstantComposite 21 22 23 24 - 26: 10(int) Constant 10 + 26: 10(int) Constant 2 27: TypeArray 9(fvec4) 26 - 28: TypePointer Function 27 - 41: 10(int) Constant 4 - 42: TypeArray 9(fvec4) 41 - 43: 10(int) Constant 7 - 44: TypeArray 9(fvec4) 43 - 45: TypeStruct 44 - 46: 10(int) Constant 11 - 47: TypeArray 45(struct) 46 - 48($Global): TypeStruct 42 47 - 49: TypePointer Uniform 48($Global) - 50: 49(ptr) Variable Uniform - 51: 6(int) Constant 0 - 52: 6(int) Constant 1 - 53: TypePointer Uniform 9(fvec4) - 60: 6(int) Constant 2 - 61: TypePointer Function 9(fvec4) - 69: 6(int) Constant 5 - 85: TypePointer Input 6(int) - 86(i): 85(ptr) Variable Input - 89: TypePointer Input 12 - 90(input): 89(ptr) Variable Input - 92: TypePointer Output 9(fvec4) -93(@entryPointOutput): 92(ptr) Variable Output + 28: TypePointer Private 27 + 29(c2): 28(ptr) Variable Private + 32: 10(int) Constant 10 + 33: TypeArray 9(fvec4) 32 + 34: TypePointer Function 33 + 47: TypePointer Function 9(fvec4) + 50: 10(int) Constant 4 + 51: TypeArray 9(fvec4) 50 + 52: 10(int) Constant 7 + 53: TypeArray 9(fvec4) 52 + 54: TypeStruct 53 + 55: 10(int) Constant 11 + 56: TypeArray 54(struct) 55 + 57: 10(int) Constant 1 + 58: TypeArray 9(fvec4) 57 + 59: TypeArray 9(fvec4) 26 + 60($Global): TypeStruct 51 56 58 59 + 61: TypePointer Uniform 60($Global) + 62: 61(ptr) Variable Uniform + 63: 6(int) Constant 2 + 64: 6(int) Constant 0 + 65: TypePointer Uniform 9(fvec4) + 70: 6(int) Constant 3 + 79: 6(int) Constant 1 + 93: 6(int) Constant 5 + 111: TypePointer Input 6(int) + 112(i): 111(ptr) Variable Input + 115: TypePointer Input 12 + 116(input): 115(ptr) Variable Input + 118: TypePointer Output 9(fvec4) +119(@entryPointOutput): 118(ptr) Variable Output + 125: 58 ConstantComposite 25 4(PixelShaderFunction): 2 Function None 3 5: Label - 84(i): 7(ptr) Variable Function - 88(input): 13(ptr) Variable Function - 94(param): 7(ptr) Variable Function - 96(param): 13(ptr) Variable Function + 110(i): 7(ptr) Variable Function + 114(input): 13(ptr) Variable Function + 120(param): 7(ptr) Variable Function + 122(param): 13(ptr) Variable Function Store 20(C) 25 - 87: 6(int) Load 86(i) - Store 84(i) 87 - 91: 12 Load 90(input) - Store 88(input) 91 - 95: 6(int) Load 84(i) - Store 94(param) 95 - 97: 12 Load 88(input) - Store 96(param) 97 - 98: 9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 94(param) 96(param) - Store 93(@entryPointOutput) 98 + 30: 9(fvec4) Load 20(C) + 31: 27 CompositeConstruct 30 25 + Store 29(c2) 31 + 113: 6(int) Load 112(i) + Store 110(i) 113 + 117: 12 Load 116(input) + Store 114(input) 117 + 121: 6(int) Load 110(i) + Store 120(param) 121 + 123: 12 Load 114(input) + Store 122(param) 123 + 124: 9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 120(param) 122(param) + Store 119(@entryPointOutput) 124 Return FunctionEnd 17(@PixelShaderFunction(i1;vf4[3];): 9(fvec4) Function None 14 15(i): 7(ptr) FunctionParameter 16(input): 13(ptr) FunctionParameter 18: Label - 29(b): 28(ptr) Variable Function - 30: 9(fvec4) Load 20(C) - 31: 9(fvec4) Load 20(C) - 32: 9(fvec4) Load 20(C) - 33: 9(fvec4) Load 20(C) - 34: 9(fvec4) Load 20(C) - 35: 9(fvec4) Load 20(C) + 35(b): 34(ptr) Variable Function + 48(tmp): 47(ptr) Variable Function 36: 9(fvec4) Load 20(C) 37: 9(fvec4) Load 20(C) 38: 9(fvec4) Load 20(C) 39: 9(fvec4) Load 20(C) - 40: 27 CompositeConstruct 30 31 32 33 34 35 36 37 38 39 - Store 29(b) 40 - 54: 53(ptr) AccessChain 50 51 52 - 55: 9(fvec4) Load 54 - 56: 6(int) Load 15(i) - 57: 53(ptr) AccessChain 50 51 56 - 58: 9(fvec4) Load 57 - 59: 9(fvec4) FAdd 55 58 - 62: 61(ptr) AccessChain 16(input) 60 - 63: 9(fvec4) Load 62 - 64: 9(fvec4) FAdd 59 63 - 65: 6(int) Load 15(i) - 66: 61(ptr) AccessChain 16(input) 65 + 40: 9(fvec4) Load 20(C) + 41: 9(fvec4) Load 20(C) + 42: 9(fvec4) Load 20(C) + 43: 9(fvec4) Load 20(C) + 44: 9(fvec4) Load 20(C) + 45: 9(fvec4) Load 20(C) + 46: 33 CompositeConstruct 36 37 38 39 40 41 42 43 44 45 + Store 35(b) 46 + 49: 9(fvec4) Load 20(C) + 66: 65(ptr) AccessChain 62 63 64 67: 9(fvec4) Load 66 - 68: 9(fvec4) FAdd 64 67 - 70: 61(ptr) AccessChain 29(b) 69 - 71: 9(fvec4) Load 70 - 72: 9(fvec4) FAdd 68 71 - 73: 6(int) Load 15(i) - 74: 61(ptr) AccessChain 29(b) 73 - 75: 9(fvec4) Load 74 - 76: 9(fvec4) FAdd 72 75 - 77: 6(int) Load 15(i) - 78: 6(int) Load 15(i) - 79: 53(ptr) AccessChain 50 52 77 51 78 - 80: 9(fvec4) Load 79 - 81: 9(fvec4) FAdd 76 80 - ReturnValue 81 + 68: 9(fvec4) FAdd 49 67 + 69: 9(fvec4) FAdd 68 25 + 71: 6(int) Load 15(i) + 72: 65(ptr) AccessChain 62 70 71 + 73: 9(fvec4) Load 72 + 74: 9(fvec4) FAdd 69 73 + 75: 6(int) Load 15(i) + 76: 19(ptr) AccessChain 29(c2) 75 + 77: 9(fvec4) Load 76 + 78: 9(fvec4) FAdd 74 77 + Store 48(tmp) 78 + 80: 65(ptr) AccessChain 62 64 79 + 81: 9(fvec4) Load 80 + 82: 6(int) Load 15(i) + 83: 65(ptr) AccessChain 62 64 82 + 84: 9(fvec4) Load 83 + 85: 9(fvec4) FAdd 81 84 + 86: 47(ptr) AccessChain 16(input) 63 + 87: 9(fvec4) Load 86 + 88: 9(fvec4) FAdd 85 87 + 89: 6(int) Load 15(i) + 90: 47(ptr) AccessChain 16(input) 89 + 91: 9(fvec4) Load 90 + 92: 9(fvec4) FAdd 88 91 + 94: 47(ptr) AccessChain 35(b) 93 + 95: 9(fvec4) Load 94 + 96: 9(fvec4) FAdd 92 95 + 97: 6(int) Load 15(i) + 98: 47(ptr) AccessChain 35(b) 97 + 99: 9(fvec4) Load 98 + 100: 9(fvec4) FAdd 96 99 + 101: 6(int) Load 15(i) + 102: 6(int) Load 15(i) + 103: 65(ptr) AccessChain 62 79 101 64 102 + 104: 9(fvec4) Load 103 + 105: 9(fvec4) FAdd 100 104 + 106: 9(fvec4) Load 48(tmp) + 107: 9(fvec4) FAdd 105 106 + ReturnValue 107 FunctionEnd diff --git a/Test/hlsl.array.frag b/Test/hlsl.array.frag index b5d931170..ff0004fd8 100644 --- a/Test/hlsl.array.frag +++ b/Test/hlsl.array.frag @@ -5,9 +5,14 @@ struct { } s[11]; static float4 C = float4(1,2,3,4); +float4 a1[1] = { float4(1,2,3,4) }; +float4 a2[2] = { float4(1,2,3,4), float4(5,2,3,4), }; +const float4 c1[1] = { float4(1,2,3,4) }; +static const float4 c2[2] = { C, float4(1,2,3,4), }; float4 PixelShaderFunction(int i : sem1, float4 input[3] : sem2) : SV_TARGET0 { float4 b[10] = { C, C, C, C, C, C, C, C, C, C }; - return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i]; + float4 tmp = C + a1[0] + c1[0] + a2[i] + c2[i]; + return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i] + tmp; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 32cc4bf88..8154e687a 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5474,7 +5474,7 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* bool singleArg; if (aggrNode) { - if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1) + if (aggrNode->getOp() != EOpNull) singleArg = true; else singleArg = false; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index ca01f4975..e6b98615f 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -7828,7 +7828,7 @@ TIntermTyped* HlslParseContext::addConstructor(const TSourceLoc& loc, TIntermTyp bool singleArg; if (aggrNode != nullptr) { - if (aggrNode->getOp() != EOpNull || aggrNode->getSequence().size() == 1) + if (aggrNode->getOp() != EOpNull) singleArg = true; else singleArg = false;