tor-browser

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

matrix-row-major-dynamic-indexing.html (2621B)


      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>Dynamically-indexed row-major matrix test</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 <div id="description"></div>
     19 <div id="console"></div>
     20 <script id="fshaderIndexRowMajorMatrixArrayInUniformBlock" type="x-shader/x-fragment">#version 300 es
     21 precision mediump float;
     22 
     23 out vec4 my_FragColor;
     24 
     25 uniform int u_zero;
     26 
     27 layout(row_major) uniform a {
     28    mat4 u_mats[1];
     29 };
     30 
     31 void main() {
     32    float f = u_mats[u_zero + 0][2][1];
     33    my_FragColor = vec4(1.0 - f, f, 0.0, 1.0);
     34 }
     35 </script>
     36 <script id="fshaderRowMatrixIndexedByRowMatrixInUniformBlock" type="x-shader/x-fragment">#version 300 es
     37 precision mediump float;
     38 
     39 uniform Stuff {
     40  layout(row_major) mat4 u_mat[3];
     41  layout(row_major) mat4 u_ndx[3];
     42 } stuff;
     43 
     44 
     45 out vec4 my_FragColor;
     46 
     47 void main() {
     48  vec4 row = stuff.u_mat[int(stuff.u_ndx[1][1][3])][2];
     49  my_FragColor = row == vec4(9, 10, 11, 12) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);
     50 }
     51 </script>
     52 <script type="application/javascript">
     53 "use strict";
     54 description("Indexing row-major matrices within a uniform block should work");
     55 
     56 GLSLConformanceTester.runRenderTests([
     57 {
     58  fShaderId: 'fshaderIndexRowMajorMatrixArrayInUniformBlock',
     59  fShaderSuccess: true,
     60  linkSuccess: true,
     61  passMsg: '',
     62  uniformBlocks: [{name: "a", value: new Float32Array([
     63    0, 0, 0, 0,
     64    0, 0, 1, 0,
     65    0, 0, 0, 0,
     66    0, 0, 0, 0,
     67  ])}],
     68 },
     69 {
     70  fShaderId: 'fshaderRowMatrixIndexedByRowMatrixInUniformBlock',
     71  fShaderSuccess: true,
     72  linkSuccess: true,
     73  passMsg: '',
     74  uniformBlocks: [{name: "Stuff", value: new Float32Array([
     75    // mat4 u_mat[3]
     76     1,  2,  3,  4,
     77     5,  6,  7,  8,
     78     9, 10, 11, 12,
     79    13, 14, 15, 16,
     80 
     81         //  +-- we should be pulling out this column
     82         //  |
     83         //  V
     84     1,  5,  9, 13,
     85     2,  6, 10, 14,
     86     3,  7, 11, 15,
     87     4,  8, 12, 16,
     88 
     89     2, 10, 18, 22,
     90     4, 12, 20, 28,
     91     6, 14, 22, 30,
     92     8, 16, 24, 32,
     93 
     94    // mat4 u_ndx[3]
     95    0, 0, 0, 0,
     96    0, 0, 0, 0,
     97    0, 0, 0, 0,
     98    0, 0, 0, 0,
     99 
    100    0, 0, 0, 0,
    101    0, 0, 0, 2,
    102    0, 0, 0, 0,
    103    0, 1, 0, 0,
    104    // ^
    105    // |
    106    // +-- we should be reading this value as an index into u_mat
    107 
    108    0, 0, 0, 0,
    109    0, 0, 0, 0,
    110    0, 0, 0, 0,
    111    0, 0, 0, 0,
    112  ])}],
    113 }
    114 ], 2);
    115 </script>
    116 </body>
    117 </html>