From 23b7c7dc1469ba5bbd14f736a3c188c63cd4f280 Mon Sep 17 00:00:00 2001 From: Michal Krol Date: Tue, 30 May 2006 09:38:16 +0000 Subject: Make it running under Linux. --- progs/slang/Makefile | 67 ++ progs/slang/README | 7 + progs/slang/cltest.c | 6 +- progs/slang/cltest.txt | 2804 +++++++++++++++++++++++------------------------ progs/slang/framework.c | 7 +- progs/slang/framework.h | 9 +- progs/slang/vstest.c | 4 +- progs/slang/vstest.txt | 136 +-- 8 files changed, 1559 insertions(+), 1481 deletions(-) create mode 100644 progs/slang/Makefile create mode 100644 progs/slang/README (limited to 'progs') diff --git a/progs/slang/Makefile b/progs/slang/Makefile new file mode 100644 index 0000000..90debd1 --- /dev/null +++ b/progs/slang/Makefile @@ -0,0 +1,67 @@ +# progs/slang/Makefile + +TOP = ../.. + +include $(TOP)/configs/current + +INCDIR = $(TOP)/include + +LIB_DEP = $(LIB_DIR)/$(GL_LIB_NAME) + +# +# targets +# + +.PHONY: default tests clean + +default: cltest sotest vstest + +tests: default + ! ./sotest 2> /dev/null | (grep -e ^[*][*][*]) + ! ./vstest 2> /dev/null | (grep -e ^[*][*][*]) + ! ./cltest 2> /dev/null | (grep -e ^[*][*][*]) + +clean: + rm -f cltest.o sotest.o vstest.o framework.o cltest sotest vstest + +# +# executables +# + +cltest: cltest.o framework.o $(LIB_DEP) + $(CC) cltest.o framework.o $(APP_LIB_DEPS) -o cltest + +sotest: sotest.o framework.o $(LIB_DEP) + $(CC) sotest.o framework.o $(APP_LIB_DEPS) -o sotest + +vstest: vstest.o framework.o $(LIB_DEP) + $(CC) vstest.o framework.o $(APP_LIB_DEPS) -o vstest + +# +# objects +# + +framework.o: framework.c + $(CC) -c -I$(INCDIR) framework.c -o framework.o + +cltest.o: cltest.c + $(CC) -c -I$(INCDIR) cltest.c -o cltest.o + +sotest.o: sotest.c + $(CC) -c -I$(INCDIR) sotest.c -o sotest.o + +vstest.o: vstest.c + $(CC) -c -I$(INCDIR) vstest.c -o vstest.o + +# +# sources +# + +framework.c: framework.h + +cltest.c: framework.h + +sotest.c: framework.h + +vstest.c: framework.h + diff --git a/progs/slang/README b/progs/slang/README new file mode 100644 index 0000000..13a6aaa --- /dev/null +++ b/progs/slang/README @@ -0,0 +1,7 @@ +GLSL regression tests. + +Type "make" to build all test apps. + +Type "make tests" to build and run all test apps. If any +error is detected, a line starting with *** is output. + diff --git a/progs/slang/cltest.c b/progs/slang/cltest.c index 5736f3e..2753f59 100644 --- a/progs/slang/cltest.c +++ b/progs/slang/cltest.c @@ -76,8 +76,8 @@ static void load_test_file (const char *filename, struct PROGRAM **program) struct PROGRAM **currprog = program; FILE *f; char line[256]; - enum PROGRAM_LOAD_STATE pls; - enum SHADER_LOAD_STATE sls; + enum PROGRAM_LOAD_STATE pls = PLS_NONE; + enum SHADER_LOAD_STATE sls = SLS_NONE; f = fopen (filename, "r"); if (f == NULL) @@ -174,7 +174,7 @@ void RenderScene (void) exit (0); code = program->vertex.code; - glShaderSourceARB (vert, 1, &code, NULL); + glShaderSourceARB (vert, 1, (const GLcharARB **) (&code), NULL); glCompileShaderARB (vert); CheckObjectStatus (vert); diff --git a/progs/slang/cltest.txt b/progs/slang/cltest.txt index 7d87e74..8ca1dd4 100644 --- a/progs/slang/cltest.txt +++ b/progs/slang/cltest.txt @@ -1,1402 +1,1402 @@ -$ /* -$ Shader test script. -$ -$ Author: Michal Krol -$ -$ Comment line starts with dollar sign and white space. -$ -$ $program starts a new test program section called . Contains all other sections. -$ -$ $attrib starts vertex data input section for attrib called . Each line consists of -$ four values that form single vertex attrib. -$ -$ $vertex starts vertex shader section. Contains $code and &output sections. -$ -$ $code starts source code section. All text in this section gets compiled into appropriate -$ shader object. -$ -$ $output starts shader execution results section. These are compared, value-by-value, -$ with results of executing printMESA() functions within a shader. -$ */ - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test printMESA() function. -$ */ - -$program PRINT TEST - -$vertex - -$code - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (11.1); - printMESA (111); - printMESA (true); - - printMESA (vec2 (22.1, 22.2)); - printMESA (vec3 (33.1, 33.2, 33.3)); - printMESA (vec4 (44.1, 44.2, 44.3, 44.4)); - - printMESA (ivec2 (221, 222)); - printMESA (ivec3 (331, 332, 333)); - printMESA (ivec4 (441, 442, 443, 444)); - - printMESA (bvec2 (false, true)); - printMESA (bvec3 (true, true, false)); - printMESA (bvec4 (true, false, true, false)); - - printMESA (mat2 (55.11, 55.12, 55.21, 55.22)); - printMESA (mat3 (66.11, 66.12, 66.13, - 66.21, 66.22, 66.23, - 66.31, 66.32, 66.33)); - printMESA (mat4 (77.11, 77.12, 77.13, 77.14, - 77.21, 77.22, 77.23, 77.24, - 77.31, 77.32, 77.33, 77.34, - 77.41, 77.42, 77.43, 77.44)); -} - -$output - -11.1 -111 -true - -22.1 -22.2 -33.1 -33.2 -33.3 -44.1 -44.2 -44.3 -44.4 - -221 -222 -331 -332 -333 -441 -442 -443 -444 - -false -true -true -true -false -true -false -true -false - -55.11 -55.12 -55.21 -55.22 - -66.11 -66.12 -66.13 -66.21 -66.22 -66.23 -66.31 -66.32 -66.33 - -77.11 -77.12 -77.13 -77.14 -77.21 -77.22 -77.23 -77.24 -77.31 -77.32 -77.33 -77.34 -77.41 -77.42 -77.43 -77.44 - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test type casting. -$ */ - -$program TYPE CAST TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _Zero -0.0 0.0 0.0 0.0 - -$attrib _One -1.1 0.0 0.0 0.0 - -$attrib _Two -2.2 0.0 0.0 0.0 - -$attrib _MinusThree --3.3 0.0 0.0 0.0 - -$vertex - -$code - -attribute float _Zero; -attribute float _One; -attribute float _Two; -attribute float _MinusThree; - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_Zero); - printMESA (_One); - printMESA (_Two); - printMESA (_MinusThree); - - printMESA (float (_Zero)); - printMESA (float (_One)); - printMESA (float (_Two)); - printMESA (float (_MinusThree)); - printMESA (float (45.99)); - printMESA (float (-6.17)); - - printMESA (bool (_Zero)); - printMESA (bool (_One)); - printMESA (bool (_Two)); - printMESA (bool (_MinusThree)); - printMESA (bool (45.99)); - printMESA (bool (-6.17)); - printMESA (bool (0.0001)); - printMESA (bool (0.0)); - - printMESA (int (_Zero)); - printMESA (int (_One)); - printMESA (int (_Two)); - printMESA (int (_MinusThree)); - printMESA (int (45.99)); - printMESA (int (45.22)); - printMESA (int (-6.17)); - printMESA (int (-6.87)); -} - -$output - -0.0 -1.1 -2.2 --3.3 - -0.0 -1.1 -2.2 --3.3 -45.99 --6.17 - -false -true -true -true -true -true -true -false - -0 -1 -2 --3 -45 -45 --6 --6 - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test vector swizzles. -$ */ - -$program SWIZZLE TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _One -1.1 1.2 1.3 1.4 - -$attrib _Two -2.1 2.2 2.3 2.4 - -$vertex - -$code - -attribute vec4 _One; -attribute vec4 _Two; - -void assign5678 (out vec4 v) -{ - v.x = 5.5; - v.y = 6.6; - v.z = 7.7; - v.w = 8.8; -} - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_One); - printMESA (_Two); - - printMESA (_One.x); - printMESA (_One.y); - printMESA (_One.z); - printMESA (_One.w); - - printMESA (_Two.xy); - printMESA (_Two.yx); - printMESA (_Two.xw); - printMESA (_Two.wx); - printMESA (_Two.yz); - printMESA (_Two.zy); - printMESA (_Two.xz); - printMESA (_Two.zx); - printMESA (_Two.zw); - printMESA (_Two.wz); - - printMESA (_One.xyz); - printMESA (_One.yzx); - printMESA (_One.zxy); - printMESA (_One.xzy); - printMESA (_One.yzw); - printMESA (_One.zwx); - - printMESA (_Two.xyzw); - printMESA (_Two.yzwx); - printMESA (_Two.wzyx); - printMESA (_Two.zwyx); - - printMESA (_One.xx); - printMESA (_One.zz); - printMESA (_One.ww); - - printMESA (_Two.xxx); - printMESA (_Two.yyy); - printMESA (_Two.www); - - printMESA (_One.xxxx); - printMESA (_One.zzzz); - - printMESA (_Two.xxyy); - printMESA (_Two.wwxx); - printMESA (_Two.zxxw); - - vec4 v; - - v.zxwy = vec4 (5.5, 6.6, 7.7, 8.8); - printMESA (v); - - assign5678 (v.ywxz); - printMESA (v); -} - -$output - -1.1 -1.2 -1.3 -1.4 -2.1 -2.2 -2.3 -2.4 - -1.1 -1.2 -1.3 -1.4 - -2.1 -2.2 -2.2 -2.1 -2.1 -2.4 -2.4 -2.1 -2.2 -2.3 -2.3 -2.2 -2.1 -2.3 -2.3 -2.1 -2.3 -2.4 -2.4 -2.3 - -1.1 -1.2 -1.3 -1.2 -1.3 -1.1 -1.3 -1.1 -1.2 -1.1 -1.3 -1.2 -1.2 -1.3 -1.4 -1.3 -1.4 -1.1 - -2.1 -2.2 -2.3 -2.4 -2.2 -2.3 -2.4 -2.1 -2.4 -2.3 -2.2 -2.1 -2.3 -2.4 -2.2 -2.1 - -1.1 -1.1 -1.3 -1.3 -1.4 -1.4 - -2.1 -2.1 -2.1 -2.2 -2.2 -2.2 -2.4 -2.4 -2.4 - -1.1 -1.1 -1.1 -1.1 -1.3 -1.3 -1.3 -1.3 - -2.1 -2.1 -2.2 -2.2 -2.4 -2.4 -2.1 -2.1 -2.3 -2.1 -2.1 -2.4 - -6.6 -8.8 -5.5 -7.7 - -7.7 -5.5 -8.8 -6.6 - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test relational operators. -$ */ - -$program RELATIONAL OPERATOR TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _Two -2.0 0.0 0.0 0.0 - -$attrib _Two2 -2.0 0.0 0.0 0.0 - -$attrib _MinusThree --3.0 0.0 0.0 0.0 - -$vertex - -$code - -attribute float _Two; -attribute float _Two2; -attribute float _MinusThree; - -struct foo -{ - float f; - vec4 v4; - vec3 v3; - mat4 m4; - int i; - bool b; -}; - -void printMESA (const in foo bar) -{ - printMESA (bar.f); - printMESA (bar.v4); - printMESA (bar.v3); - printMESA (bar.m4); - printMESA (bar.i); - printMESA (bar.b); -} - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - int iTwo = int (_Two); - int iTwo2 = int (_Two2); - int iMinusThree = int (_MinusThree); - - printMESA (_Two <= _Two); - printMESA (_Two <= _Two2); - printMESA (_Two <= _MinusThree); - printMESA (_MinusThree <= _Two); - printMESA (iTwo <= iTwo); - printMESA (iTwo <= iTwo2); - printMESA (iTwo <= iMinusThree); - printMESA (iMinusThree <= iTwo); - - printMESA (_Two >= _Two); - printMESA (_Two >= _Two2); - printMESA (_Two >= _MinusThree); - printMESA (_MinusThree >= _Two); - printMESA (iTwo >= iTwo); - printMESA (iTwo >= iTwo2); - printMESA (iTwo >= iMinusThree); - printMESA (iMinusThree >= iTwo); - - printMESA (_Two < _Two); - printMESA (_Two < _Two2); - printMESA (_Two < _MinusThree); - printMESA (_MinusThree < _Two); - printMESA (iTwo < iTwo); - printMESA (iTwo < iTwo2); - printMESA (iTwo < iMinusThree); - printMESA (iMinusThree < iTwo); - - printMESA (_Two > _Two); - printMESA (_Two > _Two2); - printMESA (_Two > _MinusThree); - printMESA (_MinusThree > _Two); - printMESA (iTwo > iTwo); - printMESA (iTwo > iTwo2); - printMESA (iTwo > iMinusThree); - printMESA (iMinusThree > iTwo); - - printMESA (_Two == _Two); - printMESA (_Two == _Two2); - printMESA (_Two == _MinusThree); - printMESA (_MinusThree == _MinusThree); - printMESA (iTwo == iTwo); - printMESA (iTwo == iTwo2); - printMESA (iTwo == iMinusThree); - printMESA (iMinusThree == iMinusThree); - - printMESA (_Two != _Two); - printMESA (_Two != _Two2); - printMESA (_Two != _MinusThree); - printMESA (_MinusThree != _MinusThree); - printMESA (iTwo != iTwo); - printMESA (iTwo != iTwo2); - printMESA (iTwo != iMinusThree); - printMESA (iMinusThree != iMinusThree); - - foo foo1; - foo1.f = 13.31; - foo1.v4 = vec4 (44.11, 44.22, 44.33, 44.44); - foo1.v3 = vec3 (33.11, 33.22, 33.33); - foo1.m4 = mat4 (17.88); - foo1.i = 666; - foo1.b = true; - printMESA (foo1); - - // make foo2 the same as foo1 - foo foo2; - foo2.f = 13.31; - foo2.v4 = vec4 (44.11, 44.22, 44.33, 44.44); - foo2.v3 = vec3 (33.11, 33.22, 33.33); - foo2.m4 = mat4 (17.88); - foo2.i = 666; - foo2.b = true; - - printMESA (foo1 == foo2); - printMESA (foo1 != foo2); - - // make them a little bit different - foo2.m4[2].y = 333.333; - printMESA (foo2); - - printMESA (foo1 == foo2); - printMESA (foo1 != foo2); -} - -$output - -true -true -false -true -true -true -false -true - -true -true -true -false -true -true -true -false - -false -false -false -true -false -false -false -true - -false -false -true -false -false -false -true -false - -true -true -false -true -true -true -false -true - -false -false -true -false -false -false -true -false - -13.31 -44.11 -44.22 -44.33 -44.44 -33.11 -33.22 -33.33 -17.88 -0.0 -0.0 -0.0 -0.0 -17.88 -0.0 -0.0 -0.0 -0.0 -17.88 -0.0 -0.0 -0.0 -0.0 -17.88 -666 -true - -true -false - -13.31 -44.11 -44.22 -44.33 -44.44 -33.11 -33.22 -33.33 -17.88 -0.0 -0.0 -0.0 -0.0 -17.88 -0.0 -0.0 -0.0 -333.333 -17.88 -0.0 -0.0 -0.0 -0.0 -17.88 -666 -true - -false -true - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test logical operators. -$ */ - -$program LOGICAL OPERATOR TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _False -0.0 0.0 0.0 0.0 - -$attrib _True -1.0 0.0 0.0 0.0 - -$attrib _False2 -0.0 0.0 0.0 0.0 - -$attrib _True2 -1.0 0.0 0.0 0.0 - -$vertex - -$code - -attribute float _False; -attribute float _True; -attribute float _False2; -attribute float _True2; - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_False); - printMESA (_True); - printMESA (_False2); - printMESA (_True2); - - bool False = bool (_False); - bool True = bool (_True); - bool False2 = bool (_False2); - bool True2 = bool (_True2); - - // - // It is important to test each operator with the following argument types: - // * Both arguments are different variables, even if they have the same values. - // False and False2 are distinct attributes, but are the same in value. - // * Both arguments may be the same variables. This case tests possible - // optimizations, e.g. X && X --> X. - // * Both arguments are constant. This tests constant folding. - // - - printMESA (!False); - printMESA (!True); - printMESA (!false); - printMESA (!true); - - printMESA (False ^^ False2); - printMESA (False ^^ True2); - printMESA (True ^^ False2); - printMESA (True ^^ True2); - printMESA (False ^^ False); - printMESA (False ^^ True); - printMESA (True ^^ False); - printMESA (True ^^ True); - printMESA (false ^^ false); - printMESA (false ^^ true); - printMESA (true ^^ false); - printMESA (true ^^ true); - - printMESA (False && False2); - printMESA (False && True2); - printMESA (True && False2); - printMESA (True && True2); - printMESA (False && False); - printMESA (False && True); - printMESA (True && False); - printMESA (True && True); - printMESA (false && false); - printMESA (false && true); - printMESA (true && false); - printMESA (true && true); - - printMESA (False || False2); - printMESA (False || True2); - printMESA (True || False2); - printMESA (True || True2); - printMESA (False || False); - printMESA (False || True); - printMESA (True || False); - printMESA (True || True); - printMESA (false || false); - printMESA (false || true); - printMESA (true || false); - printMESA (true || true); - - // - // Test short-circuit evaluation of && and ||. The right expression evaluation depends - // on the value of the left expression. If the right expression has side effects, we - // can easily test if it happened. - // - - bool x; - - x = false; - printMESA (x); - printMESA (False && (x = true)); - printMESA (x); - - x = false; - printMESA (x); - printMESA (false && (x = true)); - printMESA (x); - - x = true; - printMESA (x); - printMESA (True || (x = false)); - printMESA (x); - - x = true; - printMESA (x); - printMESA (true || (x = false)); - printMESA (x); -} - -$output - -0.0 -1.0 -0.0 -1.0 - -true -false -true -false - -false -true -true -false -false -true -true -false -false -true -true -false - -false -false -false -true -false -false -false -true -false -false -false -true - -false -true -true -true -false -true -true -true -false -true -true -true - -false -false -false - -false -false -false - -true -true -true - -true -true -true - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test subscript operator/array access. -$ */ - -$program ARRAY ACCESS TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _Zero -0.0 0.0 0.0 0.0 - -$attrib _One -1.1 0.0 0.0 0.0 - -$attrib _Two -2.9 0.0 0.0 0.0 - -$attrib _Vec -11.11 22.22 33.33 44.44 - -$vertex - -$code - -attribute float _Zero; -attribute float _One; -attribute float _Two; -attribute vec4 _Vec; - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_Zero); - printMESA (_One); - printMESA (_Two); - printMESA (_Vec); - - printMESA (_Vec[0]); - printMESA (_Vec[1]); - printMESA (_Vec[2]); - printMESA (_Vec[3]); - - printMESA (_Vec[int (_Zero)]); - printMESA (_Vec[int (_One)]); - printMESA (_Vec[int (_Two)]); -} - -$output - -0.0 -1.1 -2.9 -11.11 -22.22 -33.33 -44.44 - -11.11 -22.22 -33.33 -44.44 - -11.11 -22.22 -33.33 - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test pre/post-increment/decrement operators. -$ Note: assumes relational operators being correct. -$ */ - -$program PRE/POST-INC/DEC OPERATOR TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _Zero -0.0 0.0 0.0 0.0 - -$attrib _One -1.1 0.0 0.0 0.0 - -$attrib _Two4 -2.1 2.2 2.3 2.4 - -$vertex - -$code - -attribute float _Zero; -attribute float _One; -attribute vec4 _Two4; - -float fZero, fOne; -vec4 fTwo4; -int iZero, iOne; -ivec4 iTwo4; - -void reset () { - fZero = _Zero; - fOne = _One; - fTwo4 = _Two4; - iZero = int (_Zero); - iOne = int (_One); - iTwo4 = ivec4 (_Two4); -} - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_Zero); - printMESA (_One); - printMESA (_Two4); - - // pre-increment - reset (); - printMESA (++fZero); - printMESA (++fOne); - printMESA (++iZero); - printMESA (++iOne); - printMESA (fZero); - printMESA (fOne); - printMESA (iZero); - printMESA (iOne); - printMESA (++fTwo4 == _Two4 + 1.0); - printMESA (++iTwo4 == ivec4 (_Two4) + 1); - - // pre-decrement - reset (); - printMESA (--fZero); - printMESA (--fOne); - printMESA (--iZero); - printMESA (--iOne); - printMESA (fZero); - printMESA (fOne); - printMESA (iZero); - printMESA (iOne); - printMESA (--fTwo4 == _Two4 - 1.0); - printMESA (--iTwo4 == ivec4 (_Two4) - 1); - - // post-increment - reset (); - printMESA (fZero++); - printMESA (fOne++); - printMESA (iZero++); - printMESA (iOne++); - printMESA (fZero); - printMESA (fOne); - printMESA (iZero); - printMESA (iOne); - printMESA (fTwo4++ == _Two4); - printMESA (iTwo4++ == ivec4 (_Two4)); - - // post-decrement - reset (); - printMESA (fZero--); - printMESA (fOne--); - printMESA (iZero--); - printMESA (iOne--); - printMESA (fZero); - printMESA (fOne); - printMESA (iZero); - printMESA (iOne); - printMESA (fTwo4-- == _Two4); - printMESA (iTwo4-- == ivec4 (_Two4)); -} - -$output - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 - -1.0 -2.1 -1 -2 -1.0 -2.1 -1 -2 -true -true - --1.0 -0.1 --1 -0 --1.0 -0.1 --1 -0 -true -true - -0.0 -1.1 -0 -1 -1.0 -2.1 -1 -2 -true -true - -0.0 -1.1 -0 -1 --1.0 -0.1 --1 -0 -true -true - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test arithmetical operators. -$ */ - -$program ARITHMETICAL OPERATOR TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _Zero -0.0 0.0 0.0 0.0 - -$attrib _One -1.1 0.0 0.0 0.0 - -$attrib _Two4 -2.1 2.2 2.3 2.4 - -$vertex - -$code - -attribute float _Zero; -attribute float _One; -attribute vec4 _Two4; - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_Zero); - printMESA (_One); - printMESA (_Two4); - - int iZero = int (_Zero); - int iOne = int (_One); - ivec4 iTwo4 = ivec4 (_Two4); - - printMESA (-_Zero); - printMESA (-_One); - printMESA (-_Two4); - printMESA (-_Two4.z); - - printMESA (_Zero + 0.0); - printMESA (_One + 0.0); - printMESA (_Two4 + 0.0); - printMESA (_Two4.y + 0.0); - - printMESA (_Zero + _Zero); - printMESA (_Zero + _One); - printMESA (_Zero + _Two4); - printMESA (_One + _Zero); - printMESA (_One + _Two4); - printMESA (_Two4 + _Two4); - - printMESA (_Zero - 0.0); - printMESA (_One - 0.0); - printMESA (_Two4 - 0.0); - printMESA (_Two4.y - 0.0); - - printMESA (_Zero - _Zero); - printMESA (_Zero - _One); - printMESA (_Zero - _Two4); - printMESA (_One - _Zero); - printMESA (_One - _Two4); - printMESA (_Two4 - _Two4); - - printMESA (_Zero * 1.0); - printMESA (_One * 1.0); - printMESA (_Two4 * 1.0); - printMESA (_Two4.x * 1.0); - - printMESA (_Zero * _Zero); - printMESA (_Zero * _One); - printMESA (_Zero * _Two4); - printMESA (_One * _Zero); - printMESA (_One * _One); - printMESA (_One * _Two4); - printMESA (_Two4 * _Two4); - - printMESA (_Zero / 1.0); - printMESA (_One / 1.0); - printMESA (_Two4 / 1.0); - printMESA (_Two4.x / 1.0); - - printMESA (_Zero / _One); - printMESA (_Zero / _Two4); - printMESA (_One / _One); - printMESA (_One / _Two4); - printMESA (_Two4 / _Two4); -} - -$output - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 - -0.0 --1.1 --2.1 --2.2 --2.3 --2.4 --2.3 - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 -2.2 - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 -1.1 -3.2 -3.3 -3.4 -3.5 -4.2 -4.4 -4.6 -4.8 - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 -2.2 - -0.0 --1.1 --2.1 --2.2 --2.3 --2.4 -1.1 --1.0 --1.1 --1.2 --1.3 -0.0 -0.0 -0.0 -0.0 - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 -2.1 - -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -1.21 -2.31 -2.42 -2.53 -2.64 -4.41 -4.84 -5.29 -5.76 - -0.0 -1.1 -2.1 -2.2 -2.3 -2.4 -2.1 - -0.0 -0.0 -0.0 -0.0 -0.0 -1.0 -0.52381 -0.5 -0.47826 -0.45833 -1.0 -1.0 -1.0 -1.0 - - -$ /* -$ -------------------------------------------------------------------------------------------------- -$ Test matrix operations. -$ Note: assumes relational operators being correct. -$ */ - -$program MATRIX TEST - -$attrib gl_Vertex -0.0 0.0 0.0 1.0 - -$attrib _Zero -0.0 0.0 0.0 0.0 - -$attrib _One -1.0 1.0 1.0 1.0 - -$attrib _Two -2.0 2.0 2.0 2.0 - -$vertex - -$code - -attribute vec4 _Zero; -attribute vec4 _One; -attribute vec4 _Two; - -void main () { - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - printMESA (_Zero); - printMESA (_One); - printMESA (_Two); - - mat4 Identity = mat4 (_One.x); - - printMESA (Identity == mat4 (1.0, 0.0, 0.0, 0.0, - 0.0, 1.0, 0.0, 0.0, - 0.0, 0.0, 1.0, 0.0, - 0.0, 0.0, 0.0, 1.0)); - printMESA (Identity * _Two == _Two); - - mat4 Matrix = mat4 (1.1, 1.2, 1.3, 1.4, - 2.1, 2.2, 2.3, 2.4, - 3.1, 3.2, 3.3, 3.4, - 4.1, 4.2, 4.3, 4.4); - - printMESA (Matrix[2].y); - printMESA (Matrix[1]); -} - -$output - -0.0 -0.0 -0.0 -0.0 -1.0 -1.0 -1.0 -1.0 -2.0 -2.0 -2.0 -2.0 -true -true -3.2 -2.1 -2.2 -2.3 -2.4 - +$ /* +$ Shader test script. +$ +$ Author: Michal Krol +$ +$ Comment line starts with dollar sign and white space. +$ +$ $program starts a new test program section called . Contains all other sections. +$ +$ $attrib starts vertex data input section for attrib called . Each line consists of +$ four values that form single vertex attrib. +$ +$ $vertex starts vertex shader section. Contains $code and &output sections. +$ +$ $code starts source code section. All text in this section gets compiled into appropriate +$ shader object. +$ +$ $output starts shader execution results section. These are compared, value-by-value, +$ with results of executing printMESA() functions within a shader. +$ */ + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test printMESA() function. +$ */ + +$program PRINT TEST + +$vertex + +$code + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (11.1); + printMESA (111); + printMESA (true); + + printMESA (vec2 (22.1, 22.2)); + printMESA (vec3 (33.1, 33.2, 33.3)); + printMESA (vec4 (44.1, 44.2, 44.3, 44.4)); + + printMESA (ivec2 (221, 222)); + printMESA (ivec3 (331, 332, 333)); + printMESA (ivec4 (441, 442, 443, 444)); + + printMESA (bvec2 (false, true)); + printMESA (bvec3 (true, true, false)); + printMESA (bvec4 (true, false, true, false)); + + printMESA (mat2 (55.11, 55.12, 55.21, 55.22)); + printMESA (mat3 (66.11, 66.12, 66.13, + 66.21, 66.22, 66.23, + 66.31, 66.32, 66.33)); + printMESA (mat4 (77.11, 77.12, 77.13, 77.14, + 77.21, 77.22, 77.23, 77.24, + 77.31, 77.32, 77.33, 77.34, + 77.41, 77.42, 77.43, 77.44)); +} + +$output + +11.1 +111 +true + +22.1 +22.2 +33.1 +33.2 +33.3 +44.1 +44.2 +44.3 +44.4 + +221 +222 +331 +332 +333 +441 +442 +443 +444 + +false +true +true +true +false +true +false +true +false + +55.11 +55.12 +55.21 +55.22 + +66.11 +66.12 +66.13 +66.21 +66.22 +66.23 +66.31 +66.32 +66.33 + +77.11 +77.12 +77.13 +77.14 +77.21 +77.22 +77.23 +77.24 +77.31 +77.32 +77.33 +77.34 +77.41 +77.42 +77.43 +77.44 + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test type casting. +$ */ + +$program TYPE CAST TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _Zero +0.0 0.0 0.0 0.0 + +$attrib _One +1.1 0.0 0.0 0.0 + +$attrib _Two +2.2 0.0 0.0 0.0 + +$attrib _MinusThree +-3.3 0.0 0.0 0.0 + +$vertex + +$code + +attribute float _Zero; +attribute float _One; +attribute float _Two; +attribute float _MinusThree; + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_Zero); + printMESA (_One); + printMESA (_Two); + printMESA (_MinusThree); + + printMESA (float (_Zero)); + printMESA (float (_One)); + printMESA (float (_Two)); + printMESA (float (_MinusThree)); + printMESA (float (45.99)); + printMESA (float (-6.17)); + + printMESA (bool (_Zero)); + printMESA (bool (_One)); + printMESA (bool (_Two)); + printMESA (bool (_MinusThree)); + printMESA (bool (45.99)); + printMESA (bool (-6.17)); + printMESA (bool (0.0001)); + printMESA (bool (0.0)); + + printMESA (int (_Zero)); + printMESA (int (_One)); + printMESA (int (_Two)); + printMESA (int (_MinusThree)); + printMESA (int (45.99)); + printMESA (int (45.22)); + printMESA (int (-6.17)); + printMESA (int (-6.87)); +} + +$output + +0.0 +1.1 +2.2 +-3.3 + +0.0 +1.1 +2.2 +-3.3 +45.99 +-6.17 + +false +true +true +true +true +true +true +false + +0 +1 +2 +-3 +45 +45 +-6 +-6 + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test vector swizzles. +$ */ + +$program SWIZZLE TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _One +1.1 1.2 1.3 1.4 + +$attrib _Two +2.1 2.2 2.3 2.4 + +$vertex + +$code + +attribute vec4 _One; +attribute vec4 _Two; + +void assign5678 (out vec4 v) +{ + v.x = 5.5; + v.y = 6.6; + v.z = 7.7; + v.w = 8.8; +} + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_One); + printMESA (_Two); + + printMESA (_One.x); + printMESA (_One.y); + printMESA (_One.z); + printMESA (_One.w); + + printMESA (_Two.xy); + printMESA (_Two.yx); + printMESA (_Two.xw); + printMESA (_Two.wx); + printMESA (_Two.yz); + printMESA (_Two.zy); + printMESA (_Two.xz); + printMESA (_Two.zx); + printMESA (_Two.zw); + printMESA (_Two.wz); + + printMESA (_One.xyz); + printMESA (_One.yzx); + printMESA (_One.zxy); + printMESA (_One.xzy); + printMESA (_One.yzw); + printMESA (_One.zwx); + + printMESA (_Two.xyzw); + printMESA (_Two.yzwx); + printMESA (_Two.wzyx); + printMESA (_Two.zwyx); + + printMESA (_One.xx); + printMESA (_One.zz); + printMESA (_One.ww); + + printMESA (_Two.xxx); + printMESA (_Two.yyy); + printMESA (_Two.www); + + printMESA (_One.xxxx); + printMESA (_One.zzzz); + + printMESA (_Two.xxyy); + printMESA (_Two.wwxx); + printMESA (_Two.zxxw); + + vec4 v; + + v.zxwy = vec4 (5.5, 6.6, 7.7, 8.8); + printMESA (v); + + assign5678 (v.ywxz); + printMESA (v); +} + +$output + +1.1 +1.2 +1.3 +1.4 +2.1 +2.2 +2.3 +2.4 + +1.1 +1.2 +1.3 +1.4 + +2.1 +2.2 +2.2 +2.1 +2.1 +2.4 +2.4 +2.1 +2.2 +2.3 +2.3 +2.2 +2.1 +2.3 +2.3 +2.1 +2.3 +2.4 +2.4 +2.3 + +1.1 +1.2 +1.3 +1.2 +1.3 +1.1 +1.3 +1.1 +1.2 +1.1 +1.3 +1.2 +1.2 +1.3 +1.4 +1.3 +1.4 +1.1 + +2.1 +2.2 +2.3 +2.4 +2.2 +2.3 +2.4 +2.1 +2.4 +2.3 +2.2 +2.1 +2.3 +2.4 +2.2 +2.1 + +1.1 +1.1 +1.3 +1.3 +1.4 +1.4 + +2.1 +2.1 +2.1 +2.2 +2.2 +2.2 +2.4 +2.4 +2.4 + +1.1 +1.1 +1.1 +1.1 +1.3 +1.3 +1.3 +1.3 + +2.1 +2.1 +2.2 +2.2 +2.4 +2.4 +2.1 +2.1 +2.3 +2.1 +2.1 +2.4 + +6.6 +8.8 +5.5 +7.7 + +7.7 +5.5 +8.8 +6.6 + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test relational operators. +$ */ + +$program RELATIONAL OPERATOR TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _Two +2.0 0.0 0.0 0.0 + +$attrib _Two2 +2.0 0.0 0.0 0.0 + +$attrib _MinusThree +-3.0 0.0 0.0 0.0 + +$vertex + +$code + +attribute float _Two; +attribute float _Two2; +attribute float _MinusThree; + +struct foo +{ + float f; + vec4 v4; + vec3 v3; + mat4 m4; + int i; + bool b; +}; + +void printMESA (const in foo bar) +{ + printMESA (bar.f); + printMESA (bar.v4); + printMESA (bar.v3); + printMESA (bar.m4); + printMESA (bar.i); + printMESA (bar.b); +} + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + int iTwo = int (_Two); + int iTwo2 = int (_Two2); + int iMinusThree = int (_MinusThree); + + printMESA (_Two <= _Two); + printMESA (_Two <= _Two2); + printMESA (_Two <= _MinusThree); + printMESA (_MinusThree <= _Two); + printMESA (iTwo <= iTwo); + printMESA (iTwo <= iTwo2); + printMESA (iTwo <= iMinusThree); + printMESA (iMinusThree <= iTwo); + + printMESA (_Two >= _Two); + printMESA (_Two >= _Two2); + printMESA (_Two >= _MinusThree); + printMESA (_MinusThree >= _Two); + printMESA (iTwo >= iTwo); + printMESA (iTwo >= iTwo2); + printMESA (iTwo >= iMinusThree); + printMESA (iMinusThree >= iTwo); + + printMESA (_Two < _Two); + printMESA (_Two < _Two2); + printMESA (_Two < _MinusThree); + printMESA (_MinusThree < _Two); + printMESA (iTwo < iTwo); + printMESA (iTwo < iTwo2); + printMESA (iTwo < iMinusThree); + printMESA (iMinusThree < iTwo); + + printMESA (_Two > _Two); + printMESA (_Two > _Two2); + printMESA (_Two > _MinusThree); + printMESA (_MinusThree > _Two); + printMESA (iTwo > iTwo); + printMESA (iTwo > iTwo2); + printMESA (iTwo > iMinusThree); + printMESA (iMinusThree > iTwo); + + printMESA (_Two == _Two); + printMESA (_Two == _Two2); + printMESA (_Two == _MinusThree); + printMESA (_MinusThree == _MinusThree); + printMESA (iTwo == iTwo); + printMESA (iTwo == iTwo2); + printMESA (iTwo == iMinusThree); + printMESA (iMinusThree == iMinusThree); + + printMESA (_Two != _Two); + printMESA (_Two != _Two2); + printMESA (_Two != _MinusThree); + printMESA (_MinusThree != _MinusThree); + printMESA (iTwo != iTwo); + printMESA (iTwo != iTwo2); + printMESA (iTwo != iMinusThree); + printMESA (iMinusThree != iMinusThree); + + foo foo1; + foo1.f = 13.31; + foo1.v4 = vec4 (44.11, 44.22, 44.33, 44.44); + foo1.v3 = vec3 (33.11, 33.22, 33.33); + foo1.m4 = mat4 (17.88); + foo1.i = 666; + foo1.b = true; + printMESA (foo1); + + // make foo2 the same as foo1 + foo foo2; + foo2.f = 13.31; + foo2.v4 = vec4 (44.11, 44.22, 44.33, 44.44); + foo2.v3 = vec3 (33.11, 33.22, 33.33); + foo2.m4 = mat4 (17.88); + foo2.i = 666; + foo2.b = true; + + printMESA (foo1 == foo2); + printMESA (foo1 != foo2); + + // make them a little bit different + foo2.m4[2].y = 333.333; + printMESA (foo2); + + printMESA (foo1 == foo2); + printMESA (foo1 != foo2); +} + +$output + +true +true +false +true +true +true +false +true + +true +true +true +false +true +true +true +false + +false +false +false +true +false +false +false +true + +false +false +true +false +false +false +true +false + +true +true +false +true +true +true +false +true + +false +false +true +false +false +false +true +false + +13.31 +44.11 +44.22 +44.33 +44.44 +33.11 +33.22 +33.33 +17.88 +0.0 +0.0 +0.0 +0.0 +17.88 +0.0 +0.0 +0.0 +0.0 +17.88 +0.0 +0.0 +0.0 +0.0 +17.88 +666 +true + +true +false + +13.31 +44.11 +44.22 +44.33 +44.44 +33.11 +33.22 +33.33 +17.88 +0.0 +0.0 +0.0 +0.0 +17.88 +0.0 +0.0 +0.0 +333.333 +17.88 +0.0 +0.0 +0.0 +0.0 +17.88 +666 +true + +false +true + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test logical operators. +$ */ + +$program LOGICAL OPERATOR TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _False +0.0 0.0 0.0 0.0 + +$attrib _True +1.0 0.0 0.0 0.0 + +$attrib _False2 +0.0 0.0 0.0 0.0 + +$attrib _True2 +1.0 0.0 0.0 0.0 + +$vertex + +$code + +attribute float _False; +attribute float _True; +attribute float _False2; +attribute float _True2; + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_False); + printMESA (_True); + printMESA (_False2); + printMESA (_True2); + + bool False = bool (_False); + bool True = bool (_True); + bool False2 = bool (_False2); + bool True2 = bool (_True2); + + // + // It is important to test each operator with the following argument types: + // * Both arguments are different variables, even if they have the same values. + // False and False2 are distinct attributes, but are the same in value. + // * Both arguments may be the same variables. This case tests possible + // optimizations, e.g. X && X --> X. + // * Both arguments are constant. This tests constant folding. + // + + printMESA (!False); + printMESA (!True); + printMESA (!false); + printMESA (!true); + + printMESA (False ^^ False2); + printMESA (False ^^ True2); + printMESA (True ^^ False2); + printMESA (True ^^ True2); + printMESA (False ^^ False); + printMESA (False ^^ True); + printMESA (True ^^ False); + printMESA (True ^^ True); + printMESA (false ^^ false); + printMESA (false ^^ true); + printMESA (true ^^ false); + printMESA (true ^^ true); + + printMESA (False && False2); + printMESA (False && True2); + printMESA (True && False2); + printMESA (True && True2); + printMESA (False && False); + printMESA (False && True); + printMESA (True && False); + printMESA (True && True); + printMESA (false && false); + printMESA (false && true); + printMESA (true && false); + printMESA (true && true); + + printMESA (False || False2); + printMESA (False || True2); + printMESA (True || False2); + printMESA (True || True2); + printMESA (False || False); + printMESA (False || True); + printMESA (True || False); + printMESA (True || True); + printMESA (false || false); + printMESA (false || true); + printMESA (true || false); + printMESA (true || true); + + // + // Test short-circuit evaluation of && and ||. The right expression evaluation depends + // on the value of the left expression. If the right expression has side effects, we + // can easily test if it happened. + // + + bool x; + + x = false; + printMESA (x); + printMESA (False && (x = true)); + printMESA (x); + + x = false; + printMESA (x); + printMESA (false && (x = true)); + printMESA (x); + + x = true; + printMESA (x); + printMESA (True || (x = false)); + printMESA (x); + + x = true; + printMESA (x); + printMESA (true || (x = false)); + printMESA (x); +} + +$output + +0.0 +1.0 +0.0 +1.0 + +true +false +true +false + +false +true +true +false +false +true +true +false +false +true +true +false + +false +false +false +true +false +false +false +true +false +false +false +true + +false +true +true +true +false +true +true +true +false +true +true +true + +false +false +false + +false +false +false + +true +true +true + +true +true +true + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test subscript operator/array access. +$ */ + +$program ARRAY ACCESS TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _Zero +0.0 0.0 0.0 0.0 + +$attrib _One +1.1 0.0 0.0 0.0 + +$attrib _Two +2.9 0.0 0.0 0.0 + +$attrib _Vec +11.11 22.22 33.33 44.44 + +$vertex + +$code + +attribute float _Zero; +attribute float _One; +attribute float _Two; +attribute vec4 _Vec; + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_Zero); + printMESA (_One); + printMESA (_Two); + printMESA (_Vec); + + printMESA (_Vec[0]); + printMESA (_Vec[1]); + printMESA (_Vec[2]); + printMESA (_Vec[3]); + + printMESA (_Vec[int (_Zero)]); + printMESA (_Vec[int (_One)]); + printMESA (_Vec[int (_Two)]); +} + +$output + +0.0 +1.1 +2.9 +11.11 +22.22 +33.33 +44.44 + +11.11 +22.22 +33.33 +44.44 + +11.11 +22.22 +33.33 + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test pre/post-increment/decrement operators. +$ Note: assumes relational operators being correct. +$ */ + +$program PRE/POST-INC/DEC OPERATOR TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _Zero +0.0 0.0 0.0 0.0 + +$attrib _One +1.1 0.0 0.0 0.0 + +$attrib _Two4 +2.1 2.2 2.3 2.4 + +$vertex + +$code + +attribute float _Zero; +attribute float _One; +attribute vec4 _Two4; + +float fZero, fOne; +vec4 fTwo4; +int iZero, iOne; +ivec4 iTwo4; + +void reset () { + fZero = _Zero; + fOne = _One; + fTwo4 = _Two4; + iZero = int (_Zero); + iOne = int (_One); + iTwo4 = ivec4 (_Two4); +} + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_Zero); + printMESA (_One); + printMESA (_Two4); + + // pre-increment + reset (); + printMESA (++fZero); + printMESA (++fOne); + printMESA (++iZero); + printMESA (++iOne); + printMESA (fZero); + printMESA (fOne); + printMESA (iZero); + printMESA (iOne); + printMESA (++fTwo4 == _Two4 + 1.0); + printMESA (++iTwo4 == ivec4 (_Two4) + 1); + + // pre-decrement + reset (); + printMESA (--fZero); + printMESA (--fOne); + printMESA (--iZero); + printMESA (--iOne); + printMESA (fZero); + printMESA (fOne); + printMESA (iZero); + printMESA (iOne); + printMESA (--fTwo4 == _Two4 - 1.0); + printMESA (--iTwo4 == ivec4 (_Two4) - 1); + + // post-increment + reset (); + printMESA (fZero++); + printMESA (fOne++); + printMESA (iZero++); + printMESA (iOne++); + printMESA (fZero); + printMESA (fOne); + printMESA (iZero); + printMESA (iOne); + printMESA (fTwo4++ == _Two4); + printMESA (iTwo4++ == ivec4 (_Two4)); + + // post-decrement + reset (); + printMESA (fZero--); + printMESA (fOne--); + printMESA (iZero--); + printMESA (iOne--); + printMESA (fZero); + printMESA (fOne); + printMESA (iZero); + printMESA (iOne); + printMESA (fTwo4-- == _Two4); + printMESA (iTwo4-- == ivec4 (_Two4)); +} + +$output + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 + +1.0 +2.1 +1 +2 +1.0 +2.1 +1 +2 +true +true + +-1.0 +0.1 +-1 +0 +-1.0 +0.1 +-1 +0 +true +true + +0.0 +1.1 +0 +1 +1.0 +2.1 +1 +2 +true +true + +0.0 +1.1 +0 +1 +-1.0 +0.1 +-1 +0 +true +true + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test arithmetical operators. +$ */ + +$program ARITHMETICAL OPERATOR TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _Zero +0.0 0.0 0.0 0.0 + +$attrib _One +1.1 0.0 0.0 0.0 + +$attrib _Two4 +2.1 2.2 2.3 2.4 + +$vertex + +$code + +attribute float _Zero; +attribute float _One; +attribute vec4 _Two4; + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_Zero); + printMESA (_One); + printMESA (_Two4); + + int iZero = int (_Zero); + int iOne = int (_One); + ivec4 iTwo4 = ivec4 (_Two4); + + printMESA (-_Zero); + printMESA (-_One); + printMESA (-_Two4); + printMESA (-_Two4.z); + + printMESA (_Zero + 0.0); + printMESA (_One + 0.0); + printMESA (_Two4 + 0.0); + printMESA (_Two4.y + 0.0); + + printMESA (_Zero + _Zero); + printMESA (_Zero + _One); + printMESA (_Zero + _Two4); + printMESA (_One + _Zero); + printMESA (_One + _Two4); + printMESA (_Two4 + _Two4); + + printMESA (_Zero - 0.0); + printMESA (_One - 0.0); + printMESA (_Two4 - 0.0); + printMESA (_Two4.y - 0.0); + + printMESA (_Zero - _Zero); + printMESA (_Zero - _One); + printMESA (_Zero - _Two4); + printMESA (_One - _Zero); + printMESA (_One - _Two4); + printMESA (_Two4 - _Two4); + + printMESA (_Zero * 1.0); + printMESA (_One * 1.0); + printMESA (_Two4 * 1.0); + printMESA (_Two4.x * 1.0); + + printMESA (_Zero * _Zero); + printMESA (_Zero * _One); + printMESA (_Zero * _Two4); + printMESA (_One * _Zero); + printMESA (_One * _One); + printMESA (_One * _Two4); + printMESA (_Two4 * _Two4); + + printMESA (_Zero / 1.0); + printMESA (_One / 1.0); + printMESA (_Two4 / 1.0); + printMESA (_Two4.x / 1.0); + + printMESA (_Zero / _One); + printMESA (_Zero / _Two4); + printMESA (_One / _One); + printMESA (_One / _Two4); + printMESA (_Two4 / _Two4); +} + +$output + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 + +0.0 +-1.1 +-2.1 +-2.2 +-2.3 +-2.4 +-2.3 + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 +2.2 + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 +1.1 +3.2 +3.3 +3.4 +3.5 +4.2 +4.4 +4.6 +4.8 + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 +2.2 + +0.0 +-1.1 +-2.1 +-2.2 +-2.3 +-2.4 +1.1 +-1.0 +-1.1 +-1.2 +-1.3 +0.0 +0.0 +0.0 +0.0 + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 +2.1 + +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 +1.21 +2.31 +2.42 +2.53 +2.64 +4.41 +4.84 +5.29 +5.76 + +0.0 +1.1 +2.1 +2.2 +2.3 +2.4 +2.1 + +0.0 +0.0 +0.0 +0.0 +0.0 +1.0 +0.52381 +0.5 +0.47826 +0.45833 +1.0 +1.0 +1.0 +1.0 + + +$ /* +$ -------------------------------------------------------------------------------------------------- +$ Test matrix operations. +$ Note: assumes relational operators being correct. +$ */ + +$program MATRIX TEST + +$attrib gl_Vertex +0.0 0.0 0.0 1.0 + +$attrib _Zero +0.0 0.0 0.0 0.0 + +$attrib _One +1.0 1.0 1.0 1.0 + +$attrib _Two +2.0 2.0 2.0 2.0 + +$vertex + +$code + +attribute vec4 _Zero; +attribute vec4 _One; +attribute vec4 _Two; + +void main () { + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + printMESA (_Zero); + printMESA (_One); + printMESA (_Two); + + mat4 Identity = mat4 (_One.x); + + printMESA (Identity == mat4 (1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0)); + printMESA (Identity * _Two == _Two); + + mat4 Matrix = mat4 (1.1, 1.2, 1.3, 1.4, + 2.1, 2.2, 2.3, 2.4, + 3.1, 3.2, 3.3, 3.4, + 4.1, 4.2, 4.3, 4.4); + + printMESA (Matrix[2].y); + printMESA (Matrix[1]); +} + +$output + +0.0 +0.0 +0.0 +0.0 +1.0 +1.0 +1.0 +1.0 +2.0 +2.0 +2.0 +2.0 +true +true +3.2 +2.1 +2.2 +2.3 +2.4 + diff --git a/progs/slang/framework.c b/progs/slang/framework.c index 80ee37f..692cef9 100644 --- a/progs/slang/framework.c +++ b/progs/slang/framework.c @@ -3,8 +3,10 @@ /* * GL_ARB_multitexture */ +#ifndef GL_ARB_multitexture PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB; +#endif /* * GL_ARB_shader_objects @@ -65,8 +67,10 @@ void InitFramework (int *argc, char *argv[]) glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutCreateWindow (argv[0]); +#ifndef GL_ARB_multitexture GETPROCADDR(glClientActiveTextureARB, PFNGLCLIENTACTIVETEXTUREARBPROC); GETPROCADDR(glMultiTexCoord4fvARB, PFNGLMULTITEXCOORD4FVARBPROC); +#endif GETPROCADDR(glDeleteObjectARB, PFNGLDELETEOBJECTARBPROC); GETPROCADDR(glGetHandleARB, PFNGLGETHANDLEARBPROC); @@ -100,9 +104,6 @@ void InitFramework (int *argc, char *argv[]) InitScene (); - /*glutReshapeFunc (Reshape); - glutKeyboardFunc (Key); - glutSpecialFunc (SpecialKey);*/ glutDisplayFunc (Display); glutIdleFunc (Idle); glutMainLoop (); diff --git a/progs/slang/framework.h b/progs/slang/framework.h index fe1c4cb..e023f7d 100644 --- a/progs/slang/framework.h +++ b/progs/slang/framework.h @@ -6,9 +6,10 @@ #include #endif -#include #include #include +#include +#include #include #include #include @@ -25,8 +26,10 @@ /* * GL_ARB_multitexture */ +#ifndef GL_ARB_multitexture extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB; extern PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB; +#endif /* * GL_ARB_shader_objects @@ -68,12 +71,12 @@ extern PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT; extern PFNGLSECONDARYCOLOR3FVEXTPROC glSecondaryColor3fvEXT; extern PFNGLSECONDARYCOLORPOINTEREXTPROC glSecondaryColorPointerEXT; -void InitFramework (int *argc, char *argv[]); +extern void InitFramework (int *argc, char *argv[]); extern void InitScene (void); extern void RenderScene (void); -GLboolean CheckObjectStatus (GLhandleARB); +extern GLboolean CheckObjectStatus (GLhandleARB); #endif diff --git a/progs/slang/vstest.c b/progs/slang/vstest.c index 95d2ed6..e31f3b1 100644 --- a/progs/slang/vstest.c +++ b/progs/slang/vstest.c @@ -210,7 +210,7 @@ static void dl_end () static void load_test_file (const char *filename) { FILE *f; - long size; + GLint size; char *code; GLint i; @@ -230,7 +230,7 @@ static void load_test_file (const char *filename) size = fread (code, 1, size, f); fclose (f); - glShaderSourceARB (vert, 1, &code, &size); + glShaderSourceARB (vert, 1, (const GLcharARB **) (&code), &size); glCompileShaderARB (vert); if (!CheckObjectStatus (vert)) exit (0); diff --git a/progs/slang/vstest.txt b/progs/slang/vstest.txt index ac4fceb..b049f42 100644 --- a/progs/slang/vstest.txt +++ b/progs/slang/vstest.txt @@ -1,68 +1,68 @@ -/* - * Vertex shader test. - * Uses all conventional attributes and 15 generic attributes to print - * their values, using printMESA() extension function, to the debugger - * to compare them with the actual passed-in values. - * Use different types for generic attributes to check matrix handling. - * - * Author: Michal Krol - */ - -#version 110 - -//#extension MESA_shader_debug: require - -attribute vec4 Attribute1; -attribute vec4 Attribute2; -attribute vec4 Attribute3; -attribute float Attribute4; -attribute vec2 Attribute5; -attribute vec3 Attribute6; -attribute mat2 Attribute7; -attribute mat3 Attribute9; -attribute mat4 Attribute12; - -void main () -{ - // - // Do some legal stuff. - // - gl_Position = gl_ModelViewMatrix * gl_Vertex; - gl_FrontColor = vec4 (1.0); - - // - // Conventional attributes - except for gl_Vertex. - // - printMESA (gl_Color); - printMESA (gl_SecondaryColor); - printMESA (gl_Normal); - printMESA (gl_MultiTexCoord0); - printMESA (gl_MultiTexCoord1); - printMESA (gl_MultiTexCoord2); - printMESA (gl_MultiTexCoord3); - printMESA (gl_MultiTexCoord4); - printMESA (gl_MultiTexCoord5); - printMESA (gl_MultiTexCoord6); - printMESA (gl_MultiTexCoord7); - printMESA (gl_FogCoord); - - // - // Generic attributes - attrib with index 0 is not used because it would - // alias with gl_Vertex, which is not allowed. - // - printMESA (Attribute1); - printMESA (Attribute2); - printMESA (Attribute3); - printMESA (Attribute4); - printMESA (Attribute5); - printMESA (Attribute6); - printMESA (Attribute7); - printMESA (Attribute9); - printMESA (Attribute12); - - // - // Vertex position goes last. - // - printMESA (gl_Vertex); -} - +/* + * Vertex shader test. + * Uses all conventional attributes and 15 generic attributes to print + * their values, using printMESA() extension function, to the debugger + * to compare them with the actual passed-in values. + * Use different types for generic attributes to check matrix handling. + * + * Author: Michal Krol + */ + +#version 110 + +//#extension MESA_shader_debug: require + +attribute vec4 Attribute1; +attribute vec4 Attribute2; +attribute vec4 Attribute3; +attribute float Attribute4; +attribute vec2 Attribute5; +attribute vec3 Attribute6; +attribute mat2 Attribute7; +attribute mat3 Attribute9; +attribute mat4 Attribute12; + +void main () +{ + // + // Do some legal stuff. + // + gl_Position = gl_ModelViewMatrix * gl_Vertex; + gl_FrontColor = vec4 (1.0); + + // + // Conventional attributes - except for gl_Vertex. + // + printMESA (gl_Color); + printMESA (gl_SecondaryColor); + printMESA (gl_Normal); + printMESA (gl_MultiTexCoord0); + printMESA (gl_MultiTexCoord1); + printMESA (gl_MultiTexCoord2); + printMESA (gl_MultiTexCoord3); + printMESA (gl_MultiTexCoord4); + printMESA (gl_MultiTexCoord5); + printMESA (gl_MultiTexCoord6); + printMESA (gl_MultiTexCoord7); + printMESA (gl_FogCoord); + + // + // Generic attributes - attrib with index 0 is not used because it would + // alias with gl_Vertex, which is not allowed. + // + printMESA (Attribute1); + printMESA (Attribute2); + printMESA (Attribute3); + printMESA (Attribute4); + printMESA (Attribute5); + printMESA (Attribute6); + printMESA (Attribute7); + printMESA (Attribute9); + printMESA (Attribute12); + + // + // Vertex position goes last. + // + printMESA (gl_Vertex); +} + -- cgit v1.1