tor-browser

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

shaders-with-uniform-structs.html (7682B)


      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="vertexShaderStructSequence" type="text/something-not-javascript">
     22 // Structures must have the same name, sequence of type names, and
     23 // type definitions, and field names to be considered the same type.
     24 // GLSL 1.017 4.2.4
     25 precision mediump float;
     26 struct info {
     27  vec4 pos;
     28  vec4 color;
     29 };
     30 
     31 uniform info uni;
     32 void main()
     33 {
     34    gl_Position = uni.pos;
     35 }
     36 </script>
     37 <script id="fragmentShaderStructSequence" type="text/something-not-javascript">
     38 // Structures must have the same name, sequence of type names, and
     39 // type definitions, and field names to be considered the same type.
     40 // GLSL 1.017 4.2.4
     41 precision mediump float;
     42 struct info {
     43  vec4 color;
     44  vec4 pos;
     45 };
     46 
     47 uniform info uni;
     48 void main()
     49 {
     50    gl_FragColor = uni.color;
     51 }
     52 </script>
     53 <script id="vertexShaderStructName" type="text/something-not-javascript">
     54 // Structures must have the same name, sequence of type names, and
     55 // type definitions, and field names to be considered the same type.
     56 // GLSL 1.017 4.2.4
     57 precision mediump float;
     58 struct info {
     59  vec4 pos;
     60  vec4 color;
     61 };
     62 
     63 uniform info uni;
     64 void main()
     65 {
     66    gl_Position = uni.pos;
     67 }
     68 </script>
     69 <script id="fragmentShaderStructNameFailure" type="text/something-not-javascript">
     70 // Structures must have the same name, sequence of type names, and
     71 // type definitions, and field names to be considered the same type.
     72 // GLSL 1.017 4.2.4
     73 precision mediump float;
     74 struct info1 {
     75  vec4 pos;
     76  vec4 color;
     77 };
     78 
     79 uniform info1 uni;
     80 void main()
     81 {
     82    gl_FragColor = uni.color;
     83 }
     84 </script>
     85 <script id="fragmentShaderStructNameSuccess" type="text/something-not-javascript">
     86 // Structures must have the same name, sequence of type names, and
     87 // type definitions, and field names to be considered the same type.
     88 // GLSL 1.017 4.2.4
     89 precision mediump float;
     90 
     91 // Add a struct before info to make sure the struct info here is assigned
     92 // a different internal unique ID from the struct info in vertex shader.
     93 struct extra {
     94  vec4 p;
     95 };
     96 
     97 struct info {
     98  vec4 pos;
     99  vec4 color;
    100 };
    101 
    102 uniform info uni;
    103 void main()
    104 {
    105    extra my;
    106    my.p = uni.color;
    107    gl_FragColor = my.p;
    108 }
    109 </script>
    110 <script id="vertexShaderStructFieldName" type="text/something-not-javascript">
    111 // Structures must have the same name, sequence of type names, and
    112 // type definitions, and field names to be considered the same type.
    113 // GLSL 1.017 4.2.4
    114 precision mediump float;
    115 struct info {
    116  vec4 pos;
    117  vec4 color;
    118 };
    119 
    120 uniform info uni;
    121 void main()
    122 {
    123    gl_Position = uni.pos;
    124 }
    125 </script>
    126 <script id="fragmentShaderStructFieldName" type="text/something-not-javascript">
    127 // Structures must have the same name, sequence of type names, and
    128 // type definitions, and field names to be considered the same type.
    129 // GLSL 1.017 4.2.4
    130 precision mediump float;
    131 struct info {
    132  vec4 pos1;
    133  vec4 color;
    134 };
    135 
    136 uniform info uni;
    137 void main()
    138 {
    139    gl_FragColor = uni.color;
    140 }
    141 </script>
    142 <script id="vertexShaderStructFieldType" type="text/something-not-javascript">
    143 // Structures must have the same name, sequence of type names, and
    144 // type definitions, and field names to be considered the same type.
    145 // GLSL 1.017 4.2.4
    146 precision mediump float;
    147 struct info {
    148  vec4 pos;
    149  vec4 color;
    150 };
    151 
    152 uniform info uni;
    153 void main()
    154 {
    155    gl_Position = uni.pos;
    156 }
    157 </script>
    158 <script id="fragmentShaderStructFieldType" type="text/something-not-javascript">
    159 // Structures must have the same name, sequence of type names, and
    160 // type definitions, and field names to be considered the same type.
    161 // GLSL 1.017 4.2.4
    162 precision mediump float;
    163 struct info {
    164  vec3 pos;
    165  vec4 color;
    166 };
    167 
    168 uniform info uni;
    169 void main()
    170 {
    171    gl_FragColor = uni.color;
    172 }
    173 </script>
    174 <script id="vertexShaderStructFieldPrecision" type="text/something-not-javascript">
    175 // Structures must have the same name, sequence of type names, and
    176 // type definitions, and field names to be considered the same type.
    177 // GLSL 1.017 4.2.4
    178 struct info {
    179  mediump vec4 pos;
    180  highp vec4 color;
    181 };
    182 
    183 uniform info uni;
    184 void main()
    185 {
    186    gl_Position = uni.pos;
    187 }
    188 </script>
    189 <script id="fragmentShaderStructFieldPrecision" type="text/something-not-javascript">
    190 // Structures must have the same name, sequence of type names, and
    191 // type definitions, and field names to be considered the same type.
    192 // GLSL 1.017 4.2.4
    193 precision mediump float;
    194 struct info {
    195  vec4 pos;
    196  vec4 color;
    197 };
    198 
    199 uniform info uni;
    200 void main()
    201 {
    202    gl_FragColor = uni.color;
    203 }
    204 </script>
    205 <script id="vertexShaderUnnamedStruct" type="text/something-not-javascript">
    206 // ANGLE regression on Windows, crbug.com/401296
    207 uniform struct {
    208  float f;
    209  vec4 v;
    210 } u_struct;
    211 
    212 void main()
    213 {
    214    gl_Position = u_struct.f * u_struct.v;
    215 }
    216 </script>
    217 <script id="fragmentShaderSimple" type="text/something-not-javascript">
    218 void main()
    219 {
    220    gl_FragColor = vec4(1.0);
    221 }
    222 </script>
    223 <script>
    224 "use strict";
    225 var wtu = WebGLTestUtils;
    226 
    227 var tests = [];
    228 tests.push({
    229  vShaderSource: wtu.getScript("vertexShaderStructName"),
    230  vShaderSuccess: true,
    231  fShaderSource: wtu.getScript("fragmentShaderStructNameSuccess"),
    232  fShaderSuccess: true,
    233  linkSuccess: true,
    234  passMsg: "Structures with the same defination must be considered the same type.",
    235 });
    236 tests.push({
    237  vShaderSource: wtu.getScript("vertexShaderStructName"),
    238  vShaderSuccess: true,
    239  fShaderSource: wtu.getScript("fragmentShaderStructNameFailure"),
    240  fShaderSuccess: true,
    241  linkSuccess: false,
    242  passMsg: "Structures must have the same name to be considered the same type.",
    243 });
    244 tests.push({
    245  vShaderSource: wtu.getScript("vertexShaderStructSequence"),
    246  vShaderSuccess: true,
    247  fShaderSource: wtu.getScript("fragmentShaderStructSequence"),
    248  fShaderSuccess: true,
    249  linkSuccess: false,
    250  passMsg: "Structures must have the same sequence of type names to be considered the same type.",
    251 });
    252 tests.push({
    253  vShaderSource: wtu.getScript("vertexShaderStructFieldName"),
    254  vShaderSuccess: true,
    255  fShaderSource: wtu.getScript("fragmentShaderStructFieldName"),
    256  fShaderSuccess: true,
    257  linkSuccess: false,
    258  passMsg: "Structures must have the same field names to be considered the same type.",
    259 });
    260 tests.push({
    261  vShaderSource: wtu.getScript("vertexShaderStructFieldType"),
    262  vShaderSuccess: true,
    263  fShaderSource: wtu.getScript("fragmentShaderStructFieldType"),
    264  fShaderSuccess: true,
    265  linkSuccess: false,
    266  passMsg: "Structures must have the same type definitions to be considered the same type.",
    267 });
    268 tests.push({
    269  vShaderSource: wtu.getScript("vertexShaderStructFieldPrecision"),
    270  vShaderSuccess: true,
    271  fShaderSource: wtu.getScript("fragmentShaderStructFieldPrecision"),
    272  fShaderSuccess: true,
    273  linkSuccess: false,
    274  passMsg: "Structures must have the same type definitions (including precision) to be considered the same type.",
    275 });
    276 tests.push({
    277  vShaderSource: wtu.getScript("vertexShaderUnnamedStruct"),
    278  vShaderSuccess: true,
    279  fShaderSource: wtu.getScript("fragmentShaderSimple"),
    280  fShaderSuccess: true,
    281  linkSuccess: true,
    282  passMsg: "Shaders with uniforms of unnamed struct type should compile and link successfully.",
    283 });
    284 
    285 GLSLConformanceTester.runTests(tests);
    286 var successfullyParsed = true;
    287 </script>
    288 </body>
    289 </html>