diff options
Diffstat (limited to 'tests/spec/glsl-es-1.00')
618 files changed, 38572 insertions, 0 deletions
diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bool.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bool.vert new file mode 100644 index 00000000..fb8d655e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bool.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(bool(0), bool(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec2.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec2.vert new file mode 100644 index 00000000..3ec5fadc --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec2.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(bvec2(0), bvec2(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec3.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec3.vert new file mode 100644 index 00000000..25c7e677 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec3.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(bvec3(0), bvec3(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec4.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec4.vert new file mode 100644 index 00000000..2aa4cfe0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-bvec4.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(bvec4(0), bvec4(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-float.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-float.vert new file mode 100644 index 00000000..f7632cee --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-float.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(float(0), float(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-int.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-int.vert new file mode 100644 index 00000000..e2bb80ac --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-int.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(int(0), int(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-invalid-parameters.sh b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-invalid-parameters.sh new file mode 100755 index 00000000..e9ffae9a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-invalid-parameters.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +function emit_vs +{ + t=$1 + + cat > outerProduct-$t.vert <<EOF +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(${t}(0), ${t}(0)); +} +EOF +} + +for i in int float bool bvec2 bvec3 bvec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 +do + emit_vs $i +done diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2.vert new file mode 100644 index 00000000..09d06bb7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat2(0), mat2(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x2.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x2.vert new file mode 100644 index 00000000..94921f70 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x2.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat2x2(0), mat2x2(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x3.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x3.vert new file mode 100644 index 00000000..f55e8876 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x3.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat2x3(0), mat2x3(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x4.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x4.vert new file mode 100644 index 00000000..9620135a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat2x4.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat2x4(0), mat2x4(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3.vert new file mode 100644 index 00000000..8eb8f991 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat3(0), mat3(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x2.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x2.vert new file mode 100644 index 00000000..a2c23355 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x2.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat3x2(0), mat3x2(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x3.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x3.vert new file mode 100644 index 00000000..fbfd900f --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x3.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat3x3(0), mat3x3(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x4.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x4.vert new file mode 100644 index 00000000..a31db9e8 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat3x4.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat3x4(0), mat3x4(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4.vert new file mode 100644 index 00000000..4fa6c07a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat4(0), mat4(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x2.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x2.vert new file mode 100644 index 00000000..2ca45390 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x2.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat4x2(0), mat4x2(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x3.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x3.vert new file mode 100644 index 00000000..e45e5f90 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x3.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat4x3(0), mat4x3(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x4.vert b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x4.vert new file mode 100644 index 00000000..e63a8a5e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/built-in-functions/outerProduct-mat4x4.vert @@ -0,0 +1,10 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ +void main () { + gl_Position = vec4(0); + outerProduct(mat4x4(0), mat4x4(0)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/clipping/clip-distance-unavailable.frag b/tests/spec/glsl-es-1.00/compiler/clipping/clip-distance-unavailable.frag new file mode 100644 index 00000000..e72eb045 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/clipping/clip-distance-unavailable.frag @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * check_link: true + * [end config] + * + * This test verifies that the fragment shader special variable + * gl_ClipDistance (defined in GLSL 1.30) is not available when the + * GLSL version is 1.20. + */ + +varying float gl_ClipDistance[2]; + +void main() +{ +} diff --git a/tests/spec/glsl-es-1.00/compiler/clipping/clip-distance-unavailable.vert b/tests/spec/glsl-es-1.00/compiler/clipping/clip-distance-unavailable.vert new file mode 100644 index 00000000..108f9122 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/clipping/clip-distance-unavailable.vert @@ -0,0 +1,18 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * check_link: true + * [end config] + * + * This test verifies that the vertex shader special variable + * gl_ClipDistance (defined in GLSL 1.30) is not available when the + * GLSL version is 1.20. + */ + +varying float gl_ClipDistance[2]; + +void main() +{ + gl_Position = vec4(0.0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-attribute-01.vert b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-attribute-01.vert new file mode 100644 index 00000000..7ebd324a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-attribute-01.vert @@ -0,0 +1,17 @@ +// [config] +// expect_result: fail +// glsl_version: 1.20 +// glsles_version: 1.00 +// [end config] +// +// From section 4.3.4 of the GLSL 1.20 spec: +// Attribute variables are read-only as far as the vertex shader is +// concerned. + + +attribute float x; + +float f() { + x = 0.0; + return x; +} diff --git a/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-attribute-02.vert b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-attribute-02.vert new file mode 100644 index 00000000..1182d7ce --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-attribute-02.vert @@ -0,0 +1,19 @@ +// [config] +// expect_result: fail +// glsl_version: 1.20 +// glsles_version: 1.00 +// [end config] +// +// From section 4.3.4 of the GLSL 1.20 spec: +// Attribute variables are read-only as far as the vertex shader is +// concerned. + +attribute float x; + +void f(out float y) { + y = 0.0; +} + +void g() { + f(x); +} diff --git a/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-point-coord.frag b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-point-coord.frag new file mode 100644 index 00000000..b909f94b --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-point-coord.frag @@ -0,0 +1,18 @@ +// [config] +// expect_result: fail +// glsl_version: 1.20 +// glsles_version: 1.00 +// [end config] +// +// From section 4.3.6 of the GLSL 1.20 spec: +// A fragment shader can not write to a varying variable. +// +// From section 7.6 of the GLSL 1.20 spec: +// The following varying variables are available to read from in a fragment shader. +// ... +// varying vec2 gl_PointCoord; + + +void g() { + gl_PointCoord = vec2(0.0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-varying-01.frag b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-varying-01.frag new file mode 100644 index 00000000..c2f320ce --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-varying-01.frag @@ -0,0 +1,14 @@ +// [config] +// expect_result: fail +// glsl_version: 1.20 +// glsles_version: 1.00 +// [end config] +// +// From section 4.3.6 of the GLSL 1.20 spec: +// A fragment shader can not write to a varying variable. + +varying float x; + +void g() { + x = 0.0; +} diff --git a/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-varying-02.frag b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-varying-02.frag new file mode 100644 index 00000000..1907ba04 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/storage-qualifiers/static-write-varying-02.frag @@ -0,0 +1,19 @@ +// [config] +// expect_result: fail +// glsl_version: 1.20 +// glsles_version: 1.00 +// [end config] +// +// From section 4.3.6 of the GLSL 1.20 spec: +// A fragment shader can not write to a varying variable. + + +varying float x; + +void f(out float y) { + y = 0.0; +} + +void g() { + f(x); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-add.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-add.vert new file mode 100644 index 00000000..0ed5a818 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-add.vert @@ -0,0 +1,26 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + vec4 c[2] = a + b; + gl_Position = c[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bool-float.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bool-float.vert new file mode 100644 index 00000000..06a298e0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bool-float.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bool a[2]; + +void main() +{ + float b[2]; + b = a; + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bool-int.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bool-int.vert new file mode 100644 index 00000000..be1d8beb --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bool-int.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bool a[2]; + +void main() +{ + int b[2]; + b = a; + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec2-ivec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec2-ivec2.vert new file mode 100644 index 00000000..cda2e5d9 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec2-ivec2.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bvec2 a[2]; + +void main() +{ + ivec2 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec2-vec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec2-vec2.vert new file mode 100644 index 00000000..97ad3887 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec2-vec2.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bvec2 a[2]; + +void main() +{ + vec2 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec3-ivec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec3-ivec3.vert new file mode 100644 index 00000000..f192fbf3 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec3-ivec3.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bvec3 a[2]; + +void main() +{ + ivec3 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec3-vec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec3-vec3.vert new file mode 100644 index 00000000..26ea54ae --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec3-vec3.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bvec3 a[2]; + +void main() +{ + vec3 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec4-ivec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec4-ivec4.vert new file mode 100644 index 00000000..c3e2a29e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec4-ivec4.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bvec4 a[2]; + +void main() +{ + ivec4 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec4-vec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec4-vec4.vert new file mode 100644 index 00000000..35e891be --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-bvec4-vec4.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform bvec4 a[2]; + +void main() +{ + vec4 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-float-bool.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-float-bool.vert new file mode 100644 index 00000000..028c8458 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-float-bool.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform float a[2]; + +void main() +{ + bool b[2]; + b = a; + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-float-int.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-float-int.vert new file mode 100644 index 00000000..7a00b1a6 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-float-int.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform float a[2]; + +void main() +{ + int b[2]; + b = a; + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-int-bool.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-int-bool.vert new file mode 100644 index 00000000..5bbe87eb --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-int-bool.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform int a[2]; + +void main() +{ + bool b[2]; + b = a; + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-int-float.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-int-float.vert new file mode 100644 index 00000000..dfc4846e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-int-float.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform int a[2]; + +void main() +{ + float b[2]; + b = a; + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec2-bvec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec2-bvec2.vert new file mode 100644 index 00000000..5483a5c6 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec2-bvec2.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform ivec2 a[2]; + +void main() +{ + bvec2 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec2-vec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec2-vec2.vert new file mode 100644 index 00000000..93aaf4fc --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec2-vec2.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform ivec2 a[2]; + +void main() +{ + vec2 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec3-bvec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec3-bvec3.vert new file mode 100644 index 00000000..a2816323 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec3-bvec3.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform ivec3 a[2]; + +void main() +{ + bvec3 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec3-vec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec3-vec3.vert new file mode 100644 index 00000000..7dfbcf94 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec3-vec3.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform ivec3 a[2]; + +void main() +{ + vec3 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec4-bvec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec4-bvec4.vert new file mode 100644 index 00000000..d5320891 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec4-bvec4.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform ivec4 a[2]; + +void main() +{ + bvec4 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec4-vec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec4-vec4.vert new file mode 100644 index 00000000..e05cefbf --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-ivec4-vec4.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform ivec4 a[2]; + +void main() +{ + vec4 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec2-bvec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec2-bvec2.vert new file mode 100644 index 00000000..4123c104 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec2-bvec2.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform vec2 a[2]; + +void main() +{ + bvec2 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec2-ivec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec2-ivec2.vert new file mode 100644 index 00000000..b8e00e14 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec2-ivec2.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform vec2 a[2]; + +void main() +{ + ivec2 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec3-bvec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec3-bvec3.vert new file mode 100644 index 00000000..f4743515 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec3-bvec3.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform vec3 a[2]; + +void main() +{ + bvec3 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec3-ivec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec3-ivec3.vert new file mode 100644 index 00000000..34763c18 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec3-ivec3.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform vec3 a[2]; + +void main() +{ + ivec3 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec4-bvec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec4-bvec4.vert new file mode 100644 index 00000000..9f2248ac --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec4-bvec4.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform vec4 a[2]; + +void main() +{ + bvec4 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec4-ivec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec4-ivec4.vert new file mode 100644 index 00000000..5fb50015 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-conversion-vec4-ivec4.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float." + */ + + +uniform vec4 a[2]; + +void main() +{ + ivec4 b[2]; + b = a; + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-size.vert new file mode 100644 index 00000000..b0f96886 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign-implicit-size.vert @@ -0,0 +1,23 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "However, implicitly sized arrays cannot be assigned to. Note, this is + * a rare case that initializers and assignments appear to have different + * semantics." + */ + + +uniform float a[5]; + +void main() +{ + float b[]; + b = a; + + gl_Position = vec4(0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign.vert new file mode 100644 index 00000000..ea43f565 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-assign.vert @@ -0,0 +1,30 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +void main() +{ + vec4 a[2]; + vec4 b[2]; + vec4 c[2]; + + a = vec4[2](vec4(0.0), vec4(2.0)); + b = vec4[ ](vec4(0.5), vec4(2.0)); + c = a; + + gl_Position = a[0] + b[0] + c[1]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-attribute.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-attribute.vert new file mode 100644 index 00000000..9e5adcd8 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-attribute.vert @@ -0,0 +1,19 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 23 (page 29 of the PDF) of the GLSL 1.20 spec: + * + * "Attribute variables cannot be declared as arrays or structures." + */ + + +attribute vec4 a[2] +uniform int i; + +void main() +{ + gl_Position = a[i]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-implicit-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-implicit-size.vert new file mode 100644 index 00000000..cb059a8d --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-implicit-size.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "If an array is indexed with an expression that is not an integral + * constant expression, or if an array is passed as an argument to a + * function, then its size must be declared before any such use." + */ + + +/* Assume the array is sized in a different compilation unit. + */ +vec4 [] an_array; + +void main() +{ + gl_Position = an_array[2]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-negative.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-negative.vert new file mode 100644 index 00000000..57adef39 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-negative.vert @@ -0,0 +1,19 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "It is also illegal to index an array with a negative constant + * expression." + */ + + +uniform vec4 [6] an_array; + +void main() +{ + gl_Position = an_array[-1]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-too-large.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-too-large.vert new file mode 100644 index 00000000..edd6dd02 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-constant-index-too-large.vert @@ -0,0 +1,20 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "It is illegal to declare an array with a size, and then later (in the + * same shader) index the same array with an integral constant expression + * greater than or equal to the declared size." + */ + + +uniform vec4 [6] an_array; + +void main() +{ + gl_Position = an_array[6]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bool-float.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bool-float.vert new file mode 100644 index 00000000..b9897b04 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bool-float.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bool a[2]; + +void main() +{ + float b[2] = float[](a[0], a[1]); + + gl_Position = vec4(b[0]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bool-int.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bool-int.vert new file mode 100644 index 00000000..6756e5df --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bool-int.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bool a[2]; + +void main() +{ + int b[2] = int[](a[0], a[1]); + + gl_Position = vec4(b[0]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec2-ivec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec2-ivec2.vert new file mode 100644 index 00000000..e6acb50a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec2-ivec2.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bvec2 a[2]; + +void main() +{ + ivec2 b[2] = ivec2[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec2-vec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec2-vec2.vert new file mode 100644 index 00000000..8c7547af --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec2-vec2.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bvec2 a[2]; + +void main() +{ + vec2 b[2] = vec2[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec3-ivec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec3-ivec3.vert new file mode 100644 index 00000000..c35b80ca --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec3-ivec3.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bvec3 a[2]; + +void main() +{ + ivec3 b[2] = ivec3[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec3-vec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec3-vec3.vert new file mode 100644 index 00000000..f30cda7f --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec3-vec3.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bvec3 a[2]; + +void main() +{ + vec3 b[2] = vec3[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec4-ivec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec4-ivec4.vert new file mode 100644 index 00000000..dca751bd --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec4-ivec4.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bvec4 a[2]; + +void main() +{ + ivec4 b[2] = ivec4[](a[0], a[1]); + + gl_Position = vec4(b[0]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec4-vec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec4-vec4.vert new file mode 100644 index 00000000..d518d646 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-bvec4-vec4.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform bvec4 a[2]; + +void main() +{ + vec4 b[2] = vec4[](a[0], a[1]); + + gl_Position = b[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-float-bool.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-float-bool.vert new file mode 100644 index 00000000..908b60ea --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-float-bool.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform float a[2]; + +void main() +{ + bool b[2] = bool[](a[0], a[0]); + + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-float-int.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-float-int.vert new file mode 100644 index 00000000..b1930b28 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-float-int.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform float a[2]; + +void main() +{ + int b[2] = int[](a[0], a[0]); + + gl_Position = vec4(b[0], b[0], b[1], b[1]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-int-bool.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-int-bool.vert new file mode 100644 index 00000000..1431ea07 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-int-bool.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform int a[2]; + +void main() +{ + bool b[2] = bool[](a[0], a[1]); + + gl_Position = vec4(b[0]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-int-float.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-int-float.vert new file mode 100644 index 00000000..be076126 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-int-float.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform int a[2]; + +void main() +{ + float b[2] = float[](a[0], a[1]); + + gl_Position = vec4(b[0]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec2-bvec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec2-bvec2.vert new file mode 100644 index 00000000..cdb1b7be --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec2-bvec2.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform ivec2 a[2]; + +void main() +{ + bvec2 b[2] = bvec2[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec2-vec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec2-vec2.vert new file mode 100644 index 00000000..027577f3 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec2-vec2.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform ivec2 a[2]; + +void main() +{ + vec2 b[2] = vec2[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec3-bvec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec3-bvec3.vert new file mode 100644 index 00000000..20fc85b6 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec3-bvec3.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform ivec3 a[2]; + +void main() +{ + bvec3 b[2] = bvec3[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec3-vec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec3-vec3.vert new file mode 100644 index 00000000..0653d3c2 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec3-vec3.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform ivec3 a[2]; + +void main() +{ + vec3 b[2] = vec3[](a[0], a[1]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec4-bvec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec4-bvec4.vert new file mode 100644 index 00000000..81a012ef --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec4-bvec4.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform ivec4 a[2]; + +void main() +{ + bvec4 b[2] = bvec4[](a[0], a[1]); + + gl_Position = vec4(b[0]); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec4-vec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec4-vec4.vert new file mode 100644 index 00000000..a61446e2 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-ivec4-vec4.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform ivec4 a[2]; + +void main() +{ + vec4 b[2] = vec4[](a[0], a[1]); + + gl_Position = b[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec2-bvec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec2-bvec2.vert new file mode 100644 index 00000000..374b80bd --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec2-bvec2.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform vec2 a[2]; + +void main() +{ + bvec2 b[2] = bvec2[](a[0], a[0]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec2-ivec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec2-ivec2.vert new file mode 100644 index 00000000..9d102d7a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec2-ivec2.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform vec2 a[2]; + +void main() +{ + ivec2 b[2] = ivec2[](a[0], a[0]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec3-bvec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec3-bvec3.vert new file mode 100644 index 00000000..991471d6 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec3-bvec3.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform vec3 a[2]; + +void main() +{ + bvec3 b[2] = bvec3[](a[0], a[0]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec3-ivec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec3-ivec3.vert new file mode 100644 index 00000000..2a62ea71 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec3-ivec3.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform vec3 a[2]; + +void main() +{ + ivec3 b[2] = ivec3[](a[0], a[0]); + + gl_Position = vec4(b[0].x, b[0].y, b[1].x, b[1].y); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec4-bvec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec4-bvec4.vert new file mode 100644 index 00000000..90efda56 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec4-bvec4.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform vec4 a[2]; + +void main() +{ + bvec4 b[2] = bvec4[](a[0], a[0]); + + gl_Position = vec4(b[0].x, b[0].y, b[0].z, b[0].w); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec4-ivec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec4-ivec4.vert new file mode 100644 index 00000000..513f9022 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-implicit-conversion-vec4-ivec4.vert @@ -0,0 +1,37 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4 + * + * There are no implicit array or structure conversions. For example, an + * array of int cannot be implicitly converted to an array of float. When + * an implicit conversion is done, it is not just a re-interpretation of + * the expression's value, but a conversion of that value to an equivalent + * value in the new type. For example, the integer value 5 will be + * converted to the floating-point value 5.0. The conversions in the + * table above are done only as indicated by other sections of this + * specification." + */ + + +uniform vec4 a[2]; + +void main() +{ + ivec4 b[2] = ivec4[](a[0], a[0]); + + gl_Position = vec4(b[0].x, b[0].y, b[0].z, b[0].w); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-mismatched-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-mismatched-size.vert new file mode 100644 index 00000000..fd78eed7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor-mismatched-size.vert @@ -0,0 +1,16 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 33 (page 39 of the PDF) of the GLSL 1.20 spec: + * + * "There must be exactly the same number of arguments as the size of the + * array being constructed." + */ + + +vec4 a[] = vec4[2](vec4(0.0), vec4(1.0), vec4(2.0)); + +void main() { gl_Position = a[0]; } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor.vert new file mode 100644 index 00000000..ec0ff82a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-ctor.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "Arrays can have initializers formed from array constructors:" + */ + + +vec4 a[2] = vec4[2](vec4(0.0), vec4(2.0)); +vec4 b[2] = vec4[ ](vec4(0.5), vec4(2.0)); +vec4 c[ ] = vec4[ ](vec4(1.0), vec4(2.0)); + +void main() { gl_Position = a[0] + b[0] + c[0]; } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-divide.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-divide.vert new file mode 100644 index 00000000..14144c46 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-divide.vert @@ -0,0 +1,26 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + vec4 c[2] = a / b; + gl_Position = c[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-implicit-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-implicit-size.vert new file mode 100644 index 00000000..39b32e62 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-implicit-size.vert @@ -0,0 +1,28 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + vec4 c[]; + + // Implicitly size c to match a and b. + c[0] = b[0]; + c[1] = b[1]; + + gl_Position = vec4(a == c); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-matrix.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-matrix.vert new file mode 100644 index 00000000..d1076632 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-matrix.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[4]; +uniform mat4 b; + +void main() +{ + gl_Position = vec4(a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-mismatched-base-type.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-mismatched-base-type.vert new file mode 100644 index 00000000..214dcfa5 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-mismatched-base-type.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec3 b[2]; // Note the differing base type + +void main() +{ + gl_Position = vec4(a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-mismatched-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-mismatched-size.vert new file mode 100644 index 00000000..025de07c --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-mismatched-size.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec4 b[3]; // Note the differing size + +void main() +{ + gl_Position = vec4(a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-vector.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-vector.vert new file mode 100644 index 00000000..a9808810 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal-vector.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform float a[4]; +uniform vec4 b; + +void main() +{ + gl_Position = vec4(a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal.vert new file mode 100644 index 00000000..a6ee2822 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-equal.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-parameter-implicit-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-parameter-implicit-size.vert new file mode 100644 index 00000000..e9a065e2 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-parameter-implicit-size.vert @@ -0,0 +1,29 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "If an array is indexed with an expression that is not an integral + * constant expression, or if an array is passed as an argument to a + * function, then its size must be declared before any such use." + */ + + +float a_function(vec4[6]); + +void main() +{ + vec4 [] an_array; + + an_array[0] = vec4(0); + an_array[1] = vec4(1); + an_array[2] = vec4(2); + an_array[3] = vec4(3); + an_array[4] = vec4(4); + an_array[5] = vec4(5); + + gl_Position = vec4(a_function(an_array)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-parameter-unsized.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-parameter-unsized.vert new file mode 100644 index 00000000..b8135ca7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-parameter-unsized.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Arrays declared as formal parameters in a function declaration + * must specify a size." + */ + + +vec4 a_function(vec4 [] p); + +uniform vec4 [6] an_array; + +void main() +{ + gl_Position = a_function(an_array); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-return-unsized.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-return-unsized.vert new file mode 100644 index 00000000..9acba275 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-return-unsized.vert @@ -0,0 +1,31 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "This type can be used anywhere any other type can be used, including + * as the return value from a function + * + * float[5] foo() { } + * + * as a constructor of an array + * + * float[5](3.4, 4.2, 5.0, 5.2, 1.1) + * + * as an unnamed parameter + * + * void foo(float[5])" + */ + + +vec4[] a_function(vec4 [6] p); + +uniform vec4 [6] an_array; + +void main() +{ + gl_Position = a_function(an_array)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-return.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-return.vert new file mode 100644 index 00000000..cc58f9fb --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-function-return.vert @@ -0,0 +1,31 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "This type can be used anywhere any other type can be used, including + * as the return value from a function + * + * float[5] foo() { } + * + * as a constructor of an array + * + * float[5](3.4, 4.2, 5.0, 5.2, 1.1) + * + * as an unnamed parameter + * + * void foo(float[5])" + */ + + +vec4[2] a_function(vec4 [6]); + +uniform vec4 [6] an_array; + +void main() +{ + gl_Position = a_function(an_array)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-greater-equal.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-greater-equal.vert new file mode 100644 index 00000000..464208cc --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-greater-equal.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a >= b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-greater.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-greater.vert new file mode 100644 index 00000000..fbc3019d --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-greater.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a > b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length-implicit-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length-implicit-size.vert new file mode 100644 index 00000000..b5bafa75 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length-implicit-size.vert @@ -0,0 +1,21 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "The length method cannot be called on an array that has not been + * explicitly sized." + */ + + +void main() +{ + float b[]; + + b[2] = 1.0; // Implicitly size array to have at least 3 elements + + gl_Position = vec4(b.length()); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length-with-argument.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length-with-argument.vert new file mode 100644 index 00000000..2096ae5c --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length-with-argument.vert @@ -0,0 +1,14 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + */ + + +uniform vec4 a[2]; + +void main() +{ + gl_Position = vec4(a.length(5)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length.vert new file mode 100644 index 00000000..3399b199 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-length.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "Arrays know the number of elements they contain. This can be obtained + * by using the length method: + * + * a.length(); // returns 5 for the above declarations + * + * The length method cannot be called on an array that has not been + * explicitly sized." + */ + + +uniform vec4 a[2]; + +void main() +{ + gl_Position = vec4(a.length()); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-less-equal.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-less-equal.vert new file mode 100644 index 00000000..803d539f --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-less-equal.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a <= b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-less.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-less.vert new file mode 100644 index 00000000..2f54c746 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-less.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a < b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-and.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-and.vert new file mode 100644 index 00000000..f14211a9 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-and.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a && b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-not.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-not.vert new file mode 100644 index 00000000..85800965 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-not.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(!a); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-or.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-or.vert new file mode 100644 index 00000000..fd22520a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-or.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a || b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-xor.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-xor.vert new file mode 100644 index 00000000..64ebe544 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-logical-xor.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a ^^ b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multidimensional-new-syntax.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multidimensional-new-syntax.vert new file mode 100644 index 00000000..7e113883 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multidimensional-new-syntax.vert @@ -0,0 +1,18 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +uniform vec4 [1] an_array[1]; + +void main() +{ + gl_Position = an_array[0][0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multidimensional.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multidimensional.vert new file mode 100644 index 00000000..984d29c9 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multidimensional.vert @@ -0,0 +1,18 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +uniform vec4 an_array[1][1]; + +void main() +{ + gl_Position = an_array[0][0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multiply.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multiply.vert new file mode 100644 index 00000000..1c33f777 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-multiply.vert @@ -0,0 +1,26 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + vec4 c[2] = a * b; + gl_Position = c[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-negate.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-negate.vert new file mode 100644 index 00000000..567b3d35 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-negate.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(-a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-implicit-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-implicit-size.vert new file mode 100644 index 00000000..4f522e36 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-implicit-size.vert @@ -0,0 +1,28 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + vec4 c[]; + + // Implicitly size c to match a and b. + c[0] = b[0]; + c[1] = b[2]; + + gl_Position = vec4(a != c); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-matrix.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-matrix.vert new file mode 100644 index 00000000..88bda2ae --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-matrix.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[4]; +uniform mat4 b; + +void main() +{ + gl_Position = vec4(a != b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-mismatched-base-type.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-mismatched-base-type.vert new file mode 100644 index 00000000..fb771112 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-mismatched-base-type.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec3 b[2]; // Note the differing base type + +void main() +{ + gl_Position = vec4(a != b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-mismatched-size.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-mismatched-size.vert new file mode 100644 index 00000000..b709902e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-mismatched-size.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec4 b[3]; // Note the differing size + +void main() +{ + gl_Position = vec4(a != b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-vertor.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-vertor.vert new file mode 100644 index 00000000..e7a3f07f --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal-vertor.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform float a[4]; +uniform vec4 b; + +void main() +{ + gl_Position = vec4(a != b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal.vert new file mode 100644 index 00000000..2e57da5e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-not-equal.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "The equality operators and assignment operator are only allowed if the + * two operands are same size and type....Both array operands must be + * explicitly sized. When using the equality operators ... two arrays are + * equal if and only if all the elements are element-wise equal. + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(a != b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-any-type.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-any-type.vert new file mode 100644 index 00000000..4b16a87a --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-any-type.vert @@ -0,0 +1,44 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "All basic types and structures can be formed into arrays." + */ + + +uniform float array01[1]; +uniform int array02[1]; +uniform bool array03[1]; +uniform vec2 array04[1]; +uniform vec3 array05[1]; +uniform vec4 array06[1]; +uniform ivec2 array07[1]; +uniform ivec3 array08[1]; +uniform ivec4 array09[1]; +uniform bvec2 array10[1]; +uniform bvec3 array11[1]; +uniform bvec4 array12[1]; +uniform mat2 array13[1]; +uniform mat2x2 array14[1]; +uniform mat2x3 array15[1]; +uniform mat2x4 array16[1]; +uniform mat3 array17[1]; +uniform mat3x2 array18[1]; +uniform mat3x3 array19[1]; +uniform mat3x4 array20[1]; +uniform mat4 array21[1]; +uniform mat4x2 array22[1]; +uniform mat4x3 array23[1]; +uniform mat4x4 array24[1]; +uniform sampler1D array25[1]; +uniform sampler2D array26[1]; +uniform sampler3D array27[1]; +uniform samplerCube array28[1]; +uniform sampler1DShadow array29[1]; +uniform sampler2DShadow array30[1]; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-declaration.frag b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-declaration.frag new file mode 100644 index 00000000..b911f730 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-declaration.frag @@ -0,0 +1,20 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +attribute vec4 vert; + +void foo(vec4 [2] x[2]); + +void main() +{ + gl_FragData[0] = vec4(0.0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-declaration.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-declaration.vert new file mode 100644 index 00000000..b32216cd --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-declaration.vert @@ -0,0 +1,20 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +attribute vec4 vert; + +void foo(vec4 [2] x[2]); + +void main() +{ + gl_Position = vert; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-definition.frag b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-definition.frag new file mode 100644 index 00000000..cc07075b --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-definition.frag @@ -0,0 +1,23 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +attribute vec4 vert; + +void foo(vec4 [2] x[2]) +{ + gl_Position = vert; +} + +void main() +{ + gl_FragData[0] = vec4(0.0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-definition.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-definition.vert new file mode 100644 index 00000000..6c12fda1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-function-parameter-definition.vert @@ -0,0 +1,23 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +attribute vec4 vert; + +void foo(vec4 [2] x[2]) +{ + gl_Position = vert; +} + +void main() +{ + gl_Position = vert; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-structure-field.frag b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-structure-field.frag new file mode 100644 index 00000000..6eb9aebc --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-structure-field.frag @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +attribute vec4 vert; + +struct S { + vec4 [2] x[2]; +}; + +void main() +{ + gl_FragData[0] = vec4(0.0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-structure-field.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-structure-field.vert new file mode 100644 index 00000000..9b884f50 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-array-structure-field.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "Only one-dimensional arrays may be declared." + */ + + +attribute vec4 vert; + +struct S { + vec4 [2] x[2]; +}; + +void main() +{ + gl_Position = vert; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-struct-of-array.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-struct-of-array.vert new file mode 100644 index 00000000..1bf190d2 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-struct-of-array.vert @@ -0,0 +1,28 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 18 (page 24 of the PDF) of the GLSL 1.20 spec: + * + * "Member declarators can contain arrays. Such arrays must have a size + * specified, and the size must be an integral constant expression that's + * greater than zero (see Section 4.3.3 "Constant Expressions")." + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "All basic types and structures can be formed into arrays." + */ + + +struct s { + float x[3]; + int y; +}; + +void main() +{ + s a[2]; + gl_Position = vec4(a.length() + a.x.length()); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-struct.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-struct.vert new file mode 100644 index 00000000..077f18cd --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-of-struct.vert @@ -0,0 +1,22 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "All basic types and structures can be formed into arrays." + */ + + +struct s { + float x; + int y; +}; + +void main() +{ + s a[2]; + gl_Position = vec4(a.length()); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-positive.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-positive.vert new file mode 100644 index 00000000..b1ff7e4e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-positive.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = vec4(+a == b); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-postdecrement.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-postdecrement.vert new file mode 100644 index 00000000..37b9ac6f --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-postdecrement.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; + +void main() +{ + gl_Position = (a--)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-postincrement.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-postincrement.vert new file mode 100644 index 00000000..16d096ad --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-postincrement.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; + +void main() +{ + gl_Position = (a++)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-predecrement.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-predecrement.vert new file mode 100644 index 00000000..c9e221f4 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-predecrement.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; + +void main() +{ + gl_Position = (--a)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-preincrement.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-preincrement.vert new file mode 100644 index 00000000..dba841e1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-preincrement.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; + +void main() +{ + gl_Position = (++a)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-01.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-01.vert new file mode 100644 index 00000000..1bc0ebff --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-01.vert @@ -0,0 +1,31 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "It is legal to declare an array without a size and then later + * re-declare the same name as an array of the same type and specify a + * size." + */ + + +float a_function(vec4[6]); + +void main() +{ + vec4 [] an_array; + + an_array[0] = vec4(0); + an_array[1] = vec4(1); + an_array[2] = vec4(2); + an_array[3] = vec4(3); + an_array[4] = vec4(4); + an_array[5] = vec4(5); + + vec4 [6] an_array; + + gl_Position = vec4(a_function(an_array)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-initializer.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-initializer.vert new file mode 100644 index 00000000..d0b86dcd --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-initializer.vert @@ -0,0 +1,28 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "It is legal to declare an array without a size and then later + * re-declare the same name as an array of the same type and specify a + * size." + */ + + +float a_function(float[3]); + +void main() +{ + float [] an_array; + + an_array[0] = 0.0; + an_array[1] = 1.0; + an_array[2] = 2.0; + + float [] an_array = float[](2.0, 1.0, 0.0); + + gl_Position = vec4(a_function(an_array)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-too-small.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-too-small.vert new file mode 100644 index 00000000..970a250c --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-too-small.vert @@ -0,0 +1,28 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "It is legal to declare an array without a size and then later + * re-declare the same name as an array of the same type and specify a + * size." + */ + + +float a_function(float[2]); + +void main() +{ + float [] an_array; + + an_array[0] = 0.0; + an_array[1] = 1.0; + an_array[2] = 2.0; + + float [2] an_array; + + gl_Position = vec4(a_function(an_array)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-wrong-base-type.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-wrong-base-type.vert new file mode 100644 index 00000000..2998e4d2 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-redeclaration-wrong-base-type.vert @@ -0,0 +1,29 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "It is legal to declare an array without a size and then later + * re-declare the same name as an array of the same type and specify a + * size." + */ + + +float a_function(float[3]); +float a_function(vec4[3]); + +void main() +{ + float [] an_array; + + an_array[0] = 0.0; + an_array[1] = 1.0; + an_array[2] = 2.0; + + vec4 [3] an_array; + + gl_Position = vec4(a_function(an_array)); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-selection.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-selection.vert new file mode 100644 index 00000000..dc3fe359 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-selection.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 38 (page 44 of the PDF) of the GLSL 1.20 spec: + * + * "The ternary selection operator (?:). It operates on three expressions + * (exp1 ? exp2 : exp3)....The second and third expressions can be any + * type, as long their types match....This resulting matching type is + * the type of the entire expression." + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; +uniform int i; +uniform bool pick_from_a_or_b; + +void main() +{ + gl_Position = (pick_from_a_or_b ? a : b)[i]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-sequence.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-sequence.vert new file mode 100644 index 00000000..bf6a96d5 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-sequence.vert @@ -0,0 +1,25 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + gl_Position = (a, b)[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-shadow-redeclaration.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-shadow-redeclaration.vert new file mode 100644 index 00000000..f691fd8d --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-shadow-redeclaration.vert @@ -0,0 +1,29 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 21 (page 27 of the PDF) of the GLSL 1.20 spec: + * + * "An implicitly sized array can be re-declared in the same scope + * as an array of the same base type." + */ + + +attribute vec4 v; + +void main() +{ + float a[]; + + a[3] = 1.2; // Implicitly size "a" to have 4 elements. + + { + float a[4]; // this declaration shadows the previous + } + + a.length(); // illegal - "a' is not explicitly sized + + gl_Position = v; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bool.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bool.vert new file mode 100644 index 00000000..223ae49c --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bool.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [true] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec2.vert new file mode 100644 index 00000000..bff5c946 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec2.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [bvec2(true, false)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec3.vert new file mode 100644 index 00000000..b17b2975 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec3.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [bvec3(true, true, false)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec4.vert new file mode 100644 index 00000000..00d28447 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-bvec4.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [bvec4(true, true, false, false)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-constant-cast.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-constant-cast.vert new file mode 100644 index 00000000..8a9324a6 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-constant-cast.vert @@ -0,0 +1,18 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +const float size = 3.14159; +uniform vec4 [int(size)] a; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-constant-relational.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-constant-relational.vert new file mode 100644 index 00000000..2fca80b8 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-constant-relational.vert @@ -0,0 +1,162 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +const vec4 v4_1 = vec4(1); +const vec4 v4_0 = v4_1 - v4_1; +const vec3 v3_1 = vec3(1); +const vec3 v3_0 = v3_1 - v3_1; +const vec2 v2_1 = vec2(1); +const vec2 v2_0 = v2_1 - v2_1; + +const ivec4 iv4_1 = ivec4(1); +const ivec4 iv4_0 = iv4_1 - iv4_1; +const ivec3 iv3_1 = ivec3(1); +const ivec3 iv3_0 = iv3_1 - iv3_1; +const ivec2 iv2_1 = ivec2(1); +const ivec2 iv2_0 = iv2_1 - iv2_1; + +const bvec4 bv4_1 = bvec4(true); +const bvec4 bv4_0 = not(bv4_1); +const bvec3 bv3_1 = bvec3(true); +const bvec3 bv3_0 = not(bv3_1); +const bvec2 bv2_1 = bvec2(true); +const bvec2 bv2_0 = not(bv2_1); + +// All forms of lessThan. +float [all( lessThan( v4_1, v4_0) ) ? -1 : 1] array01; +float [all(not(lessThan( v4_1, v4_0))) ? 1 : -1] array02; +float [any( lessThan( v4_1, v4_0) ) ? -1 : 1] array03; +float [any(not(lessThan( v4_1, v4_0))) ? 1 : -1] array04; +float [all( lessThan(iv4_1, iv4_0) ) ? -1 : 1] array05; +float [all(not(lessThan(iv4_1, iv4_0))) ? 1 : -1] array06; +float [any( lessThan(iv4_1, iv4_0) ) ? -1 : 1] array07; +float [any(not(lessThan(iv4_1, iv4_0))) ? 1 : -1] array08; + +// All forms of lessThanEqual. +float [all( lessThanEqual( v4_1, v4_0) ) ? -1 : 1] array11; +float [all(not(lessThanEqual( v4_1, v4_0))) ? 1 : -1] array12; +float [any( lessThanEqual( v4_1, v4_0) ) ? -1 : 1] array13; +float [any(not(lessThanEqual( v4_1, v4_0))) ? 1 : -1] array14; +float [all( lessThanEqual(iv4_1, iv4_0) ) ? -1 : 1] array15; +float [all(not(lessThanEqual(iv4_1, iv4_0))) ? 1 : -1] array16; +float [any( lessThanEqual(iv4_1, iv4_0) ) ? -1 : 1] array17; +float [any(not(lessThanEqual(iv4_1, iv4_0))) ? 1 : -1] array18; + +// All forms of greaterThan. +float [all( greaterThan( v4_1, v4_0) ) ? 1 : -1] array21; +float [all(not(greaterThan( v4_1, v4_0))) ? -1 : 1] array22; +float [any( greaterThan( v4_1, v4_0) ) ? 1 : -1] array23; +float [any(not(greaterThan( v4_1, v4_0))) ? -1 : 1] array24; +float [all( greaterThan(iv4_1, iv4_0) ) ? 1 : -1] array25; +float [all(not(greaterThan(iv4_1, iv4_0))) ? -1 : 1] array26; +float [any( greaterThan(iv4_1, iv4_0) ) ? 1 : -1] array27; +float [any(not(greaterThan(iv4_1, iv4_0))) ? -1 : 1] array28; + +// All forms of greaterThanEqual. +float [all( greaterThanEqual( v4_1, v4_0) ) ? 1 : -1] array31; +float [all(not(greaterThanEqual( v4_1, v4_0))) ? -1 : 1] array32; +float [any( greaterThanEqual( v4_1, v4_0) ) ? 1 : -1] array33; +float [any(not(greaterThanEqual( v4_1, v4_0))) ? -1 : 1] array34; +float [all( greaterThanEqual(iv4_1, iv4_0) ) ? 1 : -1] array35; +float [all(not(greaterThanEqual(iv4_1, iv4_0))) ? -1 : 1] array36; +float [any( greaterThanEqual(iv4_1, iv4_0) ) ? 1 : -1] array37; +float [any(not(greaterThanEqual(iv4_1, iv4_0))) ? -1 : 1] array38; + +// All forms of equal. +float [all( equal( v4_1, v4_0) ) ? -1 : 1] array41; +float [all(not(equal( v4_1, v4_0))) ? 1 : -1] array42; +float [any( equal( v4_1, v4_0) ) ? -1 : 1] array43; +float [any(not(equal( v4_1, v4_0))) ? 1 : -1] array44; +float [all( equal(iv4_1, iv4_0) ) ? -1 : 1] array45; +float [all(not(equal(iv4_1, iv4_0))) ? 1 : -1] array46; +float [any( equal(iv4_1, iv4_0) ) ? -1 : 1] array47; +float [any(not(equal(iv4_1, iv4_0))) ? 1 : -1] array48; +float [all( equal(bv4_1, bv4_0) ) ? -1 : 1] array49; +float [all(not(equal(bv4_1, bv4_0))) ? 1 : -1] array4a; +float [any( equal(bv4_1, bv4_0) ) ? -1 : 1] array4b; +float [any(not(equal(bv4_1, bv4_0))) ? 1 : -1] array4c; + +// All forms of notEqual. +float [all( notEqual( v4_1, v4_0) ) ? 1 : -1] array51; +float [all(not(notEqual( v4_1, v4_0))) ? -1 : 1] array52; +float [any( notEqual( v4_1, v4_0) ) ? 1 : -1] array53; +float [any(not(notEqual( v4_1, v4_0))) ? -1 : 1] array54; +float [all( notEqual(iv4_1, iv4_0) ) ? 1 : -1] array55; +float [all(not(notEqual(iv4_1, iv4_0))) ? -1 : 1] array56; +float [any( notEqual(iv4_1, iv4_0) ) ? 1 : -1] array57; +float [any(not(notEqual(iv4_1, iv4_0))) ? -1 : 1] array58; +float [all( notEqual(bv4_1, bv4_0) ) ? 1 : -1] array59; +float [all(not(notEqual(bv4_1, bv4_0))) ? -1 : 1] array5a; +float [any( notEqual(bv4_1, bv4_0) ) ? 1 : -1] array5b; +float [any(not(notEqual(bv4_1, bv4_0))) ? -1 : 1] array5c; + +void main() +{ + gl_Position = vec4(array01.length() + + array02.length() + + array03.length() + + array04.length() + + array05.length() + + array06.length() + + array07.length() + + array08.length() + + array11.length() + + array12.length() + + array13.length() + + array14.length() + + array15.length() + + array16.length() + + array17.length() + + array18.length() + + array21.length() + + array22.length() + + array23.length() + + array24.length() + + array25.length() + + array26.length() + + array27.length() + + array28.length() + + array31.length() + + array32.length() + + array33.length() + + array34.length() + + array35.length() + + array36.length() + + array37.length() + + array38.length() + + array41.length() + + array42.length() + + array43.length() + + array44.length() + + array45.length() + + array46.length() + + array47.length() + + array48.length() + + array49.length() + + array4a.length() + + array4b.length() + + array4c.length() + + array51.length() + + array52.length() + + array53.length() + + array54.length() + + array55.length() + + array56.length() + + array57.length() + + array58.length() + + array59.length() + + array5a.length() + + array5b.length() + + array5c.length()); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-float.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-float.vert new file mode 100644 index 00000000..94a121f2 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-float.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [2.3] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-int.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-int.vert new file mode 100644 index 00000000..592c353d --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-int.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [int(2.3)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec2.vert new file mode 100644 index 00000000..d88e47d7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec2.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [ivec2(2.3,2.3)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec3.vert new file mode 100644 index 00000000..5bdaaf71 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec3.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [ivec3(2.3,2.3,2.3)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec4.vert new file mode 100644 index 00000000..1a1a6ea9 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-ivec4.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [ivec4(2.3,2.3,2.3,2.3)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-length.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-length.vert new file mode 100644 index 00000000..f78465d8 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-length.vert @@ -0,0 +1,18 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform vec4 [3] a; +uniform vec4 [a.length()] b; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-negative.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-negative.vert new file mode 100644 index 00000000..bd17dacb --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-negative.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform vec4 [-1] a; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-non-builtin-function.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-non-builtin-function.vert new file mode 100644 index 00000000..99b7e1ba --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-non-builtin-function.vert @@ -0,0 +1,19 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +int foo() { return 3; } + +uniform vec4 [foo()] a; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-not-constant.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-not-constant.vert new file mode 100644 index 00000000..baa377eb --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-not-constant.vert @@ -0,0 +1,18 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform int size; +uniform vec4 [size] a; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-selection.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-selection.vert new file mode 100644 index 00000000..4ecc2c33 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-selection.vert @@ -0,0 +1,23 @@ +/* [config] + * expect_result: pass + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 38 (page 44 of the PDF) of the GLSL 1.20 spec: + * + * "The ternary selection operator (?:). It operates on three expressions + * (exp1 ? exp2 : exp3)....The second and third expressions can be any + * type, as long their types match....This resulting matching type is + * the type of the entire expression." + */ + + +const vec4[] a = vec4[](vec4(0), vec4(1)); +const vec4[] b = vec4[](vec4(1), vec4(0)); +uniform vec4 c[((true) ? a : b).length()]; + +void main() +{ + gl_Position = c[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-sequence-in-parenthesis.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-sequence-in-parenthesis.vert new file mode 100644 index 00000000..0f0b5789 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-sequence-in-parenthesis.vert @@ -0,0 +1,33 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * The body of the GLSL spec is slient on this issue, but the grammar says: + * + * expression: + * assignment_expression + * expression COMMA assignment_expression + * + * constant_expression: + * conditional_expression + * + * ... + * + * init_declarator_list: + * single_declaration + * init_declarator_list COMMA IDENTIFIER + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET RIGHT_BRACKET + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET RIGHT_BRACKET EQUAL initializer + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET EQUAL initializer + * init_declarator_list COMMA IDENTIFIER EQUAL initializer + * + * This also matches C and C++. + */ + + +uniform float a[(5,3)]; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-sequence.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-sequence.vert new file mode 100644 index 00000000..387161fb --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-sequence.vert @@ -0,0 +1,33 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * The body of the GLSL spec is slient on this issue, but the grammar says: + * + * expression: + * assignment_expression + * expression COMMA assignment_expression + * + * constant_expression: + * conditional_expression + * + * ... + * + * init_declarator_list: + * single_declaration + * init_declarator_list COMMA IDENTIFIER + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET RIGHT_BRACKET + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET RIGHT_BRACKET EQUAL initializer + * init_declarator_list COMMA IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET EQUAL initializer + * init_declarator_list COMMA IDENTIFIER EQUAL initializer + * + * This also matches C and C++. + */ + + +uniform float a[5,3]; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec2.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec2.vert new file mode 100644 index 00000000..3712d4ee --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec2.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [vec2(2,2)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec3.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec3.vert new file mode 100644 index 00000000..7817ea00 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec3.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [vec3(2,2,2)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec4.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec4.vert new file mode 100644 index 00000000..39edae0c --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-vec4.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform float [vec4(2,2,2,2)] a; + +void main() { gl_Position = vec4(a[0]); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-with-side-effect.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-with-side-effect.vert new file mode 100644 index 00000000..426e3a63 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-with-side-effect.vert @@ -0,0 +1,20 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +void main() +{ + int x; + vec4[(x = 3)] a; + gl_Position = vec4(0.0); +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-zero.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-zero.vert new file mode 100644 index 00000000..547d4c14 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-size-zero.vert @@ -0,0 +1,17 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "When an array size is specified in a declaration, it must be an + * integral constant expression (see Section 4.3.3 "Constant Expressions") + * greater than zero." + */ + + +uniform vec4 [0] a; + +void main() { gl_Position = vec4(0.0); } diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-subtract.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-subtract.vert new file mode 100644 index 00000000..776325a1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-subtract.vert @@ -0,0 +1,26 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 35 (page 41 of the PDF) of the GLSL 1.20 spec: + * + * "In total, only the following operators are allowed to operate on + * arrays and structures as whole entities: + * + * field or method selector . + * equality == != + * assignment = + * indexing (arrays only) []" + */ + + +uniform vec4 a[2]; +uniform vec4 b[2]; + +void main() +{ + vec4 c[2] = a - b; + gl_Position = c[0]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-variable-index-implicit-size-global.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-variable-index-implicit-size-global.vert new file mode 100644 index 00000000..e4527b16 --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-variable-index-implicit-size-global.vert @@ -0,0 +1,24 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "If an array is indexed with an expression that is not an integral + * constant expression, or if an array is passed as an argument to a + * function, then its size must be declared before any such use." + */ + + +/* Assume the array is sized in a different compilation unit. + */ +vec4 [] an_array; + +uniform int i; + +void main() +{ + gl_Position = an_array[i]; +} diff --git a/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-variable-index-implicit-size-local.vert b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-variable-index-implicit-size-local.vert new file mode 100644 index 00000000..2269c49e --- /dev/null +++ b/tests/spec/glsl-es-1.00/compiler/structure-and-array-operations/array-variable-index-implicit-size-local.vert @@ -0,0 +1,29 @@ +/* [config] + * expect_result: fail + * glsl_version: 1.20 + * glsles_version: 1.00 + * [end config] + * + * From page 19 (page 25 of the PDF) of the GLSL 1.20 spec: + * + * "If an array is indexed with an expression that is not an integral + * constant expression, or if an array is passed as an argument to a + * function, then its size must be declared before any such use." + */ + + +attribute vec4 a; +attribute vec4 b; + +uniform int i; + +void main() +{ + vec4 [] an_array; + + an_array[0] = a; + an_array[1] = vec4(0); + an_array[2] = b; + + gl_Position = an_array[i]; +} diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/clipping.out b/tests/spec/glsl-es-1.00/execution/1.20/clipping/clipping.out new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/clipping.out diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/fixed-clip-enables.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/fixed-clip-enables.shader_test new file mode 100644 index 00000000..93995a5c --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/fixed-clip-enables.shader_test @@ -0,0 +1,141 @@ +# This test reproduces bug 41603 +# (https://bugs.freedesktop.org/show_bug.cgi?id=41603). +# +# This test sets up 6 clipping planes using fixed vertex +# functionality, which clip a rectangle to a hexagon shape. Then it +# tests various combinations of enables for the 6 clipping planes, and +# verifies that they all create the correct shape. +# +# To verify that each enable works, the combinations of enables were +# chosen such that: +# - Every plane is enabled at least once and disbled at least once. +# - Every plane is enabled and disabled in a different pattern. +# +# Note: Some implementations have bugs related to improper coordinate +# transformations of clip planes (which are already adequately tested +# by the clip-plane-transformation test), so to avoid those bugs +# contaminating the results of this test, we don't do any coordinate +# transformation in this test. + +[require] +GLSL >= 1.20 + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1, 1, 1, 1); +} + +[test] +clip plane 0 0 1 0 0.5 +clip plane 1 -1 1 0 0.8 +clip plane 2 -1 -1 0 0.8 +clip plane 3 0 -1 0 0.5 +clip plane 4 1 -1 0 0.8 +clip plane 5 1 1 0 0.8 +clear color 0.0 0.0 0.0 0.0 + +# Test with planes 0, 2, and 4 enabled. +enable GL_CLIP_PLANE0 +disable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +disable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +disable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (1.0, 1.0, 1.0, 1.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 5 + +# Test with planes 0, 1, 4, and 5 enabled. +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +disable GL_CLIP_PLANE2 +disable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (1.0, 1.0, 1.0, 1.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (1.0, 1.0, 1.0, 1.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 5 + +# Test with planes 0, 1, 2, and 3 enabled. +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +enable GL_CLIP_PLANE3 +disable GL_CLIP_PLANE4 +disable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (0.0, 0.0, 0.0, 0.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (1.0, 1.0, 1.0, 1.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 5 + +# Test with planes 4 and 5 enabled. +disable GL_CLIP_PLANE0 +disable GL_CLIP_PLANE1 +disable GL_CLIP_PLANE2 +disable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (1.0, 1.0, 1.0, 1.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (1.0, 1.0, 1.0, 1.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (1.0, 1.0, 1.0, 1.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 5 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-const-accept.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-const-accept.shader_test new file mode 100644 index 00000000..6c2b56cf --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-const-accept.shader_test @@ -0,0 +1,42 @@ +# From the GL 2.1 spec, section 2.17 (Clipping): +# +# All points with eye coordinates (x_e y_e z_e w_e)^T that satisfy +# +# (x_e) +# (p_1' p_2' p_3' p_4')(y_e) >= 0 +# (z_e) +# (w_e) +# +# lie in the half-space defined by the plane; points that do not +# satisfy this condition do not lie in the half-space. +# +# This test checks that gl_ClipVertex works properly for the trivial +# case where gl_ClipVertex is a constant value satisfying the above +# inequality. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + gl_ClipVertex = vec4(1.0, 0.0, 0.0, 0.0); +} + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1.0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear +clip plane 0 1.0 0.0 0.0 0.0 # accept points where gl_ClipVertex.x >= 0 +enable GL_CLIP_PLANE0 +draw rect -1 -1 2 2 +probe all rgba 1.0 1.0 1.0 1.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-const-reject.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-const-reject.shader_test new file mode 100644 index 00000000..0bb08ea0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-const-reject.shader_test @@ -0,0 +1,42 @@ +# From the GL 2.1 spec, section 2.17 (Clipping): +# +# All points with eye coordinates (x_e y_e z_e w_e)^T that satisfy +# +# (x_e) +# (p_1' p_2' p_3' p_4')(y_e) >= 0 +# (z_e) +# (w_e) +# +# lie in the half-space defined by the plane; points that do not +# satisfy this condition do not lie in the half-space. +# +# This test checks that gl_ClipVertex works properly for the trivial +# case where gl_ClipVertex is a constant value not satisfying the +# above inequality. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + gl_ClipVertex = vec4(-1.0, 0.0, 0.0, 0.0); +} + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1.0); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear +clip plane 0 1.0 0.0 0.0 0.0 # accept points where gl_ClipVertex.x >= 0 +enable GL_CLIP_PLANE0 +draw rect -1 -1 2 2 +probe all rgba 0.0 0.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-different-from-position.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-different-from-position.shader_test new file mode 100644 index 00000000..c7dae897 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-different-from-position.shader_test @@ -0,0 +1,62 @@ +# [description] +# Use all 6 clip planes to clip a rectangle to a hexagon shape. +# +# In this test, gl_Position and gl_ClipVertex are different to verify +# that gl_Position determines screen position and gl_ClipVertex +# determines clipping. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + // Transform gl_ClipVertex in an arbitrary way so that + // we can verify it is being used for clipping instead of + // gl_Position. + gl_ClipVertex = gl_Vertex * vec4(10.0, 10.0, 1.0, 1.0); +} + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1, 1, 1, 1); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear +ortho 0 1 0 1 +clip plane 0 0 1 0 -2.5 +clip plane 1 -1 1 0 4 +clip plane 2 -1 -1 0 14 +clip plane 3 0 -1 0 7.5 +clip plane 4 1 -1 0 4 +clip plane 5 1 1 0 -6 +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +enable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +draw rect 0.1 0.1 0.8 0.8 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.5, 0.8) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-enables.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-enables.shader_test new file mode 100644 index 00000000..b93d16f3 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-enables.shader_test @@ -0,0 +1,147 @@ +# This test sets up 6 clipping planes using gl_ClipVertex, which clip +# a rectangle to a hexagon shape. Then it tests various combinations +# of enables for the 6 clipping planes, and verifies that they all +# create the correct shape. +# +# To verify that each enable works, the combinations of enables were +# chosen such that: +# - Every plane is enabled at least once and disbled at least once. +# - Every plane is enabled and disabled in a different pattern. +# +# Note: Some implementations have bugs related to improper coordinate +# transformations of clip planes (which are already adequately tested +# by the clip-plane-transformation test), so to avoid those bugs +# contaminating the results of this test, we don't do any coordinate +# transformation in this test. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; + + gl_ClipVertex = gl_Position; +} + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1, 1, 1, 1); +} + +[test] +clip plane 0 0 1 0 0.5 +clip plane 1 -1 1 0 0.8 +clip plane 2 -1 -1 0 0.8 +clip plane 3 0 -1 0 0.5 +clip plane 4 1 -1 0 0.8 +clip plane 5 1 1 0 0.8 +clear color 0.0 0.0 0.0 0.0 + +# Test with planes 0, 2, and 4 enabled. +enable GL_CLIP_PLANE0 +disable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +disable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +disable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (1.0, 1.0, 1.0, 1.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 5 + +# Test with planes 0, 1, 4, and 5 enabled. +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +disable GL_CLIP_PLANE2 +disable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (1.0, 1.0, 1.0, 1.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (1.0, 1.0, 1.0, 1.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 5 + +# Test with planes 0, 1, 2, and 3 enabled. +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +enable GL_CLIP_PLANE3 +disable GL_CLIP_PLANE4 +disable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (0.0, 0.0, 0.0, 0.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (1.0, 1.0, 1.0, 1.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 5 + +# Test with planes 4 and 5 enabled. +disable GL_CLIP_PLANE0 +disable GL_CLIP_PLANE1 +disable GL_CLIP_PLANE2 +disable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +clear +draw rect -1 -1 2 2 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.5, 0.2) (1.0, 1.0, 1.0, 1.0) # clipped by plane 0 +relative probe rgba (0.8, 0.3) (1.0, 1.0, 1.0, 1.0) # clipped by plane 1 +relative probe rgba (0.8, 0.7) (1.0, 1.0, 1.0, 1.0) # clipped by plane 2 +relative probe rgba (0.5, 0.8) (1.0, 1.0, 1.0, 1.0) # clipped by plane 3 +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) # clipped by plane 4 +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) # clipped by plane 5 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-equal-to-position.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-equal-to-position.shader_test new file mode 100644 index 00000000..50b4856f --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-equal-to-position.shader_test @@ -0,0 +1,57 @@ +# [description] +# Use all 6 clip planes to clip a rectangle to a hexagon shape. +# +# In this test, gl_Position and gl_ClipVertex are the same. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + gl_ClipVertex = gl_Position; +} + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1, 1, 1, 1); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear +ortho 0 1 0 1 +clip plane 0 0 1 0 0.5 +clip plane 1 -1 1 0 0.8 +clip plane 2 -1 -1 0 0.8 +clip plane 3 0 -1 0 0.5 +clip plane 4 1 -1 0 0.8 +clip plane 5 1 1 0 0.8 +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +enable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +draw rect 0.1 0.1 0.8 0.8 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.5, 0.8) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) diff --git a/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-homogeneity.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-homogeneity.shader_test new file mode 100644 index 00000000..615ecf9e --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/clipping/vs-clip-vertex-homogeneity.shader_test @@ -0,0 +1,69 @@ +# This test verifies that the homogeneous coordinate of gl_ClipVertex +# is properly respected, by doubling all the coordinates of +# gl_ClipVertex (including the homogeneous coordinate) and verifying +# that the clipped shape is still correct. +# +# In addition, this test: +# - uses all 6 clip planes to clip a rectangle to a hexagon shape. +# - sets gl_Position and gl_ClipVertex to different values, to verify +# that gl_Position determines screen position and gl_ClipVertex +# determines clipping. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; + + // Transform gl_ClipVertex in an arbitrary way so that + // we can verify it is being used for clipping instead of + // gl_Position. The x and y coordinates are multiplied by 5, + // and the homogeneous coordinate is multiplied by 0.5, so the + // net result should be that x and y are scaled by a factor of + // 10. + gl_ClipVertex = gl_Vertex * vec4(5.0, 5.0, 1.0, 0.5); +} + +[fragment shader] +#version 120 +void main(void) +{ + gl_FragColor = vec4(1, 1, 1, 1); +} + +[test] +clear color 0.0 0.0 0.0 0.0 +clear +ortho 0 1 0 1 +clip plane 0 0 1 0 -2.5 +clip plane 1 -1 1 0 4 +clip plane 2 -1 -1 0 14 +clip plane 3 0 -1 0 7.5 +clip plane 4 1 -1 0 4 +clip plane 5 1 1 0 -6 +enable GL_CLIP_PLANE0 +enable GL_CLIP_PLANE1 +enable GL_CLIP_PLANE2 +enable GL_CLIP_PLANE3 +enable GL_CLIP_PLANE4 +enable GL_CLIP_PLANE5 +draw rect 0.1 0.1 0.8 0.8 + +# Test points inside each hexagon edge +relative probe rgba (0.3, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.3) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.4) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.7, 0.6) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.5, 0.7) (1.0, 1.0, 1.0, 1.0) +relative probe rgba (0.3, 0.6) (1.0, 1.0, 1.0, 1.0) + +# Test points outside each hexagon edge +relative probe rgba (0.2, 0.3) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.5, 0.2) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.8, 0.3) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.8, 0.7) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.5, 0.8) (0.0, 0.0, 0.0, 0.0) +relative probe rgba (0.2, 0.7) (0.0, 0.0, 0.0, 0.0) diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-assign-varied-struct.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-assign-varied-struct.shader_test new file mode 100644 index 00000000..f3ad3e84 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-assign-varied-struct.shader_test @@ -0,0 +1,36 @@ +# Test initialization of an array of structures where the elements of +# the structure do not all have the same vector size. + +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main(void) +{ + gl_Position = vertex; +} + +[fragment shader] + +void main(void) +{ + float x = 3.0; + struct s { float f; vec3 v; }; + s a[1]=s[](s(x,vec3(x))); + if (a[0].f==3.0) + gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); // green + else + gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // red +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 1.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2-ivec.shader_test new file mode 100644 index 00000000..c6925f40 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2-ivec.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec2 c = ivec2(2, 3); +const ivec2 r = ivec2(4, 5); +uniform mat2 expected = mat2(8, 12, 10, 15); + +void main() { + mat2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2.shader_test new file mode 100644 index 00000000..a8e91542 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2.shader_test @@ -0,0 +1,34 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec2 c = vec2(2, 3); +const vec2 r = vec2(4, 5); +uniform mat2 expected = mat2(8, 12, 10, 15); + +void main() { + mat2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x2-ivec.shader_test new file mode 100644 index 00000000..dc392010 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x2-ivec.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec2 c = ivec2(2, 3); +const ivec2 r = ivec2(4, 5); +uniform mat2x2 expected = mat2x2(8, 12, 10, 15); + +void main() { + mat2x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x2.shader_test new file mode 100644 index 00000000..370c3c8b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x2.shader_test @@ -0,0 +1,34 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec2 c = vec2(2, 3); +const vec2 r = vec2(4, 5); +uniform mat2x2 expected = mat2x2(8, 12, 10, 15); + +void main() { + mat2x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x3-ivec.shader_test new file mode 100644 index 00000000..9cb881f7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x3-ivec.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec3 c = ivec3(2, 3, 4); +const ivec2 r = ivec2(5, 6); +uniform mat2x3 expected = mat2x3(10, 15, 20, 12, 18, 24); + +void main() { + mat2x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x3.shader_test new file mode 100644 index 00000000..925cc8d7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x3.shader_test @@ -0,0 +1,35 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x3fv only exists in OpenGL 2.1 or later. + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec3 c = vec3(2, 3, 4); +const vec2 r = vec2(5, 6); +uniform mat2x3 expected = mat2x3(10, 15, 20, 12, 18, 24); + +void main() { + mat2x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x4-ivec.shader_test new file mode 100644 index 00000000..a67c2051 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x4-ivec.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec4 c = ivec4(2, 3, 4, 5); +const ivec2 r = ivec2(6, 7); +uniform mat2x4 expected = mat2x4(12, 18, 24, 30, 14, 21, 28, 35); + +void main() { + mat2x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x4.shader_test new file mode 100644 index 00000000..214a1128 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat2x4.shader_test @@ -0,0 +1,36 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec4 c = vec4(2, 3, 4, 5); +const vec2 r = vec2(6, 7); +uniform mat2x4 expected = mat2x4(12, 18, 24, 30, 14, 21, 28, 35); + +void main() { + mat2x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3-ivec.shader_test new file mode 100644 index 00000000..d2e11a6e --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3-ivec.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec3 c = ivec3(2, 3, 4); +const ivec3 r = ivec3(5, 6, 7); +uniform mat3 expected = mat3(10, 15, 20, 12, 18, 24, 14, 21, 28); + +void main() { + mat3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3.shader_test new file mode 100644 index 00000000..d5011152 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3.shader_test @@ -0,0 +1,34 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec3 c = vec3(2, 3, 4); +const vec3 r = vec3(5, 6, 7); +uniform mat3 expected = mat3(10, 15, 20, 12, 18, 24, 14, 21, 28); + +void main() { + mat3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x2-ivec.shader_test new file mode 100644 index 00000000..99292140 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x2-ivec.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec2 c = ivec2(2, 3); +const ivec3 r = ivec3(4, 5, 6); +uniform mat3x2 expected = mat3x2(8, 12, 10, 15, 12, 18); + +void main() { + mat3x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x2.shader_test new file mode 100644 index 00000000..3e1ea9eb --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x2.shader_test @@ -0,0 +1,36 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec2 c = vec2(2, 3); +const vec3 r = vec3(4, 5, 6); +uniform mat3x2 expected = mat3x2(8, 12, 10, 15, 12, 18); + +void main() { + mat3x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x3-ivec.shader_test new file mode 100644 index 00000000..8ad24d4c --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x3-ivec.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec3 c = ivec3(2, 3, 4); +const ivec3 r = ivec3(5, 6, 7); +uniform mat3x3 expected = mat3x3(10, 15, 20, 12, 18, 24, 14, 21, 28); + +void main() { + mat3x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x3.shader_test new file mode 100644 index 00000000..5371ac93 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x3.shader_test @@ -0,0 +1,34 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec3 c = vec3(2, 3, 4); +const vec3 r = vec3(5, 6, 7); +uniform mat3x3 expected = mat3x3(10, 15, 20, 12, 18, 24, 14, 21, 28); + +void main() { + mat3x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x4-ivec.shader_test new file mode 100644 index 00000000..ef994660 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x4-ivec.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec4 c = ivec4(2, 3, 4, 5); +const ivec3 r = ivec3(6, 7, 8); +uniform mat3x4 expected = mat3x4(12, 18, 24, 30, 14, 21, 28, 35, 16, 24, 32, 40); + +void main() { + mat3x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x4.shader_test new file mode 100644 index 00000000..dd0d4185 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat3x4.shader_test @@ -0,0 +1,36 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec4 c = vec4(2, 3, 4, 5); +const vec3 r = vec3(6, 7, 8); +uniform mat3x4 expected = mat3x4(12, 18, 24, 30, 14, 21, 28, 35, 16, 24, 32, 40); + +void main() { + mat3x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4-ivec.shader_test new file mode 100644 index 00000000..441ae99a --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4-ivec.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec4 c = ivec4(2, 3, 4, 5); +const ivec4 r = ivec4(6, 7, 8, 9); +uniform mat4 expected = mat4(12, 18, 24, 30, 14, 21, 28, 35, 16, 24, 32, 40, 18, 27, 36, 45); + +void main() { + mat4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4.shader_test new file mode 100644 index 00000000..ac73bf6a --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4.shader_test @@ -0,0 +1,34 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec4 c = vec4(2, 3, 4, 5); +const vec4 r = vec4(6, 7, 8, 9); +uniform mat4 expected = mat4(12, 18, 24, 30, 14, 21, 28, 35, 16, 24, 32, 40, 18, 27, 36, 45); + +void main() { + mat4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x2-ivec.shader_test new file mode 100644 index 00000000..0d13ff5a --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x2-ivec.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec2 c = ivec2(2, 3); +const ivec4 r = ivec4(4, 5, 6, 7); +uniform mat4x2 expected = mat4x2(8, 12, 10, 15, 12, 18, 14, 21); + +void main() { + mat4x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x2.shader_test new file mode 100644 index 00000000..fe76b5dc --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x2.shader_test @@ -0,0 +1,36 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec2 c = vec2(2, 3); +const vec4 r = vec4(4, 5, 6, 7); +uniform mat4x2 expected = mat4x2(8, 12, 10, 15, 12, 18, 14, 21); + +void main() { + mat4x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x3-ivec.shader_test new file mode 100644 index 00000000..f46e29a4 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x3-ivec.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec3 c = ivec3(2, 3, 4); +const ivec4 r = ivec4(5, 6, 7, 8); +uniform mat4x3 expected = mat4x3(10, 15, 20, 12, 18, 24, 14, 21, 28, 16, 24, 32); + +void main() { + mat4x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x3.shader_test new file mode 100644 index 00000000..168957bf --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x3.shader_test @@ -0,0 +1,36 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec3 c = vec3(2, 3, 4); +const vec4 r = vec4(5, 6, 7, 8); +uniform mat4x3 expected = mat4x3(10, 15, 20, 12, 18, 24, 14, 21, 28, 16, 24, 32); + +void main() { + mat4x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x4-ivec.shader_test new file mode 100644 index 00000000..5fa7d9a3 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x4-ivec.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + + +const ivec4 c = ivec4(2, 3, 4, 5); +const ivec4 r = ivec4(6, 7, 8, 9); +uniform mat4x4 expected = mat4x4(12, 18, 24, 30, 14, 21, 28, 35, 16, 24, 32, 40, 18, 27, 36, 45); + +void main() { + mat4x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x4.shader_test new file mode 100644 index 00000000..acabddc5 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-const-mat4x4.shader_test @@ -0,0 +1,34 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + + +const vec4 c = vec4(2, 3, 4, 5); +const vec4 r = vec4(6, 7, 8, 9); +uniform mat4x4 expected = mat4x4(12, 18, 24, 30, 14, 21, 28, 35, 16, 24, 32, 40, 18, 27, 36, 45); + +void main() { + mat4x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2-ivec.shader_test new file mode 100644 index 00000000..c1a8eb0c --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2-ivec.shader_test @@ -0,0 +1,74 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec2 c; +uniform ivec2 r; +uniform mat2 expected; + +void main() { + mat2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec2 c 2 3 +uniform ivec2 r 4 5 +uniform mat2x2 expected 8 12 10 15 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec2 c 3 4 +uniform ivec2 r 5 6 +uniform mat2x2 expected 15 20 18 24 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec2 c 4 5 +uniform ivec2 r 6 7 +uniform mat2x2 expected 24 30 28 35 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec2 c 5 6 +uniform ivec2 r 7 8 +uniform mat2x2 expected 35 42 40 48 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2.shader_test new file mode 100644 index 00000000..393d36b4 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec2 c; +uniform vec2 r; +uniform mat2 expected; + +void main() { + mat2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec2 c 2 3 +uniform vec2 r 4 5 +uniform mat2x2 expected 8 12 10 15 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec2 c 3 4 +uniform vec2 r 5 6 +uniform mat2x2 expected 15 20 18 24 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec2 c 4 5 +uniform vec2 r 6 7 +uniform mat2x2 expected 24 30 28 35 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec2 c 5 6 +uniform vec2 r 7 8 +uniform mat2x2 expected 35 42 40 48 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x2-ivec.shader_test new file mode 100644 index 00000000..8b2a669e --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x2-ivec.shader_test @@ -0,0 +1,74 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec2 c; +uniform ivec2 r; +uniform mat2x2 expected; + +void main() { + mat2x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec2 c 2 3 +uniform ivec2 r 4 5 +uniform mat2x2 expected 8 12 10 15 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec2 c 3 4 +uniform ivec2 r 5 6 +uniform mat2x2 expected 15 20 18 24 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec2 c 4 5 +uniform ivec2 r 6 7 +uniform mat2x2 expected 24 30 28 35 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec2 c 5 6 +uniform ivec2 r 7 8 +uniform mat2x2 expected 35 42 40 48 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x2.shader_test new file mode 100644 index 00000000..e170e5fd --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x2.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec2 c; +uniform vec2 r; +uniform mat2x2 expected; + +void main() { + mat2x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec2 c 2 3 +uniform vec2 r 4 5 +uniform mat2x2 expected 8 12 10 15 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec2 c 3 4 +uniform vec2 r 5 6 +uniform mat2x2 expected 15 20 18 24 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec2 c 4 5 +uniform vec2 r 6 7 +uniform mat2x2 expected 24 30 28 35 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec2 c 5 6 +uniform vec2 r 7 8 +uniform mat2x2 expected 35 42 40 48 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x3-ivec.shader_test new file mode 100644 index 00000000..f384c372 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x3-ivec.shader_test @@ -0,0 +1,76 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec3 c; +uniform ivec2 r; +uniform mat2x3 expected; + +void main() { + mat2x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec3 c 2 3 4 +uniform ivec2 r 5 6 +uniform mat2x3 expected 10 15 20 12 18 24 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec3 c 3 4 5 +uniform ivec2 r 6 7 +uniform mat2x3 expected 18 24 30 21 28 35 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec3 c 4 5 6 +uniform ivec2 r 7 8 +uniform mat2x3 expected 28 35 42 32 40 48 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec3 c 5 6 7 +uniform ivec2 r 8 9 +uniform mat2x3 expected 40 48 56 45 54 63 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x3.shader_test new file mode 100644 index 00000000..a9c343bc --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x3.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec3 c; +uniform vec2 r; +uniform mat2x3 expected; + +void main() { + mat2x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec3 c 2 3 4 +uniform vec2 r 5 6 +uniform mat2x3 expected 10 15 20 12 18 24 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec3 c 3 4 5 +uniform vec2 r 6 7 +uniform mat2x3 expected 18 24 30 21 28 35 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec3 c 4 5 6 +uniform vec2 r 7 8 +uniform mat2x3 expected 28 35 42 32 40 48 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec3 c 5 6 7 +uniform vec2 r 8 9 +uniform mat2x3 expected 40 48 56 45 54 63 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x4-ivec.shader_test new file mode 100644 index 00000000..7e1c74e1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x4-ivec.shader_test @@ -0,0 +1,76 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec4 c; +uniform ivec2 r; +uniform mat2x4 expected; + +void main() { + mat2x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec4 c 2 3 4 5 +uniform ivec2 r 6 7 +uniform mat2x4 expected 12 18 24 30 14 21 28 35 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec4 c 3 4 5 6 +uniform ivec2 r 7 8 +uniform mat2x4 expected 21 28 35 42 24 32 40 48 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec4 c 4 5 6 7 +uniform ivec2 r 8 9 +uniform mat2x4 expected 32 40 48 56 36 45 54 63 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec4 c 5 6 7 8 +uniform ivec2 r 9 10 +uniform mat2x4 expected 45 54 63 72 50 60 70 80 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x4.shader_test new file mode 100644 index 00000000..0724371c --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat2x4.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix2x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec4 c; +uniform vec2 r; +uniform mat2x4 expected; + +void main() { + mat2x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec4 c 2 3 4 5 +uniform vec2 r 6 7 +uniform mat2x4 expected 12 18 24 30 14 21 28 35 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec4 c 3 4 5 6 +uniform vec2 r 7 8 +uniform mat2x4 expected 21 28 35 42 24 32 40 48 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec4 c 4 5 6 7 +uniform vec2 r 8 9 +uniform mat2x4 expected 32 40 48 56 36 45 54 63 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec4 c 5 6 7 8 +uniform vec2 r 9 10 +uniform mat2x4 expected 45 54 63 72 50 60 70 80 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3-ivec.shader_test new file mode 100644 index 00000000..88a0f665 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3-ivec.shader_test @@ -0,0 +1,74 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec3 c; +uniform ivec3 r; +uniform mat3 expected; + +void main() { + mat3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec3 c 2 3 4 +uniform ivec3 r 5 6 7 +uniform mat3x3 expected 10 15 20 12 18 24 14 21 28 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec3 c 3 4 5 +uniform ivec3 r 6 7 8 +uniform mat3x3 expected 18 24 30 21 28 35 24 32 40 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec3 c 4 5 6 +uniform ivec3 r 7 8 9 +uniform mat3x3 expected 28 35 42 32 40 48 36 45 54 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec3 c 5 6 7 +uniform ivec3 r 8 9 10 +uniform mat3x3 expected 40 48 56 45 54 63 50 60 70 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3.shader_test new file mode 100644 index 00000000..250b5761 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec3 c; +uniform vec3 r; +uniform mat3 expected; + +void main() { + mat3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec3 c 2 3 4 +uniform vec3 r 5 6 7 +uniform mat3x3 expected 10 15 20 12 18 24 14 21 28 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec3 c 3 4 5 +uniform vec3 r 6 7 8 +uniform mat3x3 expected 18 24 30 21 28 35 24 32 40 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec3 c 4 5 6 +uniform vec3 r 7 8 9 +uniform mat3x3 expected 28 35 42 32 40 48 36 45 54 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec3 c 5 6 7 +uniform vec3 r 8 9 10 +uniform mat3x3 expected 40 48 56 45 54 63 50 60 70 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x2-ivec.shader_test new file mode 100644 index 00000000..531cc81a --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x2-ivec.shader_test @@ -0,0 +1,76 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec2 c; +uniform ivec3 r; +uniform mat3x2 expected; + +void main() { + mat3x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec2 c 2 3 +uniform ivec3 r 4 5 6 +uniform mat3x2 expected 8 12 10 15 12 18 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec2 c 3 4 +uniform ivec3 r 5 6 7 +uniform mat3x2 expected 15 20 18 24 21 28 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec2 c 4 5 +uniform ivec3 r 6 7 8 +uniform mat3x2 expected 24 30 28 35 32 40 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec2 c 5 6 +uniform ivec3 r 7 8 9 +uniform mat3x2 expected 35 42 40 48 45 54 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x2.shader_test new file mode 100644 index 00000000..56c0e9b8 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x2.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec2 c; +uniform vec3 r; +uniform mat3x2 expected; + +void main() { + mat3x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec2 c 2 3 +uniform vec3 r 4 5 6 +uniform mat3x2 expected 8 12 10 15 12 18 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec2 c 3 4 +uniform vec3 r 5 6 7 +uniform mat3x2 expected 15 20 18 24 21 28 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec2 c 4 5 +uniform vec3 r 6 7 8 +uniform mat3x2 expected 24 30 28 35 32 40 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec2 c 5 6 +uniform vec3 r 7 8 9 +uniform mat3x2 expected 35 42 40 48 45 54 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x3-ivec.shader_test new file mode 100644 index 00000000..940ecae7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x3-ivec.shader_test @@ -0,0 +1,74 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec3 c; +uniform ivec3 r; +uniform mat3x3 expected; + +void main() { + mat3x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec3 c 2 3 4 +uniform ivec3 r 5 6 7 +uniform mat3x3 expected 10 15 20 12 18 24 14 21 28 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec3 c 3 4 5 +uniform ivec3 r 6 7 8 +uniform mat3x3 expected 18 24 30 21 28 35 24 32 40 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec3 c 4 5 6 +uniform ivec3 r 7 8 9 +uniform mat3x3 expected 28 35 42 32 40 48 36 45 54 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec3 c 5 6 7 +uniform ivec3 r 8 9 10 +uniform mat3x3 expected 40 48 56 45 54 63 50 60 70 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x3.shader_test new file mode 100644 index 00000000..8a9b2084 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x3.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec3 c; +uniform vec3 r; +uniform mat3x3 expected; + +void main() { + mat3x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec3 c 2 3 4 +uniform vec3 r 5 6 7 +uniform mat3x3 expected 10 15 20 12 18 24 14 21 28 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec3 c 3 4 5 +uniform vec3 r 6 7 8 +uniform mat3x3 expected 18 24 30 21 28 35 24 32 40 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec3 c 4 5 6 +uniform vec3 r 7 8 9 +uniform mat3x3 expected 28 35 42 32 40 48 36 45 54 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec3 c 5 6 7 +uniform vec3 r 8 9 10 +uniform mat3x3 expected 40 48 56 45 54 63 50 60 70 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x4-ivec.shader_test new file mode 100644 index 00000000..3e629dca --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x4-ivec.shader_test @@ -0,0 +1,76 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec4 c; +uniform ivec3 r; +uniform mat3x4 expected; + +void main() { + mat3x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec4 c 2 3 4 5 +uniform ivec3 r 6 7 8 +uniform mat3x4 expected 12 18 24 30 14 21 28 35 16 24 32 40 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec4 c 3 4 5 6 +uniform ivec3 r 7 8 9 +uniform mat3x4 expected 21 28 35 42 24 32 40 48 27 36 45 54 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec4 c 4 5 6 7 +uniform ivec3 r 8 9 10 +uniform mat3x4 expected 32 40 48 56 36 45 54 63 40 50 60 70 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec4 c 5 6 7 8 +uniform ivec3 r 9 10 11 +uniform mat3x4 expected 45 54 63 72 50 60 70 80 55 66 77 88 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x4.shader_test new file mode 100644 index 00000000..a94040df --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat3x4.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix3x4fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec4 c; +uniform vec3 r; +uniform mat3x4 expected; + +void main() { + mat3x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec4 c 2 3 4 5 +uniform vec3 r 6 7 8 +uniform mat3x4 expected 12 18 24 30 14 21 28 35 16 24 32 40 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec4 c 3 4 5 6 +uniform vec3 r 7 8 9 +uniform mat3x4 expected 21 28 35 42 24 32 40 48 27 36 45 54 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec4 c 4 5 6 7 +uniform vec3 r 8 9 10 +uniform mat3x4 expected 32 40 48 56 36 45 54 63 40 50 60 70 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec4 c 5 6 7 8 +uniform vec3 r 9 10 11 +uniform mat3x4 expected 45 54 63 72 50 60 70 80 55 66 77 88 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4-ivec.shader_test new file mode 100644 index 00000000..4fcc7dfc --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4-ivec.shader_test @@ -0,0 +1,74 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec4 c; +uniform ivec4 r; +uniform mat4 expected; + +void main() { + mat4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec4 c 2 3 4 5 +uniform ivec4 r 6 7 8 9 +uniform mat4x4 expected 12 18 24 30 14 21 28 35 16 24 32 40 18 27 36 45 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec4 c 3 4 5 6 +uniform ivec4 r 7 8 9 10 +uniform mat4x4 expected 21 28 35 42 24 32 40 48 27 36 45 54 30 40 50 60 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec4 c 4 5 6 7 +uniform ivec4 r 8 9 10 11 +uniform mat4x4 expected 32 40 48 56 36 45 54 63 40 50 60 70 44 55 66 77 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec4 c 5 6 7 8 +uniform ivec4 r 9 10 11 12 +uniform mat4x4 expected 45 54 63 72 50 60 70 80 55 66 77 88 60 72 84 96 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4.shader_test new file mode 100644 index 00000000..1b5c7192 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec4 c; +uniform vec4 r; +uniform mat4 expected; + +void main() { + mat4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec4 c 2 3 4 5 +uniform vec4 r 6 7 8 9 +uniform mat4x4 expected 12 18 24 30 14 21 28 35 16 24 32 40 18 27 36 45 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec4 c 3 4 5 6 +uniform vec4 r 7 8 9 10 +uniform mat4x4 expected 21 28 35 42 24 32 40 48 27 36 45 54 30 40 50 60 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec4 c 4 5 6 7 +uniform vec4 r 8 9 10 11 +uniform mat4x4 expected 32 40 48 56 36 45 54 63 40 50 60 70 44 55 66 77 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec4 c 5 6 7 8 +uniform vec4 r 9 10 11 12 +uniform mat4x4 expected 45 54 63 72 50 60 70 80 55 66 77 88 60 72 84 96 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x2-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x2-ivec.shader_test new file mode 100644 index 00000000..b2208adc --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x2-ivec.shader_test @@ -0,0 +1,76 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec2 c; +uniform ivec4 r; +uniform mat4x2 expected; + +void main() { + mat4x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec2 c 2 3 +uniform ivec4 r 4 5 6 7 +uniform mat4x2 expected 8 12 10 15 12 18 14 21 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec2 c 3 4 +uniform ivec4 r 5 6 7 8 +uniform mat4x2 expected 15 20 18 24 21 28 24 32 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec2 c 4 5 +uniform ivec4 r 6 7 8 9 +uniform mat4x2 expected 24 30 28 35 32 40 36 45 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec2 c 5 6 +uniform ivec4 r 7 8 9 10 +uniform mat4x2 expected 35 42 40 48 45 54 50 60 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x2.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x2.shader_test new file mode 100644 index 00000000..a7c36334 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x2.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x2fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec2 c; +uniform vec4 r; +uniform mat4x2 expected; + +void main() { + mat4x2 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec2 c 2 3 +uniform vec4 r 4 5 6 7 +uniform mat4x2 expected 8 12 10 15 12 18 14 21 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec2 c 3 4 +uniform vec4 r 5 6 7 8 +uniform mat4x2 expected 15 20 18 24 21 28 24 32 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec2 c 4 5 +uniform vec4 r 6 7 8 9 +uniform mat4x2 expected 24 30 28 35 32 40 36 45 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec2 c 5 6 +uniform vec4 r 7 8 9 10 +uniform mat4x2 expected 35 42 40 48 45 54 50 60 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x3-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x3-ivec.shader_test new file mode 100644 index 00000000..c479724a --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x3-ivec.shader_test @@ -0,0 +1,76 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec3 c; +uniform ivec4 r; +uniform mat4x3 expected; + +void main() { + mat4x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec3 c 2 3 4 +uniform ivec4 r 5 6 7 8 +uniform mat4x3 expected 10 15 20 12 18 24 14 21 28 16 24 32 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec3 c 3 4 5 +uniform ivec4 r 6 7 8 9 +uniform mat4x3 expected 18 24 30 21 28 35 24 32 40 27 36 45 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec3 c 4 5 6 +uniform ivec4 r 7 8 9 10 +uniform mat4x3 expected 28 35 42 32 40 48 36 45 54 40 50 60 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec3 c 5 6 7 +uniform ivec4 r 8 9 10 11 +uniform mat4x3 expected 40 48 56 45 54 63 50 60 70 55 66 77 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x3.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x3.shader_test new file mode 100644 index 00000000..683d64d7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x3.shader_test @@ -0,0 +1,56 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es +# glUniformMatrix4x3fv only exists in OpenGL 2.1 or later. + + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec3 c; +uniform vec4 r; +uniform mat4x3 expected; + +void main() { + mat4x3 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec3 c 2 3 4 +uniform vec4 r 5 6 7 8 +uniform mat4x3 expected 10 15 20 12 18 24 14 21 28 16 24 32 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec3 c 3 4 5 +uniform vec4 r 6 7 8 9 +uniform mat4x3 expected 18 24 30 21 28 35 24 32 40 27 36 45 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec3 c 4 5 6 +uniform vec4 r 7 8 9 10 +uniform mat4x3 expected 28 35 42 32 40 48 36 45 54 40 50 60 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec3 c 5 6 7 +uniform vec4 r 8 9 10 11 +uniform mat4x3 expected 40 48 56 45 54 63 50 60 70 55 66 77 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x4-ivec.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x4-ivec.shader_test new file mode 100644 index 00000000..57ef99b0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x4-ivec.shader_test @@ -0,0 +1,74 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ + +uniform ivec4 c; +uniform ivec4 r; +uniform mat4x4 expected; + +void main() { + mat4x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform ivec4 c 2 3 4 5 +uniform ivec4 r 6 7 8 9 +uniform mat4x4 expected 12 18 24 30 14 21 28 35 16 24 32 40 18 27 36 45 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform ivec4 c 3 4 5 6 +uniform ivec4 r 7 8 9 10 +uniform mat4x4 expected 21 28 35 42 24 32 40 48 27 36 45 54 30 40 50 60 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform ivec4 c 4 5 6 7 +uniform ivec4 r 8 9 10 11 +uniform mat4x4 expected 32 40 48 56 36 45 54 63 40 50 60 70 44 55 66 77 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform ivec4 c 5 6 7 8 +uniform ivec4 r 9 10 11 12 +uniform mat4x4 expected 45 54 63 72 50 60 70 80 55 66 77 88 60 72 84 96 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x4.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x4.shader_test new file mode 100644 index 00000000..01e79c7d --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/fs-outerProduct-mat4x4.shader_test @@ -0,0 +1,54 @@ +[require] +GLSL >= 1.00 es +GL >= 2.0 es + +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] + +uniform vec4 c; +uniform vec4 r; +uniform mat4x4 expected; + +void main() { + mat4x4 result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +uniform vec4 c 2 3 4 5 +uniform vec4 r 6 7 8 9 +uniform mat4x4 expected 12 18 24 30 14 21 28 35 16 24 32 40 18 27 36 45 +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 + +uniform vec4 c 3 4 5 6 +uniform vec4 r 7 8 9 10 +uniform mat4x4 expected 21 28 35 42 24 32 40 48 27 36 45 54 30 40 50 60 +draw rect 30 10 10 10 +probe rgb 35 15 0.0 1.0 0.0 + +uniform vec4 c 4 5 6 7 +uniform vec4 r 8 9 10 11 +uniform mat4x4 expected 32 40 48 56 36 45 54 63 40 50 60 70 44 55 66 77 +draw rect 50 10 10 10 +probe rgb 55 15 0.0 1.0 0.0 + +uniform vec4 c 5 6 7 8 +uniform vec4 r 9 10 11 12 +uniform mat4x4 expected 45 54 63 72 50 60 70 80 55 66 77 88 60 72 84 96 +draw rect 70 10 10 10 +probe rgb 75 15 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxClipPlanes.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxClipPlanes.shader_test new file mode 100644 index 00000000..16672930 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxClipPlanes.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxClipPlanes >= 6) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxCombinedTextureImageUnits.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxCombinedTextureImageUnits.shader_test new file mode 100644 index 00000000..a489be05 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxCombinedTextureImageUnits.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxCombinedTextureImageUnits >= 2) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxDrawBuffers.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxDrawBuffers.shader_test new file mode 100644 index 00000000..e450a1c4 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxDrawBuffers.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxDrawBuffers >= 1) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxFragmentUniformComponents.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxFragmentUniformComponents.shader_test new file mode 100644 index 00000000..3aefbf51 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxFragmentUniformComponents.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxFragmentUniformComponents >= 64) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxLights.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxLights.shader_test new file mode 100644 index 00000000..3c0fea5b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxLights.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxLights >= 8) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureCoords.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureCoords.shader_test new file mode 100644 index 00000000..4951ffd0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureCoords.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxTextureCoords >= 2) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureImageUnits.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureImageUnits.shader_test new file mode 100644 index 00000000..e32faae1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureImageUnits.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxTextureImageUnits >= 2) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureUnits.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureUnits.shader_test new file mode 100644 index 00000000..52bb5f60 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxTextureUnits.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxTextureUnits >= 2) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVaryingFloats.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVaryingFloats.shader_test new file mode 100644 index 00000000..2116faa0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVaryingFloats.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxVaryingFloats >= 32) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexAttribs.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexAttribs.shader_test new file mode 100644 index 00000000..531fe71b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexAttribs.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxVertexAttribs >= 16) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexTextureImageUnits.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexTextureImageUnits.shader_test new file mode 100644 index 00000000..38fa6475 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexTextureImageUnits.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxVertexTextureImageUnits >= 0) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexUniformComponents.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexUniformComponents.shader_test new file mode 100644 index 00000000..ae3b7298 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/gl_MaxVertexUniformComponents.shader_test @@ -0,0 +1,28 @@ +# [description] +# Tests for GLSL 1.20 minimum maximums for the builtin constants. +# +# See the GLSL 1.20.8 specification, section 7.4, page 49 (page 55 of the PDF). + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void main(void) +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +void main(void) +{ + if (gl_MaxVertexUniformComponents >= 512) + gl_FragColor = vec4(0, 1, 0, 0); + else + gl_FragColor = vec4(1, 0, 0, 0); +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/maximums/maximums.out b/tests/spec/glsl-es-1.00/execution/1.20/maximums/maximums.out new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/maximums/maximums.out diff --git a/tests/spec/glsl-es-1.00/execution/1.20/outerProduct-const.sh b/tests/spec/glsl-es-1.00/execution/1.20/outerProduct-const.sh new file mode 100644 index 00000000..18ba5d03 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/outerProduct-const.sh @@ -0,0 +1,221 @@ +#!/bin/bash + +function emit_conversion_info +{ +cat <<EOF +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ +EOF +} + +function emit_outerProduct_const_data +{ + c=$1 + r=$2 + vtype=$3 + mtype=$4 + + cbase=$5 + cvec="" + for i in $(seq $c); do + v=$(($i + $cbase)) + if [ "x$cvec" == "x" ]; then + cvec="${v}" + else + cvec="${cvec}, ${v}" + fi + done + + rbase=$(($cbase + $c)) + rvec="" + for i in $(seq $r); do + v=$(($i + $rbase)) + if [ "x$rvec" == "x" ]; then + rvec="${v}" + else + rvec="${rvec}, ${v}" + fi + done + + expected="" + for i in $(seq $r); do + for j in $(seq $c); do + m=$((($i + $rbase) * ($j + $cbase))) + if [ "x$expected" == "x" ]; then + expected="${m}" + else + expected="${expected}, ${m}" + fi + done + done + + echo + echo "const ${vtype}${c} c = ${vtype}${c}(${cvec});" + echo "const ${vtype}${r} r = ${vtype}${r}(${rvec});" + echo "uniform ${mtype} expected = ${mtype}(${expected});" + +} + +function emit_vs_test +{ + c=$1 + r=$2 + vtype=$3 + mat=$4 + + if [ "$vtype" = "ivec" ]; then + name="vs-outerProduct-const-${mat}-ivec.shader_test" + else + name="vs-outerProduct-const-${mat}.shader_test" + fi + + if [ $c -ne $r ]; then + GL_require="# glUniformMatrix${r}x${c}fv only exists in OpenGL 2.1 or later. + +" + else + GL_require="" + fi + + cat > $name <<EOF +[require] +GLSL >= 1.00 es +GL >= 2.0 es +$GL_require +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); +EOF + + if [ "$vtype" = "ivec" ]; then + emit_conversion_info >> $name + fi + + echo "" >> $name + emit_outerProduct_const_data $c $r $vtype $mat 1 >> $name + + cat >> $name <<EOF +varying vec4 color; + +void main() { + gl_Position = vertex; + gl_Position *= proj; + ${mat} result = outerProduct(c, r); + color = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[fragment shader] + +varying vec4 color; +void main() { gl_FragColor = color; } + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 +EOF +} + +function emit_fs_test +{ + c=$1 + r=$2 + vtype=$3 + mat=$4 + + if [ "$vtype" = "ivec" ]; then + name="fs-outerProduct-const-${mat}-ivec.shader_test" + else + name="fs-outerProduct-const-${mat}.shader_test" + fi + + if [ $c -ne $r ]; then + GL_require="# glUniformMatrix${r}x${c}fv only exists in OpenGL 2.1 or later. + +" + else + GL_require="" + fi + + cat > $name <<EOF +[require] +GLSL >= 1.00 es +GL >= 2.0 es +$GL_require +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +EOF + + if [ "$vtype" = "ivec" ]; then + emit_conversion_info >> $name + fi + + echo "" >> $name + emit_outerProduct_const_data $c $r $vtype $mat 1 >> $name + + cat >> $name <<EOF + +void main() { + ${mat} result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + + +draw rect 10 10 10 10 +probe rgb 15 15 0.0 1.0 0.0 +EOF +} + +for c in 2 3 4; do + for r in 2 3 4; do + emit_vs_test $c $r vec "mat${r}x${c}" + emit_vs_test $c $r ivec "mat${r}x${c}" + emit_fs_test $c $r vec "mat${r}x${c}" + emit_fs_test $c $r ivec "mat${r}x${c}" + if [ $c -eq $r ]; then + emit_vs_test $c $r vec "mat${r}" + emit_vs_test $c $r ivec "mat${r}" + emit_fs_test $c $r vec "mat${r}" + emit_fs_test $c $r ivec "mat${r}" + fi + done +done diff --git a/tests/spec/glsl-es-1.00/execution/1.20/outerProduct.sh b/tests/spec/glsl-es-1.00/execution/1.20/outerProduct.sh new file mode 100644 index 00000000..98d5d98c --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/outerProduct.sh @@ -0,0 +1,217 @@ +#!/bin/bash + +function emit_conversion_info +{ +cat <<EOF +/* From page 43 (page 49 of the PDF) of the GLSL 1.20 spec: + * + * "If an exact match is found, the other signatures are ignored, and the + * exact match is used. Otherwise, if no exact match is found, then the + * implicit conversions in Section 4.1.10 "Implicit Conversions" will be + * applied to the calling arguments if this can make their types match a + * signature." + * + * From page 20 (page 26 of the PDF) of the GLSL 1.20 spec: + * + * "In some situations, an expression and its type will be implicitly + * converted to a different type. The following table shows all allowed + * implicit conversions: + * + * Type of expression Can be implicitly converted to + * int float + * ivec2 vec2 + * ivec3 vec3 + * ivec4 vec4" + */ +EOF +} + +function emit_outerProduct_data +{ + c=$1 + r=$2 + vtype=$3 + + cbase=$4 + cvec="" + for i in $(seq $c); do + v=$(($i + $cbase)) + cvec="${cvec} ${v}" + done + + rbase=$(($cbase + $c)) + rvec="" + for i in $(seq $r); do + v=$(($i + $rbase)) + rvec="${rvec} ${v}" + done + + mat="" + for i in $(seq $r); do + for j in $(seq $c); do + m=$((($i + $rbase) * ($j + $cbase))) + mat="${mat} ${m}" + done + done + + echo + echo "uniform ${vtype}${c} c ${cvec}" + echo "uniform ${vtype}${r} r ${rvec}" + echo "uniform mat${r}x${c} expected ${mat}" + + x=$((20 * $4 - 10)) + echo "draw rect $x 10 10 10" + echo "probe rgb $(($x + 5)) 15 0.0 1.0 0.0" +} + +function emit_vs_test +{ + c=$1 + r=$2 + vtype=$3 + mat=$4 + + if [ "$vtype" = "ivec" ]; then + name="vs-outerProduct-${mat}-ivec.shader_test" + else + name="vs-outerProduct-${mat}.shader_test" + fi + + if [ $c -ne $r ]; then + GL_require="# glUniformMatrix${r}x${c}fv only exists in OpenGL 2.1 or later. + +" + else + GL_require="" + fi + + cat > $name <<EOF +[require] +GLSL >= 1.00 es +GL >= 2.0 es +$GL_require +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); +EOF + + if [ "$vtype" = "ivec" ]; then + emit_conversion_info >> $name + fi + + cat >> $name <<EOF + +uniform ${vtype}${c} c; +uniform ${vtype}${r} r; +uniform ${mat} expected; +varying vec4 color; + +void main() { + gl_Position = vertex; + gl_Position *= proj; + ${mat} result = outerProduct(c, r); + color = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[fragment shader] + +varying vec4 color; +void main() { gl_FragColor = color; } + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + +EOF + + emit_outerProduct_data $c $r $vtype 1 >> $name + emit_outerProduct_data $c $r $vtype 2 >> $name + emit_outerProduct_data $c $r $vtype 3 >> $name + emit_outerProduct_data $c $r $vtype 4 >> $name +} + +function emit_fs_test +{ + c=$1 + r=$2 + vtype=$3 + mat=$4 + + if [ "$vtype" = "ivec" ]; then + name="fs-outerProduct-${mat}-ivec.shader_test" + else + name="fs-outerProduct-${mat}.shader_test" + fi + + if [ $c -ne $r ]; then + GL_require="# glUniformMatrix${r}x${c}fv only exists in OpenGL 2.1 or later. + +" + else + GL_require="" + fi + + cat > $name <<EOF +[require] +GLSL >= 1.00 es +GL >= 2.0 es +$GL_require +[vertex shader] +attribute vec4 vertex; +mat4 proj = mat4( + 2.0/250.0, 0.0, 0.0, -1.0, + 0.0, 2.0/250.0, 0.0, -1.0, + 0.0, 0.0, -1.0, 0.0, + 0.0, 0.0, 0.0, 1.0); + +void main() { gl_Position = vertex; + gl_Position *= proj; } + +[fragment shader] +EOF + + if [ "$vtype" = "ivec" ]; then + emit_conversion_info >> $name + fi + + cat >> $name <<EOF + +uniform ${vtype}${c} c; +uniform ${vtype}${r} r; +uniform ${mat} expected; + +void main() { + ${mat} result = outerProduct(c, r); + gl_FragColor = (result == expected) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +clear color 0.5 0.5 0.5 0.0 +clear + +EOF + + emit_outerProduct_data $c $r $vtype 1 >> $name + emit_outerProduct_data $c $r $vtype 2 >> $name + emit_outerProduct_data $c $r $vtype 3 >> $name + emit_outerProduct_data $c $r $vtype 4 >> $name +} + +for c in 2 3 4; do + for r in 2 3 4; do + emit_vs_test $c $r vec "mat${r}x${c}" + emit_vs_test $c $r ivec "mat${r}x${c}" + emit_fs_test $c $r vec "mat${r}x${c}" + emit_fs_test $c $r ivec "mat${r}x${c}" + if [ $c -eq $r ]; then + emit_vs_test $c $r vec "mat${r}" + emit_vs_test $c $r ivec "mat${r}" + emit_fs_test $c $r vec "mat${r}" + emit_fs_test $c $r ivec "mat${r}" + fi + done +done diff --git a/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/qualifiers.out b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/qualifiers.out new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/qualifiers.out diff --git a/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-int-float-to-float-float-float-return.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-int-float-to-float-float-float-return.shader_test new file mode 100644 index 00000000..15743c53 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-int-float-to-float-float-float-return.shader_test @@ -0,0 +1,46 @@ +# Test that implicit type conversion of out parameters works properly. +# +# From the GLSL 1.30 spec (which clarifies, but does not change, the +# rules for implicit type conversion in GLSL 1.20), section 6.1 +# (Function Definitions): +# +# Mismatched types on output parameters (out or inout) must have a +# conversion from the formal parameter type to the calling argument +# type. +# +# This test uses a complex function signature with three out +# parameters of various types, and a return value, to make sure the +# outputs aren't mixed up. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +float f(out int x, out int y, out float z) +{ + x = 4; + y = 5; + z = 0.75; + return 0.5; +} + +void main() +{ + gl_Position = gl_Vertex; + float value1; + float value2; + float value3; + float value4 = f(value1, value2, value3); + gl_FrontColor = vec4(1.0/value1, 1.0/value2, value3, value4); +} + +[fragment shader] +void main() +{ + gl_FragColor = gl_Color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.25 0.2 0.75 0.5 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-to-float-return.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-to-float-return.shader_test new file mode 100644 index 00000000..cf7f2b9f --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-to-float-return.shader_test @@ -0,0 +1,41 @@ +# Test that implicit type conversion of out parameters works properly. +# +# From the GLSL 1.30 spec (which clarifies, but does not change, the +# rules for implicit type conversion in GLSL 1.20), section 6.1 +# (Function Definitions): +# +# Mismatched types on output parameters (out or inout) must have a +# conversion from the formal parameter type to the calling argument +# type. +# +# This test uses a simple function returning float and taking a single +# out parameter. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +float f(out int x) +{ + x = 4; + return 0.5; +} + +void main() +{ + gl_Position = gl_Vertex; + float value1; + float value2 = f(value1); + gl_FrontColor = vec4(1.0/value1, value2, 0.0, 0.0); +} + +[fragment shader] +void main() +{ + gl_FragColor = gl_Color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.25 0.5 0.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-to-float.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-to-float.shader_test new file mode 100644 index 00000000..2c3a2ce7 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/qualifiers/vs-out-conversion-int-to-float.shader_test @@ -0,0 +1,40 @@ +# Test that implicit type conversion of out parameters works properly. +# +# From the GLSL 1.30 spec (which clarifies, but does not change, the +# rules for implicit type conversion in GLSL 1.20), section 6.1 +# (Function Definitions): +# +# Mismatched types on output parameters (out or inout) must have a +# conversion from the formal parameter type to the calling argument +# type. +# +# This test uses a simple function returning void and taking a single +# out parameter. + +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 +void f(out int x) +{ + x = 4; +} + +void main() +{ + gl_Position = gl_Vertex; + float value; + f(value); + gl_FrontColor = vec4(1.0/value); +} + +[fragment shader] +void main() +{ + gl_FragColor = gl_Color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgba 0.25 0.25 0.25 0.25 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/fs-structure-array.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/fs-structure-array.shader_test new file mode 100644 index 00000000..36f56444 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/fs-structure-array.shader_test @@ -0,0 +1,48 @@ +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 + +void main() +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 + +struct S { + int i; + float f; + vec4 v[2]; +}; + +uniform S s[2] = S[2](S(9, 33.3, vec4[2](vec4(1, 2, 3, 4), + vec4(9, 8, 7, 6))), + S(7, 22.2, vec4[2](vec4(5, 6, 7, 8), + vec4(3, 2, 1, 0)))); + +void main() +{ + vec4 color; + + if (s[0].i == 9 + && s[0].f == 33.3 + && s[0].v[0] == vec4(1, 2, 3, 4) + && s[0].v[1] == vec4(9, 8, 7, 6) + && s[1].i == 7 + && s[1].f == 22.2 + && s[1].v[0] == vec4(5, 6, 7, 8) + && s[1].v[1] == vec4(3, 2, 1, 0)) { + color = vec4(0, 1, 0, 1); + } else { + color = vec4(1, 0, 0, 1); + } + + gl_FragColor = color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgb 0 1 0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/fs-structure.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/fs-structure.shader_test new file mode 100644 index 00000000..3b0c9509 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/fs-structure.shader_test @@ -0,0 +1,44 @@ +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 + +void main() +{ + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +varying vec4 color; + +struct S { + int i; + float f; + vec4 v[2]; +}; + +uniform S s = S(9, 33.3, vec4[2](vec4(1, 2, 3, 4), + vec4(9, 8, 7, 6))); + +void main() +{ + vec4 color; + + if (s.i == 9 + && s.f == 33.3 + && s.v[0] == vec4(1, 2, 3, 4) + && s.v[1] == vec4(9, 8, 7, 6)) { + color = vec4(0, 1, 0, 1); + } else { + color = vec4(1, 0, 0, 1); + } + + + gl_FragColor = color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgb 0 1 0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/uniform-initializer.out b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/uniform-initializer.out new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/uniform-initializer.out diff --git a/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/vs-structure-array.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/vs-structure-array.shader_test new file mode 100644 index 00000000..7b8bd508 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/vs-structure-array.shader_test @@ -0,0 +1,48 @@ +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 + +struct S { + int i; + float f; + vec4 v[2]; +}; + +uniform S s[2] = S[2](S(9, 33.3, vec4[2](vec4(1, 2, 3, 4), + vec4(9, 8, 7, 6))), + S(7, 22.2, vec4[2](vec4(5, 6, 7, 8), + vec4(3, 2, 1, 0)))); +varying vec4 color; + +void main() +{ + if (s[0].i == 9 + && s[0].f == 33.3 + && s[0].v[0] == vec4(1, 2, 3, 4) + && s[0].v[1] == vec4(9, 8, 7, 6) + && s[1].i == 7 + && s[1].f == 22.2 + && s[1].v[0] == vec4(5, 6, 7, 8) + && s[1].v[1] == vec4(3, 2, 1, 0)) { + color = vec4(0, 1, 0, 1); + } else { + color = vec4(1, 0, 0, 1); + } + + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +varying vec4 color; + +void main() +{ + gl_FragColor = color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgb 0 1 0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/vs-structure.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/vs-structure.shader_test new file mode 100644 index 00000000..f2fa32d1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/uniform-initializer/vs-structure.shader_test @@ -0,0 +1,42 @@ +[require] +GLSL >= 1.20 + +[vertex shader] +#version 120 + +struct S { + int i; + float f; + vec4 v[2]; +}; + +uniform S s = S(9, 33.3, vec4[2](vec4(1, 2, 3, 4), + vec4(9, 8, 7, 6))); +varying vec4 color; + +void main() +{ + if (s.i == 9 + && s.f == 33.3 + && s.v[0] == vec4(1, 2, 3, 4) + && s.v[1] == vec4(9, 8, 7, 6)) { + color = vec4(0, 1, 0, 1); + } else { + color = vec4(1, 0, 0, 1); + } + + gl_Position = gl_Vertex; +} + +[fragment shader] +#version 120 +varying vec4 color; + +void main() +{ + gl_FragColor = color; +} + +[test] +draw rect -1 -1 2 2 +probe all rgb 0 1 0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-rd.shader_test new file mode 100644 index 00000000..63d9533e --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-rd.shader_test @@ -0,0 +1,46 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int col; +uniform vec2 expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int col; +uniform vec2 expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[1][col] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform vec2 expect 5 6 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 expect 7 8 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-row-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-row-rd.shader_test new file mode 100644 index 00000000..4966e069 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-row-rd.shader_test @@ -0,0 +1,60 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[1][col][row] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform int row 0 +uniform float expect 5 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 6 +draw rect 45 20 10 10 +probe rgb 50 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 7 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 8 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test new file mode 100644 index 00000000..5bc8ebf0 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-row-wr.shader_test @@ -0,0 +1,75 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int row; +uniform int col; +uniform float value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[1] = src_matrix; + dst_matrix[1][col][row] = value; + gl_FragColor = (distance(dst_matrix[1] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 0.861223395812970 0.603473877011433 0.891622340451180 +uniform float value 0.241498998195656 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 666.0 0.603473877011433 0.891622340451180 +uniform float value 0.861223395812970 +draw rect 45 20 10 10 +probe rgb 50 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-wr.shader_test new file mode 100644 index 00000000..32eeaf98 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-col-wr.shader_test @@ -0,0 +1,56 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int col; +uniform vec2 value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[1] = src_matrix; + dst_matrix[1][col] = value; + gl_FragColor = (distance(dst_matrix[1] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 777.0 0.603473877011433 0.891622340451180 +uniform vec2 value 0.241498998195656 0.861223395812970 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-rd.shader_test new file mode 100644 index 00000000..61df7269 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-rd.shader_test @@ -0,0 +1,71 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int index; +uniform int col; +uniform vec2 expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int index; +uniform int col; +uniform vec2 expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[index][col] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int col 0 +uniform vec2 expect 1 2 +draw rect 5 5 10 10 +probe rgb 10 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 expect 3 4 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int index 1 +uniform int col 0 +uniform vec2 expect 5 6 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 expect 7 8 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int index 2 +uniform int col 0 +uniform vec2 expect 9 10 +draw rect 85 5 10 10 +probe rgb 90 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 expect 11 12 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-row-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-row-rd.shader_test new file mode 100644 index 00000000..568bbeb1 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-row-rd.shader_test @@ -0,0 +1,109 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int index; +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int index; +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[index][col][row] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int col 0 +uniform int row 0 +uniform float expect 1 +draw rect 5 5 10 10 +probe rgb 10 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 2 +draw rect 5 20 10 10 +probe rgb 10 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 3 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 4 +draw rect 20 20 10 10 +probe rgb 25 25 0.0 1.0 0.0 + +uniform int index 1 +uniform int col 0 +uniform int row 0 +uniform float expect 5 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 6 +draw rect 45 20 10 10 +probe rgb 50 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 7 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 8 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int index 2 +uniform int col 0 +uniform int row 0 +uniform float expect 9 +draw rect 85 5 10 10 +probe rgb 90 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 10 +draw rect 85 20 10 10 +probe rgb 90 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 11 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 12 +draw rect 100 20 10 10 +probe rgb 105 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-row-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-row-wr.shader_test new file mode 100644 index 00000000..eca3415e --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-row-wr.shader_test @@ -0,0 +1,146 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int row; +uniform int col; +uniform float value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[index] = src_matrix; + dst_matrix[index][col][row] = value; + gl_FragColor = (distance(dst_matrix[index] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int col 0 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 0.861223395812970 0.603473877011433 0.891622340451180 +uniform float value 0.241498998195656 +draw rect 5 5 10 10 +probe rgb 10 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 666.0 0.603473877011433 0.891622340451180 +uniform float value 0.861223395812970 +draw rect 5 20 10 10 +probe rgb 10 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 20 20 10 10 +probe rgb 25 25 0.0 1.0 0.0 + +uniform int index 1 +uniform int col 0 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 0.861223395812970 0.603473877011433 0.891622340451180 +uniform float value 0.241498998195656 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 666.0 0.603473877011433 0.891622340451180 +uniform float value 0.861223395812970 +draw rect 45 20 10 10 +probe rgb 50 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int index 2 +uniform int col 0 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 0.861223395812970 0.603473877011433 0.891622340451180 +uniform float value 0.241498998195656 +draw rect 85 5 10 10 +probe rgb 90 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 666.0 0.603473877011433 0.891622340451180 +uniform float value 0.861223395812970 +draw rect 85 20 10 10 +probe rgb 90 25 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 100 20 10 10 +probe rgb 105 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-wr.shader_test new file mode 100644 index 00000000..df1d6437 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-col-wr.shader_test @@ -0,0 +1,91 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int col; +uniform vec2 value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[index] = src_matrix; + dst_matrix[index][col] = value; + gl_FragColor = (distance(dst_matrix[index] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int col 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 777.0 0.603473877011433 0.891622340451180 +uniform vec2 value 0.241498998195656 0.861223395812970 +draw rect 5 5 10 10 +probe rgb 10 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int index 1 +uniform int col 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 777.0 0.603473877011433 0.891622340451180 +uniform vec2 value 0.241498998195656 0.861223395812970 +draw rect 45 5 10 10 +probe rgb 50 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int index 2 +uniform int col 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 666.0 777.0 0.603473877011433 0.891622340451180 +uniform vec2 value 0.241498998195656 0.861223395812970 +draw rect 85 5 10 10 +probe rgb 90 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-rd.shader_test new file mode 100644 index 00000000..aba81276 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-rd.shader_test @@ -0,0 +1,51 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int index; +uniform vec2 expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int index; +uniform vec2 expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[index][1] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform vec2 expect 3 4 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int index 1 +uniform vec2 expect 7 8 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int index 2 +uniform vec2 expect 11 12 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-row-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-row-rd.shader_test new file mode 100644 index 00000000..9f617442 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-row-rd.shader_test @@ -0,0 +1,71 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int index; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int index; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[index][1][row] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int row 0 +uniform float expect 3 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 4 +draw rect 20 20 10 10 +probe rgb 25 25 0.0 1.0 0.0 + +uniform int index 1 +uniform int row 0 +uniform float expect 7 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 8 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int index 2 +uniform int row 0 +uniform float expect 11 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 12 +draw rect 100 20 10 10 +probe rgb 105 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-row-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-row-wr.shader_test new file mode 100644 index 00000000..d4fff20a --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-row-wr.shader_test @@ -0,0 +1,92 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int row; +uniform int col; +uniform float value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[index] = src_matrix; + dst_matrix[index][1][row] = value; + gl_FragColor = (distance(dst_matrix[index] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 20 20 10 10 +probe rgb 25 25 0.0 1.0 0.0 + +uniform int index 1 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int index 2 +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 100 20 10 10 +probe rgb 105 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-wr.shader_test new file mode 100644 index 00000000..2ec45d99 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-index-wr.shader_test @@ -0,0 +1,64 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int col; +uniform vec2 value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[index] = src_matrix; + dst_matrix[index][1] = value; + gl_FragColor = (distance(dst_matrix[index] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int index 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int index 2 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 100 5 10 10 +probe rgb 105 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-rd.shader_test new file mode 100644 index 00000000..572ea225 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-rd.shader_test @@ -0,0 +1,38 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform vec2 expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform vec2 expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[1][1] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform vec2 expect 7 8 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-row-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-row-rd.shader_test new file mode 100644 index 00000000..5219fd81 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-row-rd.shader_test @@ -0,0 +1,46 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + mat2x2[3] m = mat2x2[3]( + mat2x2(1.0, 2.0, 3.0, 4.0), + mat2x2(5.0, 6.0, 7.0, 8.0), + mat2x2(9.0, 10.0, 11.0, 12.0)); + + gl_FragColor = (m[1][1][row] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int row 0 +uniform float expect 7 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 8 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-row-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-row-wr.shader_test new file mode 100644 index 00000000..a9efc766 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-row-wr.shader_test @@ -0,0 +1,57 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int row; +uniform int col; +uniform float value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[1] = src_matrix; + dst_matrix[1][1][row] = value; + gl_FragColor = (distance(dst_matrix[1] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int row 0 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 0.891622340451180 +uniform float value 0.603473877011433 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 0.603473877011433 666.0 +uniform float value 0.891622340451180 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-wr.shader_test new file mode 100644 index 00000000..bdb4c0b6 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat2-wr.shader_test @@ -0,0 +1,47 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat2x2 src_matrix; +uniform vec2 v; +uniform vec2 expect; +uniform int index; +uniform int col; +uniform vec2 value; + +void main() +{ + mat2x2[3] dst_matrix = mat2x2[3](mat2x2(0.0), mat2x2(0.0), mat2x2(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[1] = src_matrix; + dst_matrix[1][1] = value; + gl_FragColor = (distance(dst_matrix[1] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform vec2 v 0.803161418975390 0.852987140792140 +uniform vec2 expect 0.708718134966688 1.452243795483797 +uniform mat2x2 src_matrix 0.241498998195656 0.861223395812970 666.0 777.0 +uniform vec2 value 0.603473877011433 0.891622340451180 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-rd.shader_test new file mode 100644 index 00000000..a07de223 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-rd.shader_test @@ -0,0 +1,51 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int col; +uniform vec3 expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int col; +uniform vec3 expect; +varying vec4 color; + +void main() +{ + mat3x3[3] m = mat3x3[3]( + mat3x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), + mat3x3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), + mat3x3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); + + gl_FragColor = (m[1][col] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform vec3 expect 10 11 12 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec3 expect 13 14 15 +draw rect 75 5 10 10 +probe rgb 80 10 0.0 1.0 0.0 + +uniform int col 2 +uniform vec3 expect 16 17 18 +draw rect 90 5 10 10 +probe rgb 95 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-row-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-row-rd.shader_test new file mode 100644 index 00000000..d8481c34 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-row-rd.shader_test @@ -0,0 +1,86 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + mat3x3[3] m = mat3x3[3]( + mat3x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), + mat3x3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), + mat3x3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); + + gl_FragColor = (m[1][col][row] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform int row 0 +uniform float expect 10 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 11 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 12 +draw rect 60 35 10 10 +probe rgb 65 40 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 13 +draw rect 75 5 10 10 +probe rgb 80 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 14 +draw rect 75 20 10 10 +probe rgb 80 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 15 +draw rect 75 35 10 10 +probe rgb 80 40 0.0 1.0 0.0 + +uniform int col 2 +uniform int row 0 +uniform float expect 16 +draw rect 90 5 10 10 +probe rgb 95 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 17 +draw rect 90 20 10 10 +probe rgb 95 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 18 +draw rect 90 35 10 10 +probe rgb 95 40 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-row-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-row-wr.shader_test new file mode 100644 index 00000000..104b77c3 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-row-wr.shader_test @@ -0,0 +1,116 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat3x3 src_matrix; +uniform vec3 v; +uniform vec3 expect; +uniform int index; +uniform int row; +uniform int col; +uniform float value; + +void main() +{ + mat3x3[3] dst_matrix = mat3x3[3](mat3x3(0.0), mat3x3(0.0), mat3x3(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[1] = src_matrix; + dst_matrix[1][col][row] = value; + gl_FragColor = (distance(dst_matrix[1] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform int row 0 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 666.0 0.722190133917966 0.239853948232558 0.550143078409278 0.591962645398579 0.467616286531193 0.850846377186973 0.511303112962423 0.270815003356504 +uniform float value 0.493944462129466 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 666.0 0.239853948232558 0.550143078409278 0.591962645398579 0.467616286531193 0.850846377186973 0.511303112962423 0.270815003356504 +uniform float value 0.722190133917966 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int row 2 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 666.0 0.550143078409278 0.591962645398579 0.467616286531193 0.850846377186973 0.511303112962423 0.270815003356504 +uniform float value 0.239853948232558 +draw rect 60 35 10 10 +probe rgb 65 40 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 666.0 0.591962645398579 0.467616286531193 0.850846377186973 0.511303112962423 0.270815003356504 +uniform float value 0.550143078409278 +draw rect 75 5 10 10 +probe rgb 80 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 0.550143078409278 666.0 0.467616286531193 0.850846377186973 0.511303112962423 0.270815003356504 +uniform float value 0.591962645398579 +draw rect 75 20 10 10 +probe rgb 80 25 0.0 1.0 0.0 + +uniform int row 2 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 0.550143078409278 0.591962645398579 666.0 0.850846377186973 0.511303112962423 0.270815003356504 +uniform float value 0.467616286531193 +draw rect 75 35 10 10 +probe rgb 80 40 0.0 1.0 0.0 + +uniform int col 2 +uniform int row 0 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 0.550143078409278 0.591962645398579 0.467616286531193 666.0 0.511303112962423 0.270815003356504 +uniform float value 0.850846377186973 +draw rect 90 5 10 10 +probe rgb 95 10 0.0 1.0 0.0 + +uniform int row 1 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 0.550143078409278 0.591962645398579 0.467616286531193 0.850846377186973 666.0 0.270815003356504 +uniform float value 0.511303112962423 +draw rect 90 20 10 10 +probe rgb 95 25 0.0 1.0 0.0 + +uniform int row 2 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 0.550143078409278 0.591962645398579 0.467616286531193 0.850846377186973 0.511303112962423 666.0 +uniform float value 0.270815003356504 +draw rect 90 35 10 10 +probe rgb 95 40 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-wr.shader_test new file mode 100644 index 00000000..af914683 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-col-wr.shader_test @@ -0,0 +1,64 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat3x3 src_matrix; +uniform vec3 v; +uniform vec3 expect; +uniform int index; +uniform int col; +uniform vec3 value; + +void main() +{ + mat3x3[3] dst_matrix = mat3x3[3](mat3x3(0.0), mat3x3(0.0), mat3x3(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[1] = src_matrix; + dst_matrix[1][col] = value; + gl_FragColor = (distance(dst_matrix[1] * v, expect) < 1e-6) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int col 0 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 666.0 777.0 888.0 0.550143078409278 0.591962645398579 0.467616286531193 0.850846377186973 0.511303112962423 0.270815003356504 +uniform vec3 value 0.493944462129466 0.722190133917966 0.239853948232558 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 666.0 777.0 888.0 0.850846377186973 0.511303112962423 0.270815003356504 +uniform vec3 value 0.550143078409278 0.591962645398579 0.467616286531193 +draw rect 75 5 10 10 +probe rgb 80 10 0.0 1.0 0.0 + +uniform int col 2 +uniform vec3 v 0.681652305322399 0.210426138878113 0.185916924650237 +uniform vec3 expect 0.610649606928364 0.711906885823636 0.312244778977868 +uniform mat3x3 src_matrix 0.493944462129466 0.722190133917966 0.239853948232558 0.550143078409278 0.591962645398579 0.467616286531193 666.0 777.0 888.0 +uniform vec3 value 0.850846377186973 0.511303112962423 0.270815003356504 +draw rect 90 5 10 10 +probe rgb 95 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-rd.shader_test new file mode 100644 index 00000000..26f4803d --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-rd.shader_test @@ -0,0 +1,86 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int index; +uniform int col; +uniform vec3 expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int index; +uniform int col; +uniform vec3 expect; +varying vec4 color; + +void main() +{ + mat3x3[3] m = mat3x3[3]( + mat3x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), + mat3x3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), + mat3x3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); + + gl_FragColor = (m[index][col] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int col 0 +uniform vec3 expect 1 2 3 +draw rect 5 5 10 10 +probe rgb 10 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec3 expect 4 5 6 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int col 2 +uniform vec3 expect 7 8 9 +draw rect 35 5 10 10 +probe rgb 40 10 0.0 1.0 0.0 + +uniform int index 1 +uniform int col 0 +uniform vec3 expect 10 11 12 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec3 expect 13 14 15 +draw rect 75 5 10 10 +probe rgb 80 10 0.0 1.0 0.0 + +uniform int col 2 +uniform vec3 expect 16 17 18 +draw rect 90 5 10 10 +probe rgb 95 10 0.0 1.0 0.0 + +uniform int index 2 +uniform int col 0 +uniform vec3 expect 19 20 21 +draw rect 115 5 10 10 +probe rgb 120 10 0.0 1.0 0.0 + +uniform int col 1 +uniform vec3 expect 22 23 24 +draw rect 130 5 10 10 +probe rgb 135 10 0.0 1.0 0.0 + +uniform int col 2 +uniform vec3 expect 25 26 27 +draw rect 145 5 10 10 +probe rgb 150 10 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-row-rd.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-row-rd.shader_test new file mode 100644 index 00000000..f4dc1658 --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-row-rd.shader_test @@ -0,0 +1,187 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-read.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +uniform int index; +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} + +[fragment shader] +uniform int index; +uniform int col; +uniform int row; +uniform float expect; +varying vec4 color; + +void main() +{ + mat3x3[3] m = mat3x3[3]( + mat3x3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0), + mat3x3(10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0), + mat3x3(19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0)); + + gl_FragColor = (m[index][col][row] == expect) + ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0); +} + +[test] +clear color 0.5 0.5 0.5 0.5 +clear +ortho + +uniform int index 0 +uniform int col 0 +uniform int row 0 +uniform float expect 1 +draw rect 5 5 10 10 +probe rgb 10 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 2 +draw rect 5 20 10 10 +probe rgb 10 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 3 +draw rect 5 35 10 10 +probe rgb 10 40 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 4 +draw rect 20 5 10 10 +probe rgb 25 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 5 +draw rect 20 20 10 10 +probe rgb 25 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 6 +draw rect 20 35 10 10 +probe rgb 25 40 0.0 1.0 0.0 + +uniform int col 2 +uniform int row 0 +uniform float expect 7 +draw rect 35 5 10 10 +probe rgb 40 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 8 +draw rect 35 20 10 10 +probe rgb 40 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 9 +draw rect 35 35 10 10 +probe rgb 40 40 0.0 1.0 0.0 + +uniform int index 1 +uniform int col 0 +uniform int row 0 +uniform float expect 10 +draw rect 60 5 10 10 +probe rgb 65 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 11 +draw rect 60 20 10 10 +probe rgb 65 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 12 +draw rect 60 35 10 10 +probe rgb 65 40 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 13 +draw rect 75 5 10 10 +probe rgb 80 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 14 +draw rect 75 20 10 10 +probe rgb 80 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 15 +draw rect 75 35 10 10 +probe rgb 80 40 0.0 1.0 0.0 + +uniform int col 2 +uniform int row 0 +uniform float expect 16 +draw rect 90 5 10 10 +probe rgb 95 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 17 +draw rect 90 20 10 10 +probe rgb 95 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 18 +draw rect 90 35 10 10 +probe rgb 95 40 0.0 1.0 0.0 + +uniform int index 2 +uniform int col 0 +uniform int row 0 +uniform float expect 19 +draw rect 115 5 10 10 +probe rgb 120 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 20 +draw rect 115 20 10 10 +probe rgb 120 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 21 +draw rect 115 35 10 10 +probe rgb 120 40 0.0 1.0 0.0 + +uniform int col 1 +uniform int row 0 +uniform float expect 22 +draw rect 130 5 10 10 +probe rgb 135 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 23 +draw rect 130 20 10 10 +probe rgb 135 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 24 +draw rect 130 35 10 10 +probe rgb 135 40 0.0 1.0 0.0 + +uniform int col 2 +uniform int row 0 +uniform float expect 25 +draw rect 145 5 10 10 +probe rgb 150 10 0.0 1.0 0.0 + +uniform int row 1 +uniform float expect 26 +draw rect 145 20 10 10 +probe rgb 150 25 0.0 1.0 0.0 + +uniform int row 2 +uniform float expect 27 +draw rect 145 35 10 10 +probe rgb 150 40 0.0 1.0 0.0 diff --git a/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-row-wr.shader_test b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-row-wr.shader_test new file mode 100644 index 00000000..764e46bb --- /dev/null +++ b/tests/spec/glsl-es-1.00/execution/1.20/variable-indexing/fs-temp-array-mat3-index-col-row-wr.shader_test @@ -0,0 +1,269 @@ +# Test generated by: +# ../../../glsl-1.10/variable-index-write.sh 1.20 + +[require] +GLSL >= 1.20 + +[vertex shader] +void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } + +[fragment shader] +uniform mat3x3 src_matrix; +uniform vec3 v; +uniform vec3 expect; +uniform int index; +uniform int row; +uniform int col; +uniform float value; + +void main() +{ + mat3x3[3] dst_matrix = mat3x3[3](mat3x3(0.0), mat3x3(0.0), mat3x3(0.0)); + + /* Patch the supplied matrix with the supplied value. If the resulting + * matrix is correct, it will transform the input vector to the expected + * value. Verify that the distance between the result and the expected + * vector is less than epsilon. + * + * NOTE: This test assumes that reads of arrays using non-constant + * indicies works correctly. If reads and writes happen to fail in an + * identical manner, this test may give false positives. + */ + dst_matrix[index] = src_matrix; |