tor-browser

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

uint-int-shift-bug.html (2880B)


      1 <!--
      2 Copyright (c) 2020 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>Verify (uint(int) >> 31) works correctly (Adreno driver bug)</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 </head>
     16 <body>
     17 <canvas id="canvas" width="2" height="2"> </canvas>
     18 <div id="description"></div>
     19 <div id="console"></div>
     20 <script id="vshader-uint-1" type="x-shader/x-vertex">#version 300 es
     21 in vec3 aPosition;
     22 flat out highp uint uvalue;
     23 uniform highp int ivalue;
     24 
     25 void main() {
     26    gl_Position = vec4(aPosition, 1);
     27    uvalue = uint(ivalue) >> 31u;
     28 }
     29 </script>
     30 <script id="fshader-uint-1" type="x-shader/x-fragment">#version 300 es
     31 flat in highp uint uvalue;
     32 out highp vec4 myFragColor;
     33 
     34 void main() {
     35    if (uvalue == 1u)
     36        myFragColor = vec4(1.0, 0.0, 0.0, 1.0);
     37    else
     38        myFragColor = vec4(0.0, 0.0, 0.0, 1.0);
     39 }
     40 </script>
     41 
     42 <script id="vshader-simple" type="x-shader/x-vertex">#version 300 es
     43 in vec3 aPosition;
     44 
     45 void main() {
     46    gl_Position = vec4(aPosition, 1);
     47 }
     48 </script>
     49 <script id="fshader-uint-2" type="x-shader/x-fragment">#version 300 es
     50 uniform highp int ivalue;
     51 out highp vec4 myFragColor;
     52 
     53 void main() {
     54    uint uvalue = uint(ivalue) >> 31u;
     55 
     56    if (uvalue == 1u)
     57        myFragColor = vec4(1.0, 0.0, 0.0, 1.0);
     58    else
     59        myFragColor = vec4(0.0, 0.0, 0.0, 1.0);
     60 }
     61 </script>
     62 
     63 <script type="application/javascript">
     64 "use strict";
     65 description("Verify (uint(int) >> 31) works correctly");
     66 debug("");
     67 var wtu = WebGLTestUtils;
     68 function test() {
     69    var gl = wtu.create3DContext("canvas", undefined, 2);
     70    if (!gl) {
     71        testFailed("context does not exist");
     72        return;
     73    }
     74    wtu.setupUnitQuad(gl);
     75 
     76    var testCases = [
     77        { vshader: "vshader-uint-1", fshader: "fshader-uint-1", desc: "vertex shader uint" },
     78        { vshader: "vshader-simple", fshader: "fshader-uint-2", desc: "fragment shader uint" },
     79    ];
     80 
     81    for (var idx = 0; idx < testCases.length; ++idx) {
     82        var test = testCases[idx];
     83 
     84        debug("");
     85        var program = wtu.setupProgram(gl, [test.vshader, test.fshader], ["aPosition"]);
     86        if (!program) {
     87            testFailed("Fail to set up program");
     88        } else {
     89            var uniformLoc = gl.getUniformLocation(program, 'ivalue');
     90            gl.uniform1i(uniformLoc, -1);
     91            wtu.drawUnitQuad(gl);
     92            wtu.checkCanvas(gl, [255, 0, 0, 255]);
     93            gl.deleteProgram(program);
     94            wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from testing");
     95        }
     96    }
     97 };
     98 
     99 test();
    100 
    101 debug("");
    102 var successfullyParsed = true;
    103 </script>
    104 <script src="../../js/js-test-post.js"></script>
    105 </body>
    106 </html>