1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/canvas/test/webgl-conformance/conformance/glsl/misc/glsl-long-variable-names.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,249 @@ 1.4 +<!DOCTYPE html> 1.5 +<html> 1.6 +<head> 1.7 + <meta charset="utf-8"> 1.8 + <title>glsl long variable name mapping tests</title> 1.9 + <link rel="stylesheet" href="../../../resources/js-test-style.css"/> 1.10 + <script src="../../../resources/js-test-pre.js"></script> 1.11 + <script src="../../resources/webgl-test.js"> </script> 1.12 +</head> 1.13 +<body> 1.14 + <canvas id="example" width="50" height="50"> 1.15 + There is supposed to be an example drawing here, but it's not important. 1.16 + </canvas> 1.17 + <div id="description"></div> 1.18 + <div id="console"></div> 1.19 + <script id="vshader_shared_uniform" type="x-shader/x-vertex"> 1.20 + attribute vec3 vPosition; 1.21 + uniform mediump float value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890; 1.22 + void main() 1.23 + { 1.24 + gl_Position = vec4(vPosition, value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890); 1.25 + } 1.26 + </script> 1.27 + 1.28 + <script id="fshader_shared_uniform" type="x-shader/x-fragment"> 1.29 + precision mediump float; 1.30 + uniform float value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890; 1.31 + void main() 1.32 + { 1.33 + gl_FragColor = vec4(1.0, 0.0, value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890, 1.0); 1.34 + } 1.35 + </script> 1.36 + 1.37 + <script id="vshader_uniform_array" type="x-shader/x-vertex"> 1.38 + attribute vec3 vPosition; 1.39 + void main() 1.40 + { 1.41 + gl_Position = vec4(vPosition, 1.0); 1.42 + } 1.43 + </script> 1.44 + 1.45 + <script id="fshader_uniform_array" type="x-shader/x-fragment"> 1.46 + precision mediump float; 1.47 + uniform float color01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567[2]; 1.48 + void main() 1.49 + { 1.50 + gl_FragColor = vec4(color01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567[0], color01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567[1], 1.0, 1.0); 1.51 + } 1.52 + </script> 1.53 + 1.54 + <script id="vshader_varying" type="x-shader/x-vertex"> 1.55 + attribute vec3 vPosition; 1.56 + varying float value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890; 1.57 + void main() 1.58 + { 1.59 + value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 = 1.0; 1.60 + gl_Position = vec4(vPosition, 1.0); 1.61 + } 1.62 + </script> 1.63 + 1.64 + <script id="fshader_varying" type="x-shader/x-fragment"> 1.65 + precision mediump float; 1.66 + varying float value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890; 1.67 + void main() 1.68 + { 1.69 + gl_FragColor = vec4(value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890, 0.0, 1.0, 1.0); 1.70 + } 1.71 + </script> 1.72 + 1.73 + <script id="vshader_local" type="x-shader/x-vertex"> 1.74 + attribute vec3 vPosition; 1.75 + void main() 1.76 + { 1.77 + for (int i012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 = 0; i012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 < 1; ++i012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234) 1.78 + { 1.79 + gl_Position = vec4(vPosition, 1.0); 1.80 + } 1.81 + } 1.82 + </script> 1.83 + 1.84 + <script id="fshader_local" type="x-shader/x-fragment"> 1.85 + precision mediump float; 1.86 + void main() 1.87 + { 1.88 + for (int i012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 = 0; i012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234 < 1; ++i012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234) 1.89 + { 1.90 + gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); 1.91 + } 1.92 + } 1.93 + </script> 1.94 + 1.95 + <script id="vshader_attrib" type="x-shader/x-vertex"> 1.96 + attribute vec3 vPosition0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456; 1.97 + void main() 1.98 + { 1.99 + gl_Position = vec4(vPosition0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456, 1.0); 1.100 + } 1.101 + </script> 1.102 + 1.103 + <script id="fshader_attrib" type="x-shader/x-fragment"> 1.104 + precision mediump float; 1.105 + void main() 1.106 + { 1.107 + gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); 1.108 + } 1.109 + </script> 1.110 + 1.111 + <script> 1.112 + if (window.initNonKhronosFramework) { 1.113 + window.initNonKhronosFramework(false); 1.114 + } 1.115 + 1.116 + description("Verify that shader long variable names works fine if they are within 256 characters."); 1.117 + 1.118 + debug("Test same long uniform name in both vertex shader and fragment shader"); 1.119 + var gl = initWebGL("example", "vshader_shared_uniform", "fshader_shared_uniform", [ "vPosition"], [ 0, 0, 0, 1 ], 1); 1.120 + shouldBeNonNull("gl"); 1.121 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.122 + var prog = gl.getParameter(gl.CURRENT_PROGRAM); 1.123 + shouldBeNonNull("prog"); 1.124 + var valueLoc = gl.getUniformLocation(prog, "value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); 1.125 + shouldBeNonNull("valueLoc"); 1.126 + shouldBe("gl.getProgramParameter(prog, gl.ACTIVE_UNIFORMS)", "1"); 1.127 + var activeUniform = gl.getActiveUniform(prog, 0); 1.128 + shouldBeNonNull("activeUniform"); 1.129 + shouldBe("activeUniform.type", "gl.FLOAT"); 1.130 + shouldBe("activeUniform.size", "1"); 1.131 + shouldBe("activeUniform.name", "'value01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'"); 1.132 + gl.uniform1f(valueLoc, 1.0); 1.133 + drawAndCheckPixels(gl); 1.134 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.135 + debug(""); 1.136 + 1.137 + debug("Test long uniform array name"); 1.138 + var gl = initWebGL("example", "vshader_uniform_array", "fshader_uniform_array", [ "vPosition"], [ 0, 0, 0, 1 ], 1); 1.139 + shouldBeNonNull("gl"); 1.140 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.141 + var prog = gl.getParameter(gl.CURRENT_PROGRAM); 1.142 + shouldBeNonNull("prog"); 1.143 + var redLoc = gl.getUniformLocation(prog, "color01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567[0]"); 1.144 + shouldBeNonNull("redLoc"); 1.145 + var greenLoc = gl.getUniformLocation(prog, "color01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567[1]"); 1.146 + shouldBeNonNull("greenLoc"); 1.147 + shouldBe("gl.getProgramParameter(prog, gl.ACTIVE_UNIFORMS)", "1"); 1.148 + var activeUniform = gl.getActiveUniform(prog, 0); 1.149 + shouldBeNonNull("activeUniform"); 1.150 + shouldBe("activeUniform.type", "gl.FLOAT"); 1.151 + shouldBe("activeUniform.size", "2"); 1.152 + shouldBe("activeUniform.name", "'color01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567[0]'"); 1.153 + gl.uniform1f(redLoc, 1.0); 1.154 + gl.uniform1f(greenLoc, 0.0); 1.155 + drawAndCheckPixels(gl); 1.156 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.157 + debug(""); 1.158 + 1.159 + debug("Test long varying name"); 1.160 + var gl = initWebGL("example", "vshader_varying", "fshader_varying", [ "vPosition"], [ 0, 0, 0, 1 ], 1); 1.161 + shouldBeNonNull("gl"); 1.162 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.163 + var prog = gl.getParameter(gl.CURRENT_PROGRAM); 1.164 + shouldBeNonNull("prog"); 1.165 + drawAndCheckPixels(gl); 1.166 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.167 + debug(""); 1.168 + 1.169 + debug("Test long local variable name"); 1.170 + var gl = initWebGL("example", "vshader_varying", "fshader_varying", [ "vPosition"], [ 0, 0, 0, 1 ], 1); 1.171 + shouldBeNonNull("gl"); 1.172 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.173 + var prog = gl.getParameter(gl.CURRENT_PROGRAM); 1.174 + shouldBeNonNull("prog"); 1.175 + drawAndCheckPixels(gl); 1.176 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.177 + debug(""); 1.178 + 1.179 + debug("Test long attribute name"); 1.180 + var gl = initWebGL("example", "vshader_attrib", "fshader_attrib", [ "vPosition0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456"], [ 0, 0, 0, 1 ], 1); 1.181 + shouldBeNonNull("gl"); 1.182 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.183 + var prog = gl.getParameter(gl.CURRENT_PROGRAM); 1.184 + shouldBeNonNull("prog"); 1.185 + shouldBe("gl.getProgramParameter(prog, gl.ACTIVE_ATTRIBUTES)", "1"); 1.186 + var activeAttrib = gl.getActiveAttrib(prog, 0); 1.187 + shouldBeNonNull("activeAttrib"); 1.188 + shouldBe("activeAttrib.size", "1"); 1.189 + shouldBe("activeAttrib.type", "gl.FLOAT_VEC3"); 1.190 + shouldBe("activeAttrib.name", "'vPosition0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456'"); 1.191 + drawAndCheckPixels(gl); 1.192 + shouldBe("gl.getError()", "gl.NO_ERROR"); 1.193 + debug(""); 1.194 + 1.195 + 1.196 + function fail(x, y, buf, shouldBe) 1.197 + { 1.198 + var i = (y*50+x) * 4; 1.199 + var reason = "pixel at ("+x+","+y+") is ("+buf[i]+","+buf[i+1]+","+buf[i+2]+","+buf[i+3]+"), should be "+shouldBe; 1.200 + testFailed(reason); 1.201 + } 1.202 + 1.203 + function pass() 1.204 + { 1.205 + testPassed("drawing is correct"); 1.206 + } 1.207 + 1.208 + function drawAndCheckPixels(gl) 1.209 + { 1.210 + var vertexObject = gl.createBuffer(); 1.211 + gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject); 1.212 + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ 0,0.5,0, -0.5,-0.5,0, 0.5,-0.5,0 ]), gl.STATIC_DRAW); 1.213 + gl.enableVertexAttribArray(0); 1.214 + gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0); 1.215 + 1.216 + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); 1.217 + gl.drawArrays(gl.TRIANGLES, 0, 3); 1.218 + 1.219 + var buf = new Uint8Array(50 * 50 * 4); 1.220 + gl.readPixels(0, 0, 50, 50, gl.RGBA, gl.UNSIGNED_BYTE, buf); 1.221 + 1.222 + // Test several locations 1.223 + // First line should be all black 1.224 + for (var i = 0; i < 50; ++i) 1.225 + if (buf[i*4] != 0 || buf[i*4+1] != 0 || buf[i*4+2] != 0 || buf[i*4+3] != 255) { 1.226 + fail(i, 0, buf, "(0,0,0,255)"); 1.227 + return; 1.228 + } 1.229 + 1.230 + // Line 15 should be magenta for at least 10 pixels starting 20 pixels in 1.231 + var offset = (15*50+20) * 4; 1.232 + for (var i = 0; i < 10; ++i) 1.233 + if (buf[offset+i*4] != 255 || buf[offset+i*4+1] != 0 || buf[offset+i*4+2] != 255 || buf[offset+i*4+3] != 255) { 1.234 + fail(20 + i, 15, buf, "(255,0,255,255)"); 1.235 + return; 1.236 + } 1.237 + // Last line should be all black 1.238 + offset = (49*50) * 4; 1.239 + for (var i = 0; i < 50; ++i) 1.240 + if (buf[offset+i*4] != 0 || buf[offset+i*4+1] != 0 || buf[offset+i*4+2] != 0 || buf[offset+i*4+3] != 255) { 1.241 + fail(i, 49, buf, "(0,0,0,255)"); 1.242 + return; 1.243 + } 1.244 + 1.245 + pass(); 1.246 + } 1.247 + 1.248 + successfullyParsed = true; 1.249 + </script> 1.250 + <script>finishTest();</script> 1.251 +</body> 1.252 +</html>