Sorry, i missed much more places where GLSL compiler check and define
functions ... patch in this mail still not correct, may be just duplicating
entries in slang/library/*.gc was not good idea at all .....
currently array demo dies with
Error: problem compiling shader: Error: undeclared type name 'mat2x2'
Probably, i'll never come up with anything working, but at least learn++
Thanks for spending your time reading this, have nice day.
diff --git a/src/glsl/cl/sl_cl_parse.c b/src/glsl/cl/sl_cl_parse.c
index 09456f5..8bd448b 100644
--- a/src/glsl/cl/sl_cl_parse.c
+++ b/src/glsl/cl/sl_cl_parse.c
@@ -154,18 +154,21 @@
#define TYPE_SPECIFIER_TYPENAME 25
/* OpenGL 2.1 */
-#define TYPE_SPECIFIER_MAT23 26
-#define TYPE_SPECIFIER_MAT32 27
-#define TYPE_SPECIFIER_MAT24 28
-#define TYPE_SPECIFIER_MAT42 29
-#define TYPE_SPECIFIER_MAT34 30
-#define TYPE_SPECIFIER_MAT43 31
+#define TYPE_SPECIFIER_MAT22 26
+#define TYPE_SPECIFIER_MAT23 27
+#define TYPE_SPECIFIER_MAT32 28
+#define TYPE_SPECIFIER_MAT33 29
+#define TYPE_SPECIFIER_MAT24 30
+#define TYPE_SPECIFIER_MAT42 31
+#define TYPE_SPECIFIER_MAT34 32
+#define TYPE_SPECIFIER_MAT43 33
+#define TYPE_SPECIFIER_MAT44 34
/* GL_EXT_texture_array */
-#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY 32
-#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY 33
-#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW 34
-#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW 35
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY 35
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY 36
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW 37
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW 38
/* type specifier array */
#define TYPE_SPECIFIER_NONARRAY 0
@@ -274,12 +277,15 @@ struct parse_dict {
int mat2;
int mat3;
int mat4;
+ int mat2x2;
int mat2x3;
int mat3x2;
int mat2x4;
int mat4x2;
+ int mat3x3;
int mat3x4;
int mat4x3;
+ int mat4x4;
int sampler1D;
int sampler2D;
int sampler3D;
@@ -1012,10 +1018,14 @@ _parse_type_specifier_nonarray(struct parse_context *ctx,
_update(ctx, e, TYPE_SPECIFIER_MAT3);
} else if (id == ctx->dict.mat4) {
_update(ctx, e, TYPE_SPECIFIER_MAT4);
+ } else if (id == ctx->dict.mat2x2) {
+ _update(ctx, e, TYPE_SPECIFIER_MAT22);
} else if (id == ctx->dict.mat2x3) {
_update(ctx, e, TYPE_SPECIFIER_MAT23);
} else if (id == ctx->dict.mat3x2) {
_update(ctx, e, TYPE_SPECIFIER_MAT32);
+ } else if (id == ctx->dict.mat3x3) {
+ _update(ctx, e, TYPE_SPECIFIER_MAT33);
} else if (id == ctx->dict.mat2x4) {
_update(ctx, e, TYPE_SPECIFIER_MAT24);
} else if (id == ctx->dict.mat4x2) {
@@ -1024,6 +1034,8 @@ _parse_type_specifier_nonarray(struct parse_context *ctx,
_update(ctx, e, TYPE_SPECIFIER_MAT34);
} else if (id == ctx->dict.mat4x3) {
_update(ctx, e, TYPE_SPECIFIER_MAT43);
+ } else if (id == ctx->dict.mat4x4) {
+ _update(ctx, e, TYPE_SPECIFIER_MAT44);
} else if (id == ctx->dict.sampler1D) {
_update(ctx, e, TYPE_SPECIFIER_SAMPLER1D);
} else if (id == ctx->dict.sampler2D) {
@@ -2922,12 +2934,15 @@ sl_cl_compile(struct sl_pp_context *context,
ADD_NAME(ctx, mat2);
ADD_NAME(ctx, mat3);
ADD_NAME(ctx, mat4);
+ ADD_NAME(ctx, mat2x2);
ADD_NAME(ctx, mat2x3);
ADD_NAME(ctx, mat3x2);
+ ADD_NAME(ctx, mat3x3);
ADD_NAME(ctx, mat2x4);
ADD_NAME(ctx, mat4x2);
ADD_NAME(ctx, mat3x4);
ADD_NAME(ctx, mat4x3);
+ ADD_NAME(ctx, mat4x4);
ADD_NAME(ctx, sampler1D);
ADD_NAME(ctx, sampler2D);
ADD_NAME(ctx, sampler3D);
diff --git a/src/mesa/slang/library/slang_120_core.gc b/src/mesa/slang/library/slang_120_core.gc
index 04c5ec2..7ea0e98 100644
--- a/src/mesa/slang/library/slang_120_core.gc
+++ b/src/mesa/slang/library/slang_120_core.gc
@@ -37,6 +37,7 @@
// From Shader Spec, ver. 1.20, rev. 6
//
+
//// mat2x3: 2 columns of vec3
mat2x3 __constructor(const float f00, const float f10, const float f20,
@@ -312,47 +313,91 @@ mat2 __constructor(const mat2 m)
__retVal = m;
}
+mat2x2 __constructor(const mat2 m)
+{
+ __retVal = m;
+}
+
+
mat2 __constructor(const mat3x2 m)
{
__retVal = mat2(m[0], m[1]);
}
+mat2x2 __constructor(const mat3x2 m)
+{
+ __retVal = mat2(m[0], m[1]);
+}
+
mat2 __constructor(const mat4x2 m)
{
__retVal = mat2(m[0], m[1]);
}
+mat2x2 __constructor(const mat4x2 m)
+{
+ __retVal = mat2(m[0], m[1]);
+}
+
mat2 __constructor(const mat2x3 m)
{
__retVal = mat2(m[0].xy, m[1].xy);
}
+mat2x2 __constructor(const mat2x3 m)
+{
+ __retVal = mat2(m[0].xy, m[1].xy);
+}
+
mat2 __constructor(const mat2x4 m)
{
__retVal = mat2(m[0].xy, m[1].xy);
}
+mat2x2 __constructor(const mat2x4 m)
+{
+ __retVal = mat2(m[0].xy, m[1].xy);
+}
+
mat2 __constructor(const mat3 m)
{
__retVal = mat2(m[0].xy, m[1].xy);
}
+mat2x2 __constructor(const mat3 m)
+{
+ __retVal = mat2(m[0].xy, m[1].xy);
+}
+
mat2 __constructor(const mat3x4 m)
{
__retVal = mat2(m[0].xy, m[1].xy);
}
+mat2x2 __constructor(const mat3x4 m)
+{
+ __retVal = mat2(m[0].xy, m[1].xy);
+}
+
mat2 __constructor(const mat4x3 m)
{
__retVal = mat2(m[0].xy, m[1].xy);
}
+mat2x2 __constructor(const mat4x3 m)
+{
+ __retVal = mat2(m[0].xy, m[1].xy);
+}
+
mat2 __constructor(const mat4 m)
{
__retVal = mat2(m[0].xy, m[1].xy);
}
-
+mat2x2 __constructor(const mat4 m)
+{
+ __retVal = mat2(m[0].xy, m[1].xy);
+}
mat2x3 __constructor(const mat2x3 m)
{
@@ -520,6 +565,11 @@ mat3 __constructor(const mat3 m)
__retVal = m;
}
+mat3x3 __constructor(const mat3 m)
+{
+ __retVal = m;
+}
+
mat3 __constructor(const mat4x3 m)
{
__retVal = mat3 (
@@ -529,6 +579,15 @@ mat3 __constructor(const mat4x3 m)
);
}
+mat3x3 __constructor(const mat4x3 m)
+{
+ __retVal = mat3 (
+ m[0],
+ m[1],
+ m[2]
+ );
+}
+
mat3 __constructor(const mat3x4 m)
{
__retVal = mat3 (
@@ -538,6 +597,15 @@ mat3 __constructor(const mat3x4 m)
);
}
+mat3x3 __constructor(const mat3x4 m)
+{
+ __retVal = mat3 (
+ m[0].xyz,
+ m[1].xyz,
+ m[2].xyz
+ );
+}
+
mat3 __constructor(const mat4 m)
{
__retVal = mat3 (
@@ -547,6 +615,15 @@ mat3 __constructor(const mat4 m)
);
}
+mat3x3 __constructor(const mat4 m)
+{
+ __retVal = mat3 (
+ m[0].xyz,
+ m[1].xyz,
+ m[2].xyz
+ );
+}
+
mat3 __constructor(const mat2x3 m)
{
__retVal = mat3 (
@@ -556,6 +633,15 @@ mat3 __constructor(const mat2x3 m)
);
}
+mat3x3 __constructor(const mat2x3 m)
+{
+ __retVal = mat3 (
+ m[0],
+ m[1],
+ 0., 0., 1.
+ );
+}
+
mat3 __constructor(const mat2x4 m)
{
__retVal = mat3 (
@@ -565,6 +651,15 @@ mat3 __constructor(const mat2x4 m)
);
}
+mat3x3 __constructor(const mat2x4 m)
+{
+ __retVal = mat3 (
+ m[0].xyz,
+ m[1].xyz,
+ 0., 0., 1.
+ );
+}
+
mat3 __constructor(const mat3x2 m)
{
__retVal = mat3 (
@@ -574,6 +669,15 @@ mat3 __constructor(const mat3x2 m)
);
}
+mat3x3 __constructor(const mat3x2 m)
+{
+ __retVal = mat3 (
+ m[0], 0.,
+ m[1], 0.,
+ m[2], 1.
+ );
+}
+
mat3 __constructor(const mat4x2 m)
{
__retVal = mat3 (
@@ -583,6 +687,15 @@ mat3 __constructor(const mat4x2 m)
);
}
+mat3x3 __constructor(const mat4x2 m)
+{
+ __retVal = mat3 (
+ m[0], 0.,
+ m[1], 0.,
+ m[2], 1.
+ );
+}
+
mat3 __constructor(const mat2 m)
{
__retVal = mat3 (
@@ -592,6 +705,14 @@ mat3 __constructor(const mat2 m)
);
}
+mat3x3 __constructor(const mat2 m)
+{
+ __retVal = mat3 (
+ m[0], 0.,
+ m[1], 0.,
+ 0., 0., 1.
+ );
+}
mat3x4 __constructor(const mat3x4 m)
{
@@ -847,6 +968,11 @@ mat4 __constructor(const mat4 m)
__retVal = m;
}
+mat4x4 __constructor(const mat4 m)
+{
+ __retVal = m;
+}
+
mat4 __constructor(const mat3x4 m)
{
__retVal = mat4 (
@@ -857,6 +983,16 @@ mat4 __constructor(const mat3x4 m)
);
}
+mat4x4 __constructor(const mat3x4 m)
+{
+ __retVal = mat4 (
+ m[0],
+ m[1],
+ m[2],
+ 0., 0., 0., 1.
+ );
+}
+
mat4 __constructor(const mat4x3 m)
{
__retVal = mat4 (
@@ -867,6 +1003,16 @@ mat4 __constructor(const mat4x3 m)
);
}
+mat4x4 __constructor(const mat4x3 m)
+{
+ __retVal = mat4 (
+ m[0], 0.,
+ m[1], 0.,
+ m[2], 0.,
+ m[3], 1.
+ );
+}
+
mat4 __constructor(const mat2x4 m)
{
__retVal = mat4 (
@@ -877,6 +1023,16 @@ mat4 __constructor(const mat2x4 m)
);
}
+mat4x4 __constructor(const mat2x4 m)
+{
+ __retVal = mat4 (
+ m[0],
+ m[1],
+ 0., 0., 1., 0.,
+ 0., 0., 0., 1.
+ );
+}
+
mat4 __constructor(const mat4x2 m)
{
__retVal = mat4 (
@@ -887,6 +1043,16 @@ mat4 __constructor(const mat4x2 m)
);
}
+mat4x4 __constructor(const mat4x2 m)
+{
+ __retVal = mat4 (
+ m[0], 0., 0.,
+ m[1], 0., 0.,
+ m[2], 1., 0.,
+ m[3], 0., 1.
+ );
+}
+
mat4 __constructor(const mat3 m)
{
__retVal = mat4 (
@@ -897,6 +1063,16 @@ mat4 __constructor(const mat3 m)
);
}
+mat4x4 __constructor(const mat3 m)
+{
+ __retVal = mat4 (
+ m[0], 0.,
+ m[1], 0.,
+ m[2], 0.,
+ 0., 0., 0., 1.
+ );
+}
+
mat4 __constructor(const mat2x3 m)
{
__retVal = mat4 (
@@ -907,6 +1083,16 @@ mat4 __constructor(const mat2x3 m)
);
}
+mat4x4 __constructor(const mat2x3 m)
+{
+ __retVal = mat4 (
+ m[0], 0.,
+ m[1], 0.,
+ 0., 0., 1., 0.,
+ 0., 0., 0., 1.
+ );
+}
+
mat4 __constructor(const mat3x2 m)
{
__retVal = mat4 (
@@ -917,6 +1103,16 @@ mat4 __constructor(const mat3x2 m)
);
}
+mat4x4 __constructor(const mat3x2 m)
+{
+ __retVal = mat4 (
+ m[0], 0., 0.,
+ m[1], 0., 0.,
+ m[2], 1., 0.,
+ 0., 0., 0., 1.
+ );
+}
+
mat4 __constructor(const mat2 m)
{
__retVal = mat4 (
@@ -927,6 +1123,15 @@ mat4 __constructor(const mat2 m)
);
}
+mat4x4 __constructor(const mat2 m)
+{
+ __retVal = mat4 (
+ m[0], 0., 0.,
+ m[1], 0., 0.,
+ 0., 0., 1., 0.,
+ 0., 0., 0., 1.
+ );
+}
void __operator += (inout mat2x3 m, const mat2x3 n) {
m[0] += n[0];
diff --git a/src/mesa/slang/library/slang_builtin_120_common.gc b/src/mesa/slang/library/slang_builtin_120_common.gc
index c6264c3..ad5614a 100644
--- a/src/mesa/slang/library/slang_builtin_120_common.gc
+++ b/src/mesa/slang/library/slang_builtin_120_common.gc
@@ -133,6 +133,13 @@ mat2 transpose (mat2 m) {
);
}
+mat2x2 transpose (mat2 m) {
+ return mat2 (
+ m[0].x, m[1].x,
+ m[0].y, m[1].y
+ );
+}
+
mat3 transpose (mat3 m) {
return mat3 (
m[0].x, m[1].x, m[2].x,
@@ -141,6 +148,14 @@ mat3 transpose (mat3 m) {
);
}
+mat3x3 transpose (mat3 m) {
+ return mat3 (
+ m[0].x, m[1].x, m[2].x,
+ m[0].y, m[1].y, m[2].y,
+ m[0].z, m[1].z, m[2].z
+ );
+}
+
mat4 transpose (mat4 m) {
return mat4 (
m[0].x, m[1].x, m[2].x, m[3].x,
@@ -150,6 +165,14 @@ mat4 transpose (mat4 m) {
);
}
+mat4x4 transpose (mat4 m) {
+ return mat4 (
+ m[0].x, m[1].x, m[2].x, m[3].x,
+ m[0].y, m[1].y, m[2].y, m[3].y,
+ m[0].z, m[1].z, m[2].z, m[3].z,
+ m[0].w, m[1].w, m[2].w, m[3].w
+ );
+}
mat2x3 transpose (mat3x2 m) {
return mat2x3 (
m[0].x, m[1].x, m[2].x,
diff --git a/src/mesa/slang/library/slang_core.gc b/src/mesa/slang/library/slang_core.gc
index 0a0d159..d74f724 100644
--- a/src/mesa/slang/library/slang_core.gc
+++ b/src/mesa/slang/library/slang_core.gc
@@ -496,6 +496,15 @@ mat2 __constructor(const float m00, const float m10,
__retVal[1].y = m11;
}
+mat2x2 __constructor(const float m00, const float m10,
+ const float m01, const float m11)
+{
+ __retVal[0].x = m00;
+ __retVal[0].y = m10;
+ __retVal[1].x = m01;
+ __retVal[1].y = m11;
+}
+
mat2 __constructor(const float f)
{
__retVal[0].x = f;
@@ -504,22 +513,45 @@ mat2 __constructor(const float f)
__retVal[1].y = f;
}
+mat2x2 __constructor(const float f)
+{
+ __retVal[0].x = f;
+ __retVal[0].y = 0.0;
+ __retVal[1].x = 0.0;
+ __retVal[1].y = f;
+}
+
mat2 __constructor(const int i)
{
return mat2(float(i));
}
+mat2x2 __constructor(const int i)
+{
+ return mat2(float(i));
+}
+
mat2 __constructor(const bool b)
{
return mat2(float(b));
}
+mat2x2 __constructor(const bool b)
+{
+ return mat2(float(b));
+}
+
mat2 __constructor(const vec2 c0, const vec2 c1)
{
__retVal[0] = c0;
__retVal[1] = c1;
}
+mat2x2 __constructor(const vec2 c0, const vec2 c1)
+{
+ __retVal[0] = c0;
+ __retVal[1] = c1;
+}
//// mat3 constructors
@@ -538,6 +570,21 @@ mat3 __constructor(const float m00, const float m10, const float m20,
__retVal[2].z = m22;
}
+mat3x3 __constructor(const float m00, const float m10, const float m20,
+ const float m01, const float m11, const float m21,
+ const float m02, const float m12, const float m22)
+{
+ __retVal[0].x = m00;
+ __retVal[0].y = m10;
+ __retVal[0].z = m20;
+ __retVal[1].x = m01;
+ __retVal[1].y = m11;
+ __retVal[1].z = m21;
+ __retVal[2].x = m02;
+ __retVal[2].y = m12;
+ __retVal[2].z = m22;
+}
+
mat3 __constructor(const float f)
{
vec2 v = vec2(f, 0.0);
@@ -546,16 +593,34 @@ mat3 __constructor(const float f)
__retVal[2] = v.yyx;
}
+mat3x3 __constructor(const float f)
+{
+ vec2 v = vec2(f, 0.0);
+ __retVal[0] = v.xyy;
+ __retVal[1] = v.yxy;
+ __retVal[2] = v.yyx;
+}
+
mat3 __constructor(const int i)
{
return mat3(float(i));
}
+mat3x3 __constructor(const int i)
+{
+ return mat3(float(i));
+}
+
mat3 __constructor(const bool b)
{
return mat3(float(b));
}
+mat3x3 __constructor(const bool b)
+{
+ return mat3(float(b));
+}
+
mat3 __constructor(const vec3 c0, const vec3 c1, const vec3 c2)
{
__retVal[0] = c0;
@@ -563,6 +628,12 @@ mat3 __constructor(const vec3 c0, const vec3 c1, const vec3 c2)
__retVal[2] = c2;
}
+mat3x3 __constructor(const vec3 c0, const vec3 c1, const vec3 c2)
+{
+ __retVal[0] = c0;
+ __retVal[1] = c1;
+ __retVal[2] = c2;
+}
//// mat4 constructors
@@ -589,6 +660,28 @@ mat4 __constructor(const float m00, const float m10, const float m20, const floa
__retVal[3].w = m33;
}
+mat4x4 __constructor(const float m00, const float m10, const float m20, const float m30,
+ const float m01, const float m11, const float m21, const float m31,
+ const float m02, const float m12, const float m22, const float m32,
+ const float m03, const float m13, const float m23, const float m33)
+{
+ __retVal[0].x = m00;
+ __retVal[0].y = m10;
+ __retVal[0].z = m20;
+ __retVal[0].w = m30;
+ __retVal[1].x = m01;
+ __retVal[1].y = m11;
+ __retVal[1].z = m21;
+ __retVal[1].w = m31;
+ __retVal[2].x = m02;
+ __retVal[2].y = m12;
+ __retVal[2].z = m22;
+ __retVal[2].w = m32;
+ __retVal[3].x = m03;
+ __retVal[3].y = m13;
+ __retVal[3].z = m23;
+ __retVal[3].w = m33;
+}
mat4 __constructor(const float f)
{
@@ -599,16 +692,35 @@ mat4 __constructor(const float f)
__retVal[3] = v.yyyx;
}
+mat4x4 __constructor(const float f)
+{
+ vec2 v = vec2(f, 0.0);
+ __retVal[0] = v.xyyy;
+ __retVal[1] = v.yxyy;
+ __retVal[2] = v.yyxy;
+ __retVal[3] = v.yyyx;
+}
+
mat4 __constructor(const int i)
{
return mat4(float(i));
}
+mat4x4 __constructor(const int i)
+{
+ return mat4(float(i));
+}
+
mat4 __constructor(const bool b)
{
return mat4(float(b));
}
+mat4x4 __constructor(const bool b)
+{
+ return mat4(float(b));
+}
+
mat4 __constructor(const vec4 c0, const vec4 c1, const vec4 c2, const vec4 c3)
{
__retVal[0] = c0;
@@ -617,6 +729,13 @@ mat4 __constructor(const vec4 c0, const vec4 c1, const vec4 c2, const vec4 c3)
__retVal[3] = c3;
}
+mat4x4 __constructor(const vec4 c0, const vec4 c1, const vec4 c2, const vec4 c3)
+{
+ __retVal[0] = c0;
+ __retVal[1] = c1;
+ __retVal[2] = c2;
+ __retVal[3] = c3;
+}
//// Basic int operators
diff --git a/src/mesa/slang/slang_codegen.c b/src/mesa/slang/slang_codegen.c
index 95787e4..b2f70af 100644
--- a/src/mesa/slang/slang_codegen.c
+++ b/src/mesa/slang/slang_codegen.c
@@ -200,12 +200,15 @@ _slang_sizeof_type_specifier(const slang_type_specifier *spec)
sz = 4;
break;
case SLANG_SPEC_MAT2:
+ case SLANG_SPEC_MAT22:
sz = 2 * 4; /* 2 columns (regs) */
break;
case SLANG_SPEC_MAT3:
+ case SLANG_SPEC_MAT33:
sz = 3 * 4;
break;
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT44:
sz = 4 * 4;
break;
case SLANG_SPEC_MAT23:
@@ -2342,7 +2345,7 @@ _slang_is_vec_mat_type(const char *name)
"ivec2", "ivec3", "ivec4",
"bvec2", "bvec3", "bvec4",
"mat2", "mat3", "mat4",
- "mat2x3", "mat2x4", "mat3x2", "mat3x4", "mat4x2", "mat4x3",
+ "mat2x2", "mat2x3", "mat2x4", "mat3x2", "mat3x3", "mat3x4", "mat4x2", "mat4x3", "mat4x4",
NULL
};
int i;
diff --git a/src/mesa/slang/slang_compile.c b/src/mesa/slang/slang_compile.c
index 12ab466..ebb52b8 100644
--- a/src/mesa/slang/slang_compile.c
+++ b/src/mesa/slang/slang_compile.c
@@ -736,17 +736,20 @@ parse_type_qualifier(slang_parse_ctx * C, slang_type_qualifier * qual)
#define TYPE_SPECIFIER_SAMPLER2DRECTSHADOW 23
#define TYPE_SPECIFIER_STRUCT 24
#define TYPE_SPECIFIER_TYPENAME 25
-#define TYPE_SPECIFIER_MAT23 26
-#define TYPE_SPECIFIER_MAT32 27
-#define TYPE_SPECIFIER_MAT24 28
-#define TYPE_SPECIFIER_MAT42 29
-#define TYPE_SPECIFIER_MAT34 30
-#define TYPE_SPECIFIER_MAT43 31
-#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY 32
-#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY 33
-#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW 34
-#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW 35
-#define TYPE_SPECIFIER_COUNT 36
+#define TYPE_SPECIFIER_MAT22 26
+#define TYPE_SPECIFIER_MAT23 27
+#define TYPE_SPECIFIER_MAT32 28
+#define TYPE_SPECIFIER_MAT33 29
+#define TYPE_SPECIFIER_MAT24 30
+#define TYPE_SPECIFIER_MAT42 31
+#define TYPE_SPECIFIER_MAT34 32
+#define TYPE_SPECIFIER_MAT43 33
+#define TYPE_SPECIFIER_MAT44 34
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY 35
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY 36
+#define TYPE_SPECIFIER_SAMPLER_1D_ARRAY_SHADOW 37
+#define TYPE_SPECIFIER_SAMPLER_2D_ARRAY_SHADOW 38
+#define TYPE_SPECIFIER_COUNT 39
static int
parse_type_specifier(slang_parse_ctx * C, slang_output_ctx * O,
@@ -802,12 +805,18 @@ parse_type_specifier(slang_parse_ctx * C, slang_output_ctx * O,
case TYPE_SPECIFIER_MAT4:
spec->type = SLANG_SPEC_MAT4;
break;
+ case TYPE_SPECIFIER_MAT22:
+ spec->type = SLANG_SPEC_MAT22;
+ break;
case TYPE_SPECIFIER_MAT23:
spec->type = SLANG_SPEC_MAT23;
break;
case TYPE_SPECIFIER_MAT32:
spec->type = SLANG_SPEC_MAT32;
break;
+ case TYPE_SPECIFIER_MAT33:
+ spec->type = SLANG_SPEC_MAT33;
+ break;
case TYPE_SPECIFIER_MAT24:
spec->type = SLANG_SPEC_MAT24;
break;
@@ -820,6 +829,9 @@ parse_type_specifier(slang_parse_ctx * C, slang_output_ctx * O,
case TYPE_SPECIFIER_MAT43:
spec->type = SLANG_SPEC_MAT43;
break;
+ case TYPE_SPECIFIER_MAT44:
+ spec->type = SLANG_SPEC_MAT44;
+ break;
case TYPE_SPECIFIER_SAMPLER1D:
spec->type = SLANG_SPEC_SAMPLER_1D;
break;
diff --git a/src/mesa/slang/slang_print.c b/src/mesa/slang/slang_print.c
index 6b34f39..a29fab1 100644
--- a/src/mesa/slang/slang_print.c
+++ b/src/mesa/slang/slang_print.c
@@ -101,12 +101,18 @@ print_type(const slang_fully_specified_type *t)
case SLANG_SPEC_MAT4:
printf("mat4");
break;
+ case SLANG_SPEC_MAT22:
+ printf("mat2x2");
+ break;
case SLANG_SPEC_MAT23:
printf("mat2x3");
break;
case SLANG_SPEC_MAT32:
printf("mat3x2");
break;
+ case SLANG_SPEC_MAT33:
+ printf("mat3x3");
+ break;
case SLANG_SPEC_MAT24:
printf("mat2x4");
break;
@@ -119,6 +125,9 @@ print_type(const slang_fully_specified_type *t)
case SLANG_SPEC_MAT43:
printf("mat4x3");
break;
+ case SLANG_SPEC_MAT44:
+ printf("mat4x4");
+ break;
case SLANG_SPEC_SAMPLER_1D:
printf("sampler1D");
break;
@@ -778,10 +787,13 @@ slang_type_string(slang_type_specifier_type t)
case SLANG_SPEC_VEC4:
return "vec4";
case SLANG_SPEC_MAT2:
+ case SLANG_SPEC_MAT22:
return "mat2";
case SLANG_SPEC_MAT3:
+ case SLANG_SPEC_MAT33:
return "mat3";
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT44:
return "mat4";
case SLANG_SPEC_SAMPLER_1D:
return "sampler1D";
diff --git a/src/mesa/slang/slang_storage.c b/src/mesa/slang/slang_storage.c
index 656e156..5db0d6f 100644
--- a/src/mesa/slang/slang_storage.c
+++ b/src/mesa/slang/slang_storage.c
@@ -180,10 +180,13 @@ _slang_aggregate_variable(slang_storage_aggregate * agg,
case SLANG_SPEC_VEC4:
return aggregate_vector(agg, SLANG_STORE_FLOAT, 4);
case SLANG_SPEC_MAT2:
+ case SLANG_SPEC_MAT22:
return aggregate_matrix(agg, SLANG_STORE_FLOAT, 2, 2);
case SLANG_SPEC_MAT3:
+ case SLANG_SPEC_MAT33:
return aggregate_matrix(agg, SLANG_STORE_FLOAT, 3, 3);
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT44:
return aggregate_matrix(agg, SLANG_STORE_FLOAT, 4, 4);
case SLANG_SPEC_MAT23:
diff --git a/src/mesa/slang/slang_typeinfo.c b/src/mesa/slang/slang_typeinfo.c
index d039a12..eccd29f 100644
--- a/src/mesa/slang/slang_typeinfo.c
+++ b/src/mesa/slang/slang_typeinfo.c
@@ -187,8 +187,11 @@ static const type_specifier_type_name type_specifier_type_names[] = {
{"vec3", SLANG_SPEC_VEC3},
{"vec4", SLANG_SPEC_VEC4},
{"mat2", SLANG_SPEC_MAT2},
+ {"mat2x2", SLANG_SPEC_MAT22},
{"mat3", SLANG_SPEC_MAT3},
+ {"mat3x3", SLANG_SPEC_MAT33},
{"mat4", SLANG_SPEC_MAT4},
+ {"mat4x4", SLANG_SPEC_MAT44},
{"mat2x3", SLANG_SPEC_MAT23},
{"mat3x2", SLANG_SPEC_MAT32},
{"mat2x4", SLANG_SPEC_MAT24},
@@ -934,12 +937,15 @@ _slang_type_is_matrix(slang_type_specifier_type ty)
case SLANG_SPEC_MAT2:
case SLANG_SPEC_MAT3:
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT22:
case SLANG_SPEC_MAT23:
case SLANG_SPEC_MAT32:
+ case SLANG_SPEC_MAT33:
case SLANG_SPEC_MAT24:
case SLANG_SPEC_MAT42:
case SLANG_SPEC_MAT34:
case SLANG_SPEC_MAT43:
+ case SLANG_SPEC_MAT44:
return GL_TRUE;
default:
return GL_FALSE;
@@ -986,12 +992,15 @@ _slang_type_is_float_vec_mat(slang_type_specifier_type ty)
case SLANG_SPEC_MAT2:
case SLANG_SPEC_MAT3:
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT22:
case SLANG_SPEC_MAT23:
case SLANG_SPEC_MAT32:
+ case SLANG_SPEC_MAT33:
case SLANG_SPEC_MAT24:
case SLANG_SPEC_MAT42:
case SLANG_SPEC_MAT34:
case SLANG_SPEC_MAT43:
+ case SLANG_SPEC_MAT44:
return GL_TRUE;
default:
return GL_FALSE;
@@ -1023,10 +1032,13 @@ _slang_type_base(slang_type_specifier_type ty)
case SLANG_SPEC_BVEC4:
return SLANG_SPEC_BOOL;
case SLANG_SPEC_MAT2:
+ case SLANG_SPEC_MAT22:
return SLANG_SPEC_VEC2;
case SLANG_SPEC_MAT3:
+ case SLANG_SPEC_MAT33:
return SLANG_SPEC_VEC3;
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT44:
return SLANG_SPEC_VEC4;
case SLANG_SPEC_MAT23:
return SLANG_SPEC_VEC3;
@@ -1062,16 +1074,19 @@ _slang_type_dim(slang_type_specifier_type ty)
case SLANG_SPEC_IVEC2:
case SLANG_SPEC_BVEC2:
case SLANG_SPEC_MAT2:
+ case SLANG_SPEC_MAT22:
return 2;
case SLANG_SPEC_VEC3:
case SLANG_SPEC_IVEC3:
case SLANG_SPEC_BVEC3:
case SLANG_SPEC_MAT3:
+ case SLANG_SPEC_MAT33:
return 3;
case SLANG_SPEC_VEC4:
case SLANG_SPEC_IVEC4:
case SLANG_SPEC_BVEC4:
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT44:
return 4;
case SLANG_SPEC_MAT23:
@@ -1125,10 +1140,13 @@ _slang_gltype_from_specifier(const slang_type_specifier *type)
case SLANG_SPEC_VEC4:
return GL_FLOAT_VEC4;
case SLANG_SPEC_MAT2:
+ case SLANG_SPEC_MAT22:
return GL_FLOAT_MAT2;
case SLANG_SPEC_MAT3:
+ case SLANG_SPEC_MAT33:
return GL_FLOAT_MAT3;
case SLANG_SPEC_MAT4:
+ case SLANG_SPEC_MAT44:
return GL_FLOAT_MAT4;
case SLANG_SPEC_MAT23:
return GL_FLOAT_MAT2x3;
diff --git a/src/mesa/slang/slang_typeinfo.h b/src/mesa/slang/slang_typeinfo.h
index 2251b06..a2cb42f 100644
--- a/src/mesa/slang/slang_typeinfo.h
+++ b/src/mesa/slang/slang_typeinfo.h
@@ -129,12 +129,15 @@ typedef enum slang_type_specifier_type_
SLANG_SPEC_MAT2,
SLANG_SPEC_MAT3,
SLANG_SPEC_MAT4,
+ SLANG_SPEC_MAT22,
SLANG_SPEC_MAT23,
SLANG_SPEC_MAT32,
+ SLANG_SPEC_MAT33,
SLANG_SPEC_MAT24,
SLANG_SPEC_MAT42,
SLANG_SPEC_MAT34,
SLANG_SPEC_MAT43,
+ SLANG_SPEC_MAT44,
SLANG_SPEC_SAMPLER_1D,
SLANG_SPEC_SAMPLER_2D,
SLANG_SPEC_SAMPLER_3D,
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev