nested-functions-should-not-crash.html (2082B)
1 <!-- 2 Copyright (c) 2019 The Khronos Group Inc. 3 Use of this source code is governed by an MIT-style license that can be 4 found in the LICENSE.txt file. 5 --> 6 7 <!DOCTYPE html> 8 <html> 9 <head> 10 <meta charset="utf-8"> 11 <title>Driver Bug - nested functions should not crash</title> 12 <link rel="stylesheet" href="../../../resources/js-test-style.css"/> 13 <script src="../../../js/js-test-pre.js"></script> 14 <script src="../../../js/webgl-test-utils.js"></script> 15 <script src="../../../js/glsl-conformance-test.js"></script> 16 </head> 17 <body> 18 <canvas id="example" width="40" height="40"> </canvas> 19 <div id="description"></div> 20 <div id="console"></div> 21 <script id="vshader" type="x-shader/x-vertex"> 22 void main(){ 23 gl_Position = vec4(0, 0, 0, 1); 24 } 25 </script> 26 <script id="fshaderUniformTest" type="x-shader/x-fragment"> 27 precision mediump float; 28 uniform vec4 u_uniform; 29 30 $(code) 31 32 void main() 33 { 34 gl_FragColor = function0(); 35 } 36 </script> 37 <script> 38 "use strict"; 39 var wtu = WebGLTestUtils; 40 var gl = wtu.create3DContext(); 41 42 var fUniformTestSource = wtu.getScript("fshaderUniformTest"); 43 44 var tests = [ 45 ]; 46 var counts = [ 47 { count:10, 48 mustPass: true, 49 }, 50 { count:100, 51 mustPass: false, 52 }, 53 { count: 1000, 54 mustPass: false, 55 }, 56 { count: 10000, 57 mustPass: false, 58 }, 59 ]; 60 var operators = ["+", "-", "/", "*"]; 61 counts.forEach(function(info) { 62 var generateCode = function(numVars) { 63 var codes = []; 64 codes.push("vec4 function" + numVars + "() { return u_uniform; }"); 65 for (var uu = 0; uu < numVars; ++uu) { 66 var id = numVars - uu - 1; 67 codes.push("vec4 function" + id + "() { return function" + (id + 1) + "(); }"); 68 } 69 return { 70 code: codes.join("\n\n"), 71 }; 72 }; 73 74 var subs = generateCode(info.count); 75 tests.push({ 76 vShaderId: "vshader", 77 vShaderSuccess: true, 78 fShaderSource: wtu.replaceParams(fUniformTestSource, subs), 79 fShaderSuccess: true, 80 linkSuccess: true, 81 ignoreResults: !info.mustPass, 82 passMsg: "shader with " + info.count + " nested functions", 83 }); 84 }); 85 GLSLConformanceTester.runTests(tests); 86 </script> 87 </body> 88 </html>