tor-browser

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

glsl-vertex-branch.html (3502B)


      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>GLSL function nodes Test</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="vshaderNoBranch" type="x-shader/x-vertex">
     18 attribute vec3 aPosition;
     19 uniform float redIntensity;
     20 
     21 varying vec4 vColor;
     22 
     23 float MADBug(float paramValue) {
     24  float localVar = 1.0;
     25  return 0.25 * ceil(localVar) + paramValue;
     26 }
     27 
     28 void main(void) {
     29    gl_Position = vec4(aPosition, 1.0);
     30    vColor = vec4(MADBug(redIntensity), 0., 0., 1.);
     31 }
     32 </script>
     33 
     34 <script id="vshaderBranch" type="x-shader/x-vertex">
     35 attribute vec3 aPosition;
     36 uniform float redIntensity;
     37 
     38 varying vec4 vColor;
     39 
     40 float MADBug(float paramValue) {
     41  float localVar = 1.0;
     42  return 0.25 * ceil(localVar) + paramValue;
     43 }
     44 
     45 void main(void) {
     46    float condition = 42.;
     47    if (condition == 0.) {}
     48    gl_Position = vec4(aPosition, 1.0);
     49    vColor = vec4(MADBug(redIntensity), 0., 0., 1.);
     50 }
     51 </script>
     52 
     53 <script id="fshader" type="x-shader/x-fragment">
     54 precision mediump float;
     55 
     56 varying vec4 vColor;
     57 void main()
     58 {
     59   gl_FragColor = vColor;
     60 }
     61 </script>
     62 </head>
     63 <body>
     64 <canvas id="canvasNoBranch" width="50" height="50"></canvas>
     65 <canvas id="canvasBranch" width="50" height="50"></canvas>
     66 <div id="description">This tests against a Mac driver bug related to branches
     67 inside of Vertex Shaders.</div>
     68 <div id="console"></div>
     69 <script>
     70 "use strict";
     71 var width = 50;
     72 var height = 50;
     73 var wtu = WebGLTestUtils;
     74 
     75 function drawAndRead(canvasID, vshaderID, buffer)
     76 {
     77    var gl = wtu.create3DContext(canvasID);
     78    var program = wtu.setupProgram(gl, [vshaderID, "fshader"], ["aPosition"]);
     79    var vertexObject = gl.createBuffer();
     80    gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
     81    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ 0,0.5,0, -1,-1,0, 1,-1,0 ]), gl.STATIC_DRAW);
     82    gl.enableVertexAttribArray(0);
     83    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
     84 
     85    var loc = gl.getUniformLocation(program, "redIntensity");
     86    gl.uniform1f(loc, 0.75);
     87    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
     88    gl.drawArrays(gl.TRIANGLES, 0, 3);
     89    gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buffer);
     90    if (gl.getError() != gl.NO_ERROR)
     91        return false;
     92    return true;
     93 }
     94 
     95 function compareRendering(buffer1, buffer2, tol)
     96 {
     97    for (var i = 0; i < width * height * 4; ++i) {
     98        if (Math.abs(buffer1[i] - buffer2[i]) > tol)
     99            return false;
    100    }
    101    return true;
    102 }
    103 
    104 function init()
    105 {
    106    description("tests vertex shader with branch");
    107 
    108    var bufBranch = new Uint8Array(width * height * 4);
    109    var bufNoBranch = new Uint8Array(width * height * 4);
    110 
    111    if (drawAndRead("canvasBranch", "vshaderBranch", bufBranch) == false ||
    112        drawAndRead("canvasNoBranch", "vshaderNoBranch", bufNoBranch) == false) {
    113        testFailed("Setup failed");
    114    } else {
    115        if (compareRendering(bufBranch, bufNoBranch, 4) == false)
    116            testFailed("Rendering results are different");
    117        else
    118            testPassed("Rendering results are the same");
    119    }
    120 }
    121 
    122 init();
    123 var successfullyParsed = true;
    124 </script>
    125 <script src="../../../js/js-test-post.js"></script>
    126 </body>
    127 </html>