tor-browser

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

shaders-with-invariance.html (9409B)


      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</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 <script src="../../../js/glsl-conformance-test.js"></script>
     17 </head>
     18 <body>
     19 <div id="description"></div>
     20 <div id="console"></div>
     21 <script id="vertexShaderVariant" type="text/something-not-javascript">
     22 varying vec4 v_varying;
     23 
     24 void main()
     25 {
     26    gl_PointSize = 1.0;
     27    gl_Position = v_varying;
     28 }
     29 </script>
     30 <script id="vertexShaderInvariant" type="text/something-not-javascript">
     31 invariant varying vec4 v_varying;
     32 
     33 void main()
     34 {
     35    gl_Position = v_varying;
     36 }
     37 </script>
     38 <script id="vertexShaderSeparateInvariant" type="text/something-not-javascript">
     39 varying vec4 v_varying;
     40 invariant v_varying;
     41 
     42 void main()
     43 {
     44    gl_Position = v_varying;
     45 }
     46 </script>
     47 <script id="vertexShaderSeparateInvariantWrongOrder" type="text/something-not-javascript">
     48 invariant v_varying;
     49 varying vec4 v_varying;
     50 
     51 void main()
     52 {
     53    gl_Position = v_varying;
     54 }
     55 </script>
     56 <script id="vertexShaderGlobalInvariant" type="text/something-not-javascript">
     57 #pragma STDGL invariant(all)
     58 varying vec4 v_varying;
     59 
     60 void main()
     61 {
     62    gl_Position = v_varying;
     63 }
     64 </script>
     65 <script id="vertexShaderInvariantGlPosition" type="text/something-not-javascript">
     66 invariant gl_Position;
     67 
     68 void main()
     69 {
     70    gl_Position = vec4(0, 0, 0, 0);
     71 }
     72 </script>
     73 <script id="vertexShaderInvariantGlPointSize" type="text/something-not-javascript">
     74 invariant gl_PointSize;
     75 
     76 void main()
     77 {
     78    gl_PointSize = 1.0;
     79    gl_Position = vec4(0, 0, 0, 0);
     80 }
     81 </script>
     82 <script id="fragmentShaderVariant" type="text/something-not-javascript">
     83 precision mediump float;
     84 
     85 varying vec4 v_varying;
     86 
     87 void main()
     88 {
     89    gl_FragColor = v_varying;
     90 }
     91 </script>
     92 <script id="fragmentShaderInvariant" type="text/something-not-javascript">
     93 precision mediump float;
     94 
     95 invariant varying vec4 v_varying;
     96 
     97 void main()
     98 {
     99    gl_FragColor = v_varying;
    100 }
    101 </script>
    102 <script id="fragmentShaderSeparateInvariant" type="text/something-not-javascript">
    103 precision mediump float;
    104 
    105 varying vec4 v_varying;
    106 invariant v_varying;
    107 
    108 void main()
    109 {
    110    gl_FragColor = v_varying;
    111 }
    112 </script>
    113 <script id="fragmentShaderSeparateInvariantWrongOrder" type="text/something-not-javascript">
    114 precision mediump float;
    115 
    116 invariant v_varying;
    117 varying vec4 v_varying;
    118 
    119 void main()
    120 {
    121    gl_FragColor = v_varying;
    122 }
    123 </script>
    124 <script id="fragmentShaderGlobalInvariant" type="text/something-not-javascript">
    125 #pragma STDGL invariant(all)
    126 precision mediump float;
    127 
    128 varying vec4 v_varying;
    129 
    130 void main()
    131 {
    132    gl_FragColor = v_varying;
    133 }
    134 </script>
    135 <script id="fragmentShaderInvariantGlFragCoord" type="text/something-not-javascript">
    136 invariant gl_FragCoord;
    137 
    138 void main()
    139 {
    140    gl_FragColor = gl_FragCoord;
    141 }
    142 </script>
    143 <script id="fragmentShaderVariantGlFragCoord" type="text/something-not-javascript">
    144 void main()
    145 {
    146    gl_FragColor = gl_FragCoord;
    147 }
    148 </script>
    149 <script id="fragmentShaderInvariantGlPointCoord" type="text/something-not-javascript">
    150 invariant gl_PointCoord;
    151 
    152 void main()
    153 {
    154    gl_FragColor = vec4(gl_PointCoord, 0.0, 0.0);
    155 }
    156 </script>
    157 <script id="fragmentShaderVariantGlPointCoord" type="text/something-not-javascript">
    158 void main()
    159 {
    160    gl_FragColor = vec4(gl_PointCoord, 0.0, 0.0);
    161 }
    162 </script>
    163 <script id="fragmentShaderInvariantGlFrontFacing" type="text/something-not-javascript">
    164 invariant gl_FrontFacing;
    165 
    166 void main()
    167 {
    168    gl_FragColor = gl_FrontFacing ? vec4(1, 1, 1, 1) : vec4(0, 0, 0, 1);
    169 }
    170 </script>
    171 <script id="fragmentShaderVariantGlFrontFacing" type="text/something-not-javascript">
    172 void main()
    173 {
    174    gl_FragColor = gl_FrontFacing ? vec4(1, 1, 1, 1) : vec4(0, 0, 0, 1);
    175 }
    176 </script>
    177 <script>
    178 // GLSL 1.0.17 4.3.5
    179 "use strict";
    180 // See GLSL ES spec 1.0.17 section 4.6.4 "Invariance and linkage".
    181 var cases = [
    182  {
    183    vShaderId: "vertexShaderVariant",
    184    vShaderSuccess: true,
    185    fShaderId: "fragmentShaderInvariant",
    186    fShaderSuccess: true,
    187    linkSuccess: false,
    188    passMsg: "vertex shader with variant varying and fragment shader with invariant varying must fail",
    189  },
    190  {
    191    vShaderId: "vertexShaderInvariant",
    192    vShaderSuccess: true,
    193    fShaderId: "fragmentShaderVariant",
    194    fShaderSuccess: true,
    195    linkSuccess: false,
    196    passMsg: "vertex shader with invariant varying and fragment shader with variant varying must fail",
    197  },
    198  {
    199    vShaderId: "vertexShaderGlobalInvariant",
    200    vShaderSuccess: true,
    201    fShaderId: "fragmentShaderVariant",
    202    fShaderSuccess: true,
    203    linkSuccess: false,
    204    passMsg: "vertex shader with invariant (global setting) varying and fragment shader with variant varying must fail",
    205  },
    206  {
    207    vShaderId: "vertexShaderGlobalInvariant",
    208    vShaderSuccess: true,
    209    fShaderId: "fragmentShaderInvariant",
    210    fShaderSuccess: true,
    211    linkSuccess: true,
    212    passMsg: "vertex shader with invariant (global setting) varying and fragment shader with invariant varying must succeed",
    213  },
    214  {
    215    vShaderId: "vertexShaderSeparateInvariant",
    216    vShaderSuccess: true,
    217    fShaderId: "fragmentShaderInvariant",
    218    fShaderSuccess: true,
    219    linkSuccess: true,
    220    passMsg: "vertex shader with invariant (separately set) varying and fragment shader with invariant varying must succeed",
    221  },
    222  {
    223    vShaderId: "vertexShaderInvariant",
    224    vShaderSuccess: true,
    225    fShaderId: "fragmentShaderSeparateInvariant",
    226    fShaderSuccess: true,
    227    linkSuccess: true,
    228    passMsg: "vertex shader with invariant varying and fragment shader with invariant (separately set) varying must succeed",
    229  },
    230  {
    231    vShaderId: "vertexShaderSeparateInvariantWrongOrder",
    232    vShaderSuccess: false,
    233    fShaderId: "fragmentShaderInvariant",
    234    fShaderSuccess: true,
    235    linkSuccess: false,
    236    passMsg: "vertex shader with invariant (separately set in wrong order) varying must fail",
    237  },
    238  {
    239    vShaderId: "vertexShaderInvariant",
    240    vShaderSuccess: true,
    241    fShaderId: "fragmentShaderSeparateInvariantWrongOrder",
    242    fShaderSuccess: false,
    243    linkSuccess: false,
    244    passMsg: "fragment shader with invariant (separately set in wrong order) varying must fail",
    245  },
    246  {
    247    vShaderId: "vertexShaderInvariantGlPosition",
    248    vShaderSuccess: true,
    249    fShaderId: "fragmentShaderInvariantGlFragCoord",
    250    fShaderSuccess: true,
    251    linkSuccess: true,
    252    passMsg: "vertex shader with invariant gl_Position and fragment shader with invariant gl_FragCoord must succeed",
    253  },
    254  {
    255    vShaderId: "vertexShaderVariant",
    256    vShaderSuccess: true,
    257    fShaderId: "fragmentShaderInvariantGlFragCoord",
    258    fShaderSuccess: true,
    259    linkSuccess: false,
    260    passMsg: "vertex shader with variant gl_Position and fragment shader with invariant gl_FragCoord must fail",
    261  },
    262  {
    263    vShaderId: "vertexShaderInvariantGlPosition",
    264    vShaderSuccess: true,
    265    fShaderId: "fragmentShaderVariantGlFragCoord",
    266    fShaderSuccess: true,
    267    linkSuccess: true,
    268    passMsg: "vertex shader with invariant gl_Position and fragment shader with variant gl_FragCoord must succeed",
    269  },
    270  {
    271    vShaderId: "vertexShaderInvariantGlPointSize",
    272    vShaderSuccess: true,
    273    fShaderId: "fragmentShaderInvariantGlPointCoord",
    274    fShaderSuccess: true,
    275    linkSuccess: true,
    276    passMsg: "vertex shader with invariant gl_PointSize and fragment shader with invariant gl_PointCoord must succeed",
    277  },
    278  {
    279    vShaderId: "vertexShaderVariant",
    280    vShaderSuccess: true,
    281    fShaderId: "fragmentShaderInvariantGlPointCoord",
    282    fShaderSuccess: true,
    283    linkSuccess: false,
    284    passMsg: "vertex shader with variant gl_PointSize and fragment shader with invariant gl_PointCoord must fail",
    285  },
    286  {
    287    vShaderId: "vertexShaderInvariantGlPointSize",
    288    vShaderSuccess: true,
    289    fShaderId: "fragmentShaderVariantGlPointCoord",
    290    fShaderSuccess: true,
    291    linkSuccess: true,
    292    passMsg: "vertex shader with invariant gl_PointSize and fragment shader with variant gl_PointCoord must succeed",
    293  },
    294  {
    295    vShaderId: "vertexShaderVariant",
    296    vShaderSuccess: true,
    297    fShaderId: "fragmentShaderVariantGlFrontFacing",
    298    fShaderSuccess: true,
    299    linkSuccess: true,
    300    passMsg: "fragment shader with variant gl_FrontFacing must succeed compilation",
    301  },
    302  {
    303    vShaderId: "vertexShaderVariant",
    304    vShaderSuccess: true,
    305    fShaderId: "fragmentShaderInvariantGlFrontFacing",
    306    fShaderSuccess: false,
    307    linkSuccess: false,
    308    passMsg: "fragment shader with invariant gl_FrontFacing must fail compilation",
    309  },
    310  {
    311    vShaderId: "vertexShaderVariant",
    312    vShaderSuccess: true,
    313    fShaderId: "fragmentShaderGlobalInvariant",
    314    fShaderSuccess: true,
    315    linkSuccess: true,
    316    passMsg: "vertex shader with variant varying and fragment shader with invariant (global setting) varying must succeed",
    317  },
    318  {
    319    vShaderId: "vertexShaderInvariant",
    320    vShaderSuccess: true,
    321    fShaderId: "fragmentShaderGlobalInvariant",
    322    fShaderSuccess: true,
    323    linkSuccess: false,
    324    passMsg: "vertex shader with invariant varying and fragment shader with invariant (global setting) varying must fail",
    325  }
    326 ];
    327 
    328 GLSLConformanceTester.runTests(cases);
    329 var successfullyParsed = true;
    330 </script>
    331 </body>
    332 </html>