tor-browser

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

uninitialized-local-global-variables.html (8100B)


      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>Uninitialized local/global variables should be initialized</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 
     17 <script id="vs_uninit_in_frag" type="x-shader/x-vertex">
     18 precision mediump float;
     19 attribute vec4 a_position;
     20 void main() {
     21    gl_Position = a_position;
     22 }
     23 </script>
     24 
     25 <!-- Uninitialized local in vertex shader -->
     26 <script id="vs_uninit_local_in_vert" type="x-shader/x-vertex">
     27 precision mediump float;
     28 attribute vec4 a_position;
     29 varying vec3 v_uninit;
     30 void main() {
     31    vec3 uninit; // uninitialized
     32    v_uninit = uninit;
     33    gl_Position = a_position;
     34 }
     35 </script>
     36 <script id="fs_uninit_local_in_vert" type="x-shader/x-fragment">
     37 precision mediump float;
     38 varying vec3 v_uninit;
     39 void main() {
     40    gl_FragColor = v_uninit.xyzz;
     41 }
     42 </script>
     43 
     44 <!-- Uninitialized local in fragment shader -->
     45 <script id="fs_uninit_local_in_frag" type="x-shader/x-fragment">
     46 precision mediump float;
     47 void main() {
     48    vec2 uninit; // uninitialized
     49    gl_FragColor = uninit.xyyy;
     50 }
     51 </script>
     52 
     53 <!-- Uninitialized global in vertex shader -->
     54 <script id="vs_uninit_global_in_vert" type="x-shader/x-vertex">
     55 precision mediump float;
     56 attribute vec4 a_position;
     57 varying float v_uninit;
     58 float uninit; // uninitialized
     59 void main() {
     60    v_uninit = uninit;
     61    gl_Position = a_position;
     62 }
     63 </script>
     64 <script id="fs_uninit_global_in_vert" type="x-shader/x-fragment">
     65 precision mediump float;
     66 varying float v_uninit;
     67 void main() {
     68    gl_FragColor = vec4(v_uninit);
     69 }
     70 </script>
     71 
     72 <!-- Uninitialized global in fragment shader -->
     73 <script id="fs_uninit_global_in_frag" type="x-shader/x-fragment">
     74 precision mediump float;
     75 vec4 uninit; // uninitialized
     76 void main() {
     77    gl_FragColor = uninit;
     78 }
     79 </script>
     80 
     81 <!-- Uninitialized local int in fragment shader -->
     82 <script id="fs_uninit_local_int_in_frag" type="x-shader/x-fragment">
     83 precision mediump float;
     84 void main() {
     85    int uninit;
     86    gl_FragColor = vec4(uninit);
     87 }
     88 </script>
     89 
     90 <!-- Uninitialized local variable and another variable in the same declaration using it as an initializer in fragment shader -->
     91 <script id="fs_uninit_two_local_variables_in_declaration_in_frag" type="x-shader/x-fragment">
     92 precision mediump float;
     93 void main() {
     94    vec2 uninit, uninit2 = uninit;
     95    gl_FragColor = uninit2.xyyy;
     96 }
     97 </script>
     98 
     99 <!-- Uninitialized local array and another variable in the same declaration using it in its initializer in fragment shader -->
    100 <script id="fs_uninit_array_and_another_in_declaration_in_frag" type="x-shader/x-fragment">
    101 precision mediump float;
    102 void main() {
    103    vec2 uninit[2], uninit2 = uninit[0];
    104    gl_FragColor = uninit2.xyyy;
    105 }
    106 </script>
    107 
    108 <!-- Uninitialized global int in fragment shader -->
    109 <script id="fs_uninit_global_int_in_frag" type="x-shader/x-fragment">
    110 precision mediump float;
    111 int uninit; // uninitialized
    112 void main() {
    113    gl_FragColor = vec4(uninit);
    114 }
    115 </script>
    116 
    117 <!-- Uninitialized local struct in fragment shader -->
    118 <script id="fs_uninit_local_struct_in_frag" type="x-shader/x-fragment">
    119 precision mediump float;
    120 struct S { vec4 v; };
    121 void main() {
    122    S uninit; // uninitialized
    123    gl_FragColor = uninit.v;
    124 }
    125 </script>
    126 
    127 <!-- Uninitialized global struct in fragment shader -->
    128 <script id="fs_uninit_global_struct_in_frag" type="x-shader/x-fragment">
    129 precision mediump float;
    130 struct S { vec4 v; };
    131 S uninit; // uninitialized
    132 void main() {
    133    gl_FragColor = uninit.v;
    134 }
    135 </script>
    136 
    137 <!-- Uninitialized nameless local struct in fragment shader -->
    138 <script id="fs_uninit_nameless_local_struct_in_frag" type="x-shader/x-fragment">
    139 precision mediump float;
    140 void main() {
    141    struct { vec4 v; } uninit; // uninitialized
    142    gl_FragColor = uninit.v;
    143 }
    144 </script>
    145 
    146 <!-- Uninitialized nameless global struct in fragment shader -->
    147 <script id="fs_uninit_nameless_global_struct_in_frag" type="x-shader/x-fragment">
    148 precision mediump float;
    149 struct { vec4 v; } uninit; // uninitialized
    150 void main() {
    151    gl_FragColor = uninit.v;
    152 }
    153 </script>
    154 
    155 <!-- Uninitialized local bool in fragment shader -->
    156 <script id="fs_uninit_local_bool_in_frag" type="x-shader/x-fragment">
    157 precision mediump float;
    158 void main() {
    159    bool uninit[16]; // uninitialized
    160    bool result;
    161    for (int i = 0; i < 16; i++) {
    162        result = result || uninit[i];
    163    }
    164    gl_FragColor = result ? vec4(1, 0, 0, 1) : vec4(0);
    165 }
    166 </script>
    167 
    168 <!-- Uninitialized global bool in fragment shader -->
    169 <script id="fs_uninit_global_bool_in_frag" type="x-shader/x-fragment">
    170 precision mediump float;
    171 bool uninit[16]; // uninitialized
    172 void main() {
    173    bool result = false;
    174    for (int i = 0; i < 16; i++) {
    175        result = result || uninit[i];
    176    }
    177    gl_FragColor = result ? vec4(1, 0, 0, 1) : vec4(0);
    178 }
    179 </script>
    180 
    181 </head>
    182 <body>
    183 <canvas id="canvas" width="50" height="50"></canvas>
    184 <div id="description"></div>
    185 <div id="console"></div>
    186 <script>
    187 "use strict";
    188 description('Uninitialized local/global variables should be initialized: http://anglebug.com/1966');
    189 
    190 var wtu = WebGLTestUtils;
    191 var gl = wtu.create3DContext("canvas");
    192 wtu.setupUnitQuad(gl);
    193 
    194 var cases = [
    195  {
    196    name: "Uninitialized local variable in vertex shader",
    197    prog: ["vs_uninit_local_in_vert", "fs_uninit_local_in_vert"],
    198  },
    199  {
    200    name: "Uninitialized local variable in fragment shader",
    201    prog: ["vs_uninit_in_frag", "fs_uninit_local_in_frag"],
    202  },
    203  {
    204    name: "Uninitialized global variable in vertex shader",
    205    prog: ["vs_uninit_global_in_vert", "fs_uninit_global_in_vert"],
    206  },
    207  {
    208    name: "Uninitialized global variable in fragment shader",
    209    prog: ["vs_uninit_in_frag", "fs_uninit_global_in_frag"],
    210  },
    211  {
    212    name: "Uninitialized local int variable in fragment shader",
    213    prog: ["vs_uninit_in_frag", "fs_uninit_local_int_in_frag"],
    214  },
    215  {
    216    name: "Uninitialized local variable and another variable in the same declaration using it as an initializer in fragment shader",
    217    prog: ["vs_uninit_in_frag", "fs_uninit_two_local_variables_in_declaration_in_frag"],
    218  },
    219  {
    220    name: "Uninitialized local array and another variable in the same declaration using it in its initializer in fragment shader",
    221    prog: ["vs_uninit_in_frag", "fs_uninit_array_and_another_in_declaration_in_frag"],
    222  },
    223  {
    224    name: "Uninitialized global int variable in fragment shader",
    225    prog: ["vs_uninit_in_frag", "fs_uninit_global_int_in_frag"],
    226  },
    227  {
    228    name: "Uninitialized local struct variable in fragment shader",
    229    prog: ["vs_uninit_in_frag", "fs_uninit_local_struct_in_frag"],
    230  },
    231  {
    232    name: "Uninitialized global struct variable in fragment shader",
    233    prog: ["vs_uninit_in_frag", "fs_uninit_global_struct_in_frag"],
    234  },
    235  {
    236    name: "Uninitialized nameless local struct variable in fragment shader",
    237    prog: ["vs_uninit_in_frag", "fs_uninit_nameless_local_struct_in_frag"],
    238  },
    239  {
    240    name: "Uninitialized nameless global struct variable in fragment shader",
    241    prog: ["vs_uninit_in_frag", "fs_uninit_nameless_global_struct_in_frag"],
    242  },
    243  {
    244    name: "Uninitialized local bool array variable in fragment shader",
    245    prog: ["vs_uninit_in_frag", "fs_uninit_local_bool_in_frag"],
    246  },
    247  {
    248    name: "Uninitialized global bool array variable in fragment shader",
    249    prog: ["vs_uninit_in_frag", "fs_uninit_global_bool_in_frag"],
    250  },
    251 ];
    252 
    253 function runTest() {
    254  for (var i = 0; i < cases.length; ++i) {
    255    debug("");
    256    debug(cases[i].name);
    257    var program = wtu.setupProgram(gl, cases[i].prog, ["a_position"], undefined, true);
    258    gl.clearColor(1.0, 0.0, 0.0, 1.0);
    259    wtu.clearAndDrawUnitQuad(gl);
    260    wtu.checkCanvas(gl, [0, 0, 0, 0]);
    261  }
    262 
    263  debug("");
    264  wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
    265 }
    266 
    267 runTest();
    268 
    269 var successfullyParsed = true;
    270 </script>
    271 <script src="../../../js/js-test-post.js"></script>
    272 </body>
    273 </html>