Add missing matrix constructor test, and add a size() method for downstream consumers of constArrays.
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@26937 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
@@ -152,3 +152,22 @@ void foo123()
|
|||||||
mat3x2 rfoo1 = matrixCompMult(m23, m32); // ERROR
|
mat3x2 rfoo1 = matrixCompMult(m23, m32); // ERROR
|
||||||
mat3x4 rfoo2 = matrixCompMult(m34, m44); // ERROR
|
mat3x4 rfoo2 = matrixCompMult(m34, m44); // ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void matConst()
|
||||||
|
{
|
||||||
|
vec2 v2;
|
||||||
|
vec3 v3;
|
||||||
|
mat4 m4b1 = mat4(v2, v3); // ERROR, not enough
|
||||||
|
mat4 m4b2 = mat4(v2, v3, v3, v3, v3, v2, v2); // ERROR, too much
|
||||||
|
mat4 m4g = mat4(v2, v3, v3, v3, v3, v3);
|
||||||
|
mat4 m4 = mat4(v2, v3, v3, v3, v3, v2);
|
||||||
|
mat3 m3 = mat3(m4);
|
||||||
|
mat3 m3b1 = mat3(m4, v2); // ERROR, extra arg
|
||||||
|
mat3 m3b2 = mat3(m4, m4); // ERROR, extra arg
|
||||||
|
mat3x2 m32 = mat3x2(m4);
|
||||||
|
mat4 m4c = mat4(m32);
|
||||||
|
mat3 m3s = mat3(v2.x);
|
||||||
|
|
||||||
|
mat3 m3a1[2] = mat3[2](m3s, m3s);
|
||||||
|
mat3 m3a2[2] = mat3[2](m3s, m3s, m3s); // ERROR, too many args
|
||||||
|
}
|
||||||
|
|||||||
@@ -34,7 +34,15 @@ ERROR: 0:152: 'matrixCompMult' : no matching overloaded function found
|
|||||||
ERROR: 0:152: '=' : cannot convert from 'const float' to '3X2 matrix of float'
|
ERROR: 0:152: '=' : cannot convert from 'const float' to '3X2 matrix of float'
|
||||||
ERROR: 0:153: 'matrixCompMult' : no matching overloaded function found
|
ERROR: 0:153: 'matrixCompMult' : no matching overloaded function found
|
||||||
ERROR: 0:153: '=' : cannot convert from 'const float' to '3X4 matrix of float'
|
ERROR: 0:153: '=' : cannot convert from 'const float' to '3X4 matrix of float'
|
||||||
ERROR: 35 compilation errors. No code generated.
|
ERROR: 0:160: 'constructor' : not enough data provided for construction
|
||||||
|
ERROR: 0:160: '=' : cannot convert from 'const float' to '4X4 matrix of float'
|
||||||
|
ERROR: 0:161: 'constructor' : too many arguments
|
||||||
|
ERROR: 0:161: '=' : cannot convert from 'const float' to '4X4 matrix of float'
|
||||||
|
ERROR: 0:165: 'constructor' : matrix constructed from matrix can only have one argument
|
||||||
|
ERROR: 0:166: 'constructor' : matrix constructed from matrix can only have one argument
|
||||||
|
ERROR: 0:172: 'constructor' : array constructor needs one argument per array element
|
||||||
|
ERROR: 0:172: '=' : cannot convert from 'const float' to '2-element array of 3X3 matrix of float'
|
||||||
|
ERROR: 43 compilation errors. No code generated.
|
||||||
|
|
||||||
|
|
||||||
Shader version: 120
|
Shader version: 120
|
||||||
@@ -365,6 +373,70 @@ ERROR: node is still EOpNull!
|
|||||||
0:150 component-wise multiply (4X3 matrix of float)
|
0:150 component-wise multiply (4X3 matrix of float)
|
||||||
0:150 'm43' (4X3 matrix of float)
|
0:150 'm43' (4X3 matrix of float)
|
||||||
0:150 'm43' (4X3 matrix of float)
|
0:150 'm43' (4X3 matrix of float)
|
||||||
|
0:156 Function Definition: matConst( (void)
|
||||||
|
0:156 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:162 Sequence
|
||||||
|
0:162 move second child to first child (4X4 matrix of float)
|
||||||
|
0:162 'm4g' (4X4 matrix of float)
|
||||||
|
0:162 Construct mat4 (4X4 matrix of float)
|
||||||
|
0:162 'v2' (2-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:163 Sequence
|
||||||
|
0:163 move second child to first child (4X4 matrix of float)
|
||||||
|
0:163 'm4' (4X4 matrix of float)
|
||||||
|
0:163 Construct mat4 (4X4 matrix of float)
|
||||||
|
0:163 'v2' (2-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v2' (2-component vector of float)
|
||||||
|
0:164 Sequence
|
||||||
|
0:164 move second child to first child (3X3 matrix of float)
|
||||||
|
0:164 'm3' (3X3 matrix of float)
|
||||||
|
0:164 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:164 'm4' (4X4 matrix of float)
|
||||||
|
0:165 Sequence
|
||||||
|
0:165 move second child to first child (3X3 matrix of float)
|
||||||
|
0:165 'm3b1' (3X3 matrix of float)
|
||||||
|
0:165 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:165 'm4' (4X4 matrix of float)
|
||||||
|
0:165 'v2' (2-component vector of float)
|
||||||
|
0:166 Sequence
|
||||||
|
0:166 move second child to first child (3X3 matrix of float)
|
||||||
|
0:166 'm3b2' (3X3 matrix of float)
|
||||||
|
0:166 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:166 'm4' (4X4 matrix of float)
|
||||||
|
0:166 'm4' (4X4 matrix of float)
|
||||||
|
0:167 Sequence
|
||||||
|
0:167 move second child to first child (3X2 matrix of float)
|
||||||
|
0:167 'm32' (3X2 matrix of float)
|
||||||
|
0:167 Construct mat3x2 (3X2 matrix of float)
|
||||||
|
0:167 'm4' (4X4 matrix of float)
|
||||||
|
0:168 Sequence
|
||||||
|
0:168 move second child to first child (4X4 matrix of float)
|
||||||
|
0:168 'm4c' (4X4 matrix of float)
|
||||||
|
0:168 Construct mat4 (4X4 matrix of float)
|
||||||
|
0:168 'm32' (3X2 matrix of float)
|
||||||
|
0:169 Sequence
|
||||||
|
0:169 move second child to first child (3X3 matrix of float)
|
||||||
|
0:169 'm3s' (3X3 matrix of float)
|
||||||
|
0:169 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:169 direct index (float)
|
||||||
|
0:169 'v2' (2-component vector of float)
|
||||||
|
0:169 Constant:
|
||||||
|
0:169 0 (const int)
|
||||||
|
0:171 Sequence
|
||||||
|
0:171 move second child to first child (2-element array of 3X3 matrix of float)
|
||||||
|
0:171 'm3a1' (2-element array of 3X3 matrix of float)
|
||||||
|
0:171 Construct mat3 (2-element array of 3X3 matrix of float)
|
||||||
|
0:171 'm3s' (3X3 matrix of float)
|
||||||
|
0:171 'm3s' (3X3 matrix of float)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'lowp' (float)
|
0:? 'lowp' (float)
|
||||||
0:? 'mediump' (float)
|
0:? 'mediump' (float)
|
||||||
@@ -723,6 +795,70 @@ ERROR: node is still EOpNull!
|
|||||||
0:150 component-wise multiply (4X3 matrix of float)
|
0:150 component-wise multiply (4X3 matrix of float)
|
||||||
0:150 'm43' (4X3 matrix of float)
|
0:150 'm43' (4X3 matrix of float)
|
||||||
0:150 'm43' (4X3 matrix of float)
|
0:150 'm43' (4X3 matrix of float)
|
||||||
|
0:156 Function Definition: matConst( (void)
|
||||||
|
0:156 Function Parameters:
|
||||||
|
0:? Sequence
|
||||||
|
0:162 Sequence
|
||||||
|
0:162 move second child to first child (4X4 matrix of float)
|
||||||
|
0:162 'm4g' (4X4 matrix of float)
|
||||||
|
0:162 Construct mat4 (4X4 matrix of float)
|
||||||
|
0:162 'v2' (2-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:162 'v3' (3-component vector of float)
|
||||||
|
0:163 Sequence
|
||||||
|
0:163 move second child to first child (4X4 matrix of float)
|
||||||
|
0:163 'm4' (4X4 matrix of float)
|
||||||
|
0:163 Construct mat4 (4X4 matrix of float)
|
||||||
|
0:163 'v2' (2-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v3' (3-component vector of float)
|
||||||
|
0:163 'v2' (2-component vector of float)
|
||||||
|
0:164 Sequence
|
||||||
|
0:164 move second child to first child (3X3 matrix of float)
|
||||||
|
0:164 'm3' (3X3 matrix of float)
|
||||||
|
0:164 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:164 'm4' (4X4 matrix of float)
|
||||||
|
0:165 Sequence
|
||||||
|
0:165 move second child to first child (3X3 matrix of float)
|
||||||
|
0:165 'm3b1' (3X3 matrix of float)
|
||||||
|
0:165 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:165 'm4' (4X4 matrix of float)
|
||||||
|
0:165 'v2' (2-component vector of float)
|
||||||
|
0:166 Sequence
|
||||||
|
0:166 move second child to first child (3X3 matrix of float)
|
||||||
|
0:166 'm3b2' (3X3 matrix of float)
|
||||||
|
0:166 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:166 'm4' (4X4 matrix of float)
|
||||||
|
0:166 'm4' (4X4 matrix of float)
|
||||||
|
0:167 Sequence
|
||||||
|
0:167 move second child to first child (3X2 matrix of float)
|
||||||
|
0:167 'm32' (3X2 matrix of float)
|
||||||
|
0:167 Construct mat3x2 (3X2 matrix of float)
|
||||||
|
0:167 'm4' (4X4 matrix of float)
|
||||||
|
0:168 Sequence
|
||||||
|
0:168 move second child to first child (4X4 matrix of float)
|
||||||
|
0:168 'm4c' (4X4 matrix of float)
|
||||||
|
0:168 Construct mat4 (4X4 matrix of float)
|
||||||
|
0:168 'm32' (3X2 matrix of float)
|
||||||
|
0:169 Sequence
|
||||||
|
0:169 move second child to first child (3X3 matrix of float)
|
||||||
|
0:169 'm3s' (3X3 matrix of float)
|
||||||
|
0:169 Construct mat3 (3X3 matrix of float)
|
||||||
|
0:169 direct index (float)
|
||||||
|
0:169 'v2' (2-component vector of float)
|
||||||
|
0:169 Constant:
|
||||||
|
0:169 0 (const int)
|
||||||
|
0:171 Sequence
|
||||||
|
0:171 move second child to first child (2-element array of 3X3 matrix of float)
|
||||||
|
0:171 'm3a1' (2-element array of 3X3 matrix of float)
|
||||||
|
0:171 Construct mat3 (2-element array of 3X3 matrix of float)
|
||||||
|
0:171 'm3s' (3X3 matrix of float)
|
||||||
|
0:171 'm3s' (3X3 matrix of float)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'lowp' (float)
|
0:? 'lowp' (float)
|
||||||
0:? 'mediump' (float)
|
0:? 'mediump' (float)
|
||||||
|
|||||||
@@ -445,6 +445,7 @@ public:
|
|||||||
unionArray = new TConstUnionVector(size, val);
|
unionArray = new TConstUnionVector(size, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int size() const { return unionArray ? (int)unionArray->size() : 0; }
|
||||||
TConstUnion& operator[](size_t index) { return (*unionArray)[index]; }
|
TConstUnion& operator[](size_t index) { return (*unionArray)[index]; }
|
||||||
const TConstUnion& operator[](size_t index) const { return (*unionArray)[index]; }
|
const TConstUnion& operator[](size_t index) const { return (*unionArray)[index]; }
|
||||||
bool operator==(const TConstUnionArray& rhs) const
|
bool operator==(const TConstUnionArray& rhs) const
|
||||||
|
|||||||
@@ -1698,9 +1698,9 @@ bool TParseContext::builtInName(const TString& identifier)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Make sure there is enough data provided to the constructor to build
|
// Make sure there is enough data and not too many arguments provided to the
|
||||||
// something of the type of the constructor. Also returns the type of
|
// constructor to build something of the type of the constructor. Also returns
|
||||||
// the constructor.
|
// the type of the constructor.
|
||||||
//
|
//
|
||||||
// Returns true if there was an error in construction.
|
// Returns true if there was an error in construction.
|
||||||
//
|
//
|
||||||
@@ -1781,6 +1781,11 @@ bool TParseContext::constructorError(TSourceLoc loc, TIntermNode* node, TFunctio
|
|||||||
|
|
||||||
if (matrixInMatrix && ! type.isArray()) {
|
if (matrixInMatrix && ! type.isArray()) {
|
||||||
profileRequires(loc, ENoProfile, 120, 0, "constructing matrix from matrix");
|
profileRequires(loc, ENoProfile, 120, 0, "constructing matrix from matrix");
|
||||||
|
|
||||||
|
// "If a matrix argument is given to a matrix constructor,
|
||||||
|
// it is a compile-time error to have any other arguments."
|
||||||
|
if (function.getParamCount() > 1)
|
||||||
|
error(loc, "matrix constructed from matrix can only have one argument", "constructor", "");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user