tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

shader-with-reserved-words.html (5067B)


      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>WebGL GLSL Conformance Tests - Reserved Words</title>
     12 <link rel="stylesheet" href="../../../resources/js-test-style.css"/>
     13 <link rel="stylesheet" href="../../../resources/glsl-feature-tests.css"/>
     14 <script src="../../../js/js-test-pre.js"></script>
     15 <script src="../../../js/webgl-test-utils.js"></script>
     16 </head>
     17 <body>
     18 <div id="description"></div>
     19 <div id="console"></div>
     20 <script id="vertexShader0" type="text/something-not-javascript">
     21 struct $replaceMe {
     22  vec4 $replaceMe;
     23 };
     24 struct Foo {
     25  $replaceMe $replaceMe;
     26 };
     27 attribute vec4 position;
     28 void main()
     29 {
     30    Foo f;
     31    f.$replaceMe.$replaceMe = position;
     32    gl_Position = f.$replaceMe.$replaceMe;
     33 }
     34 </script>
     35 <script id="fragmentShader0" type="text/something-not-javascript">
     36 precision mediump float;
     37 vec4 $replaceMe() {
     38    return vec4(0,1,0,1);
     39 }
     40 void main()
     41 {
     42    gl_FragColor = $replaceMe();
     43 }
     44 </script>
     45 <script id="vertexShader1" type="text/something-not-javascript">
     46 attribute vec4 $replaceMe;
     47 void main()
     48 {
     49    gl_Position = $replaceMe;
     50 }
     51 </script>
     52 <script id="fragmentShader1" type="text/something-not-javascript">
     53 precision mediump float;
     54 vec4 foo(vec4 $replaceMe) {
     55  return $replaceMe;
     56 }
     57 void main()
     58 {
     59    gl_FragColor = foo(vec4(1,0,1,1));
     60 }
     61 </script>
     62 <script id="vertexShader2" type="text/something-not-javascript">
     63 varying vec4 $replaceMe;
     64 attribute vec4 position;
     65 void main()
     66 {
     67    gl_Position = position;
     68    $replaceMe = position;
     69 }
     70 </script>
     71 <script id="fragmentShader2" type="text/something-not-javascript">
     72 precision mediump float;
     73 varying vec4 $replaceMe;
     74 void main()
     75 {
     76    gl_FragColor = $replaceMe;
     77 }
     78 </script>
     79 <script id="vertexShader3" type="text/something-not-javascript">
     80 attribute vec4 position;
     81 void main()
     82 {
     83    gl_Position = position;
     84 }
     85 </script>
     86 <script id="fragmentShader3" type="text/something-not-javascript">
     87 precision mediump float;
     88 uniform vec4 $replaceMe;
     89 void main()
     90 {
     91    gl_FragColor = $replaceMe;
     92 }
     93 </script>
     94 <script>
     95 "use strict";
     96 var GLSL_1_0_17_words = [
     97  "attribute",
     98  "const",
     99  "uniform",
    100  "varying",
    101  "break",
    102  "continue",
    103  "do",
    104  "for",
    105  "while",
    106  "if",
    107  "else",
    108  "in",
    109  "out",
    110  "inout",
    111  "float",
    112  "int",
    113  "void",
    114  "bool",
    115  "true",
    116  "false",
    117  "lowp",
    118  "mediump",
    119  "highp",
    120  "precision",
    121  "invariant",
    122  "discard",
    123  "return",
    124  "mat2",
    125  "mat3",
    126  "mat4",
    127  "vec2",
    128  "vec3",
    129  "vec4",
    130  "ivec2",
    131  "ivec3",
    132  "ivec4",
    133  "bvec2",
    134  "bvec3",
    135  "bvec4",
    136  "sampler2D",
    137  "samplerCube",
    138  "struct"
    139 ]
    140 
    141 var GLSL_1_0_17_FutureWords = [
    142  "asm",
    143  "class",
    144  "union",
    145  "enum",
    146  "typedef",
    147  "template",
    148  "this",
    149  "packed",
    150  "goto",
    151  "switch",
    152  "default",
    153  "inline",
    154  "noinline",
    155  "volatile",
    156  "public",
    157  "static",
    158  "extern",
    159  "external",
    160  "interface",
    161  "flat",
    162  "long",
    163  "short",
    164  "double",
    165  "half",
    166  "fixed",
    167  "unsigned",
    168  "superp",
    169  "input",
    170  "output",
    171  "hvec2",
    172  "hvec3",
    173  "hvec4",
    174  "dvec2",
    175  "dvec3",
    176  "dvec4",
    177  "fvec2",
    178  "fvec3",
    179  "fvec4",
    180  "sampler1D",
    181  "sampler3D",
    182  "sampler1DShadow",
    183  "sampler2DShadow",
    184  "sampler2DRect",
    185  "sampler3DRect",
    186  "sampler2DRectShadow",
    187  "sizeof",
    188  "cast",
    189  "namespace",
    190  "using",
    191  "__foo",      // something that has 2 underscores
    192  "foo__bar",   // something that has 2 underscores
    193  "gl_foo",     // something that starts with gl_
    194  "webgl_foo"   // something that starts with webgl_
    195 ];
    196 
    197 description();
    198 
    199 var wtu = WebGLTestUtils;
    200 var gl = wtu.create3DContext();
    201 
    202 var reservedWordsLists = [
    203  GLSL_1_0_17_words,
    204  GLSL_1_0_17_FutureWords
    205 ];
    206 
    207 var reservedWords = [];
    208 for (var ii = 0; ii < reservedWordsLists.length; ++ii) {
    209  var list = reservedWordsLists[ii];
    210  for (var jj = 0; jj < list.length; ++jj) {
    211    reservedWords.push(list[jj]);
    212  }
    213 }
    214 
    215 var src = [];
    216 for (var ii = 0; ii < 4; ++ii) {
    217  var vsrc = document.getElementById("vertexShader" + ii).text;
    218  var fsrc = document.getElementById("fragmentShader" + ii).text;
    219  src.push({vsrc: vsrc, fsrc: fsrc});
    220 }
    221 
    222 var wordNdx = 0;
    223 
    224 function testNextWord() {
    225  if (wordNdx >= reservedWords.length) {
    226    finishTest();
    227    return;
    228  }
    229  testWord(reservedWords[wordNdx]);
    230  ++wordNdx;
    231  setTimeout(testNextWord, 0);
    232 }
    233 testNextWord();
    234 
    235 function testWord(word) {
    236  debug("");
    237  debug("testing: " + word);
    238 
    239  for (var ii = 0; ii < src.length; ++ii) {
    240    var vs = src[ii].vsrc.replace(/\$replaceMe/g, word);
    241    var fs = src[ii].fsrc.replace(/\$replaceMe/g, word);
    242 
    243    var success = true;
    244    var program = wtu.loadProgram(gl, vs, fs, function(msg) {
    245      //debug(msg);
    246      success = false;
    247    }, true);
    248    if (success) {
    249      testFailed("shader with: '" + word + "' compiled even though it should not");
    250    } else {
    251      testPassed("shader with: '" + word + "' correctly failed to compile");
    252    }
    253    if (program) {
    254      gl.deleteProgram(program);
    255    }
    256    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no GL errors");
    257  }
    258 }
    259 
    260 var successfullyParsed = true;
    261 </script>
    262 </body>
    263 </html>