From 37d080c38a3cb6da4bcffd43e1a6f1eeec449040 Mon Sep 17 00:00:00 2001
From: John Kessenich <cepheus@frii.com>
Date: Fri, 22 Nov 2013 17:52:58 +0000
Subject: [PATCH] Add missing non-square matrixCompMult built-in functions.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24179 e7fa87d3-cd2b-0410-9028-fcbf551c1848
---
 Install/Windows/glslangValidator.exe      | Bin 411136 -> 411648 bytes
 Test/120.frag                             |  29 ++++++++
 Test/baseResults/100.frag.out             |  79 ++++++++++++++++------
 Test/baseResults/120.frag.out             |  72 +++++++++++++++++++-
 glslang/MachineIndependent/Initialize.cpp |   7 ++
 5 files changed, 164 insertions(+), 23 deletions(-)

diff --git a/Install/Windows/glslangValidator.exe b/Install/Windows/glslangValidator.exe
index 905b9decd8a43a0cb9091e3e4289ad600aee00c2..a3ca0d0a727cae116bbac7ed02310cb239766c9b 100644
GIT binary patch
delta 18332
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

delta 18212
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

diff --git a/Test/120.frag b/Test/120.frag
index ac70c20a6..f50826d06 100644
--- a/Test/120.frag
+++ b/Test/120.frag
@@ -123,3 +123,32 @@ void atest()
 
 varying vec4 gl_TexCoord[6];  // okay, assigning a size
 varying vec4 gl_TexCoord[5];  // ERROR, changing size
+
+mat2x2 m22;
+mat2x3 m23;
+mat2x4 m24;
+
+mat3x2 m32;
+mat3x3 m33;
+mat3x4 m34;
+
+mat4x2 m42;
+mat4x3 m43;
+mat4x4 m44;
+
+void foo123()
+{
+    mat2 r2 = matrixCompMult(m22, m22);
+    mat3 r3 = matrixCompMult(m33, m33);
+    mat4 r4 = matrixCompMult(m44, m44);
+
+    mat2x3 r23 = matrixCompMult(m23, m23);
+    mat2x4 r24 = matrixCompMult(m24, m24);
+    mat3x2 r32 = matrixCompMult(m32, m32);
+    mat3x4 r34 = matrixCompMult(m34, m34);
+    mat4x2 r42 = matrixCompMult(m42, m42);
+    mat4x3 r43 = matrixCompMult(m43, m43);
+
+    mat3x2 rfoo1 = matrixCompMult(m23, m32);  // ERROR
+    mat3x4 rfoo2 = matrixCompMult(m34, m44);  // ERROR    
+}
diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out
index fa7726186..d36e51d12 100644
--- a/Test/baseResults/100.frag.out
+++ b/Test/baseResults/100.frag.out
@@ -58,11 +58,12 @@ ERROR: 0:135: 'texture2DProjLod' : no matching overloaded function found
 ERROR: 0:137: 'bitwise not' : not supported for this version or the enabled extensions 
 ERROR: 0:138: 'bitwise inclusive or' : not supported for this version or the enabled extensions 
 ERROR: 0:139: 'bitwise and' : not supported for this version or the enabled extensions 
-ERROR: 0:144: 'a' : redefinition 
-ERROR: 0:149: 'floating-point suffix' : not supported for this version or the enabled extensions 
-ERROR: 0:150: 'floating-point suffix' : not supported for this version or the enabled extensions 
-ERROR: 0:152: '' :  syntax error
-ERROR: 56 compilation errors.  No code generated.
+ERROR: 0:145: 'a' : redefinition 
+ERROR: 0:147: 'texture2DProjGradEXT' : required extension not requested: GL_EXT_shader_texture_lod
+ERROR: 0:151: 'floating-point suffix' : not supported for this version or the enabled extensions 
+ERROR: 0:152: 'floating-point suffix' : not supported for this version or the enabled extensions 
+ERROR: 0:166: '' :  syntax error
+ERROR: 57 compilation errors.  No code generated.
 
 
 ERROR: node is still EOpNull!
@@ -243,23 +244,55 @@ ERROR: node is still EOpNull!
 0:139      bitwise and (mediump int)
 0:139        'a' (mediump int)
 0:139        'a' (mediump int)
-0:144  Function Definition: foo203940(i1;f1;f1; (mediump int)
-0:144    Function Parameters: 
-0:144      'a' (in mediump int)
-0:144      'b' (in mediump float)
-0:146    Sequence
-0:146      Branch: Return with expression
-0:146        'a' (in mediump int)
-0:149  Sequence
-0:149    move second child to first child (mediump float)
-0:149      'f123' (mediump float)
-0:149      Constant:
-0:149        4.000000
-0:150  Sequence
-0:150    move second child to first child (mediump float)
-0:150      'f124' (mediump float)
-0:150      Constant:
-0:150        50000000000.000000
+0:145  Function Definition: foo203940(i1;f1;f1; (mediump int)
+0:145    Function Parameters: 
+0:145      'a' (in mediump int)
+0:145      'b' (in mediump float)
+0:147    Sequence
+0:147      Function Call: texture2DProjGradEXT(s21;vf3;vf2;vf2; (lowp 4-component vector of float)
+0:147        's2Dg' (uniform lowp sampler2D)
+0:147        Construct vec3 (3-component vector of float)
+0:147          'f13' (invariant mediump float)
+0:147        'uv2' (invariant uniform mediump 2-component vector of float)
+0:147        'uv2' (invariant uniform mediump 2-component vector of float)
+0:148      Branch: Return with expression
+0:148        'a' (in mediump int)
+0:151  Sequence
+0:151    move second child to first child (mediump float)
+0:151      'f123' (mediump float)
+0:151      Constant:
+0:151        4.000000
+0:152  Sequence
+0:152    move second child to first child (mediump float)
+0:152      'f124' (mediump float)
+0:152      Constant:
+0:152        50000000000.000000
+0:158  Function Definition: foo323433( (void)
+0:158    Function Parameters: 
+0:160    Sequence
+0:160      Function Call: texture2DLodEXT(s21;vf2;f1; (lowp 4-component vector of float)
+0:160        's2Dg' (uniform lowp sampler2D)
+0:160        'uv2' (invariant uniform mediump 2-component vector of float)
+0:160        'f13' (invariant mediump float)
+0:161      Function Call: texture2DProjGradEXT(s21;vf3;vf2;vf2; (lowp 4-component vector of float)
+0:161        's2Dg' (uniform lowp sampler2D)
+0:161        Construct vec3 (3-component vector of float)
+0:161          'f13' (invariant mediump float)
+0:161        'uv2' (invariant uniform mediump 2-component vector of float)
+0:161        'uv2' (invariant uniform mediump 2-component vector of float)
+0:162      Function Call: texture2DGradEXT(s21;vf2;vf2;vf2; (lowp 4-component vector of float)
+0:162        's2Dg' (uniform lowp sampler2D)
+0:162        'uv2' (invariant uniform mediump 2-component vector of float)
+0:162        'uv2' (invariant uniform mediump 2-component vector of float)
+0:162        'uv2' (invariant uniform mediump 2-component vector of float)
+0:163      Function Call: textureCubeGradEXT(sC1;vf3;vf3;vf3; (lowp 4-component vector of float)
+0:163        'sCube' (uniform lowp samplerCube)
+0:163        Construct vec3 (3-component vector of float)
+0:163          'f13' (invariant mediump float)
+0:163        Construct vec3 (3-component vector of float)
+0:163          'f13' (invariant mediump float)
+0:163        Construct vec3 (3-component vector of float)
+0:163          'f13' (invariant mediump float)
 0:?   Linker Objects
 0:?     'a' (3-element array of mediump int)
 0:?     'uint' (mediump int)
@@ -279,8 +312,10 @@ ERROR: node is still EOpNull!
 0:?     'sExt' (uniform lowp samplerExternalOES)
 0:?     'mediumExt' (uniform mediump samplerExternalOES)
 0:?     'highExt' (uniform highp samplerExternalOES)
+0:?     's2Dg' (uniform lowp sampler2D)
 0:?     'f123' (mediump float)
 0:?     'f124' (mediump float)
+0:?     'sCube' (uniform lowp samplerCube)
 
 
 Linked fragment stage:
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index 10c703638..6d55029a3 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -30,7 +30,11 @@ ERROR: 0:97: 'out' : overloaded functions must have the same parameter qualifier
 ERROR: 0:99: 'return' : function return is not matching type: 
 ERROR: 0:115: 'return' : void function cannot return a value 
 ERROR: 0:125: 'gl_TexCoord' : redeclaration of array with size 
-ERROR: 31 compilation errors.  No code generated.
+ERROR: 0:152: 'matrixCompMult' : no matching overloaded function found 
+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: '=' :  cannot convert from 'const float' to '3X4 matrix of float'
+ERROR: 35 compilation errors.  No code generated.
 
 
 ERROR: node is still EOpNull!
@@ -304,6 +308,63 @@ ERROR: node is still EOpNull!
 0:121          'gl_TexCoord' (smooth in 6-element array of 4-component vector of float)
 0:121          Constant:
 0:121            3 (const int)
+0:139  Function Definition: foo123( (void)
+0:139    Function Parameters: 
+0:141    Sequence
+0:141      Sequence
+0:141        move second child to first child (2X2 matrix of float)
+0:141          'r2' (2X2 matrix of float)
+0:141          component-wise multiply (2X2 matrix of float)
+0:141            'm22' (2X2 matrix of float)
+0:141            'm22' (2X2 matrix of float)
+0:142      Sequence
+0:142        move second child to first child (3X3 matrix of float)
+0:142          'r3' (3X3 matrix of float)
+0:142          component-wise multiply (3X3 matrix of float)
+0:142            'm33' (3X3 matrix of float)
+0:142            'm33' (3X3 matrix of float)
+0:143      Sequence
+0:143        move second child to first child (4X4 matrix of float)
+0:143          'r4' (4X4 matrix of float)
+0:143          component-wise multiply (4X4 matrix of float)
+0:143            'm44' (4X4 matrix of float)
+0:143            'm44' (4X4 matrix of float)
+0:145      Sequence
+0:145        move second child to first child (2X3 matrix of float)
+0:145          'r23' (2X3 matrix of float)
+0:145          component-wise multiply (2X3 matrix of float)
+0:145            'm23' (2X3 matrix of float)
+0:145            'm23' (2X3 matrix of float)
+0:146      Sequence
+0:146        move second child to first child (2X4 matrix of float)
+0:146          'r24' (2X4 matrix of float)
+0:146          component-wise multiply (2X4 matrix of float)
+0:146            'm24' (2X4 matrix of float)
+0:146            'm24' (2X4 matrix of float)
+0:147      Sequence
+0:147        move second child to first child (3X2 matrix of float)
+0:147          'r32' (3X2 matrix of float)
+0:147          component-wise multiply (3X2 matrix of float)
+0:147            'm32' (3X2 matrix of float)
+0:147            'm32' (3X2 matrix of float)
+0:148      Sequence
+0:148        move second child to first child (3X4 matrix of float)
+0:148          'r34' (3X4 matrix of float)
+0:148          component-wise multiply (3X4 matrix of float)
+0:148            'm34' (3X4 matrix of float)
+0:148            'm34' (3X4 matrix of float)
+0:149      Sequence
+0:149        move second child to first child (4X2 matrix of float)
+0:149          'r42' (4X2 matrix of float)
+0:149          component-wise multiply (4X2 matrix of float)
+0:149            'm42' (4X2 matrix of float)
+0:149            'm42' (4X2 matrix of float)
+0:150      Sequence
+0:150        move second child to first child (4X3 matrix of float)
+0:150          'r43' (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:?   Linker Objects
 0:?     'lowp' (float)
 0:?     'mediump' (float)
@@ -318,6 +379,15 @@ ERROR: node is still EOpNull!
 0:?     'uimage2DRect' (float)
 0:?     'a' (int)
 0:?     'gl_TexCoord' (smooth in 6-element array of 4-component vector of float)
+0:?     'm22' (2X2 matrix of float)
+0:?     'm23' (2X3 matrix of float)
+0:?     'm24' (2X4 matrix of float)
+0:?     'm32' (3X2 matrix of float)
+0:?     'm33' (3X3 matrix of float)
+0:?     'm34' (3X4 matrix of float)
+0:?     'm42' (4X2 matrix of float)
+0:?     'm43' (4X3 matrix of float)
+0:?     'm44' (4X4 matrix of float)
 
 
 Linked fragment stage:
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index d31823970..d825e9f4a 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -527,6 +527,13 @@ void TBuiltIns::initialize(int version, EProfile profile)
             "mat4x2 transpose(mat2x4 m);"
             "mat3x4 transpose(mat4x3 m);"
             "mat4x3 transpose(mat3x4 m);"
+
+            "mat2x3 matrixCompMult(mat2x3, mat2x3);"
+            "mat2x4 matrixCompMult(mat2x4, mat2x4);"
+            "mat3x2 matrixCompMult(mat3x2, mat3x2);"
+            "mat3x4 matrixCompMult(mat3x4, mat3x4);"
+            "mat4x2 matrixCompMult(mat4x2, mat4x2);"
+            "mat4x3 matrixCompMult(mat4x3, mat4x3);"          
             
             "\n");
 
-- 
GitLab