tor-browser

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

two-unreferenced-varyings.html (4116B)


      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 Transform Feedback Conformance Tests</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 <div id="description"></div>
     18 <canvas id="canvas" style="width: 50px; height: 50px;"> </canvas>
     19 <div id="console"></div>
     20 <script id="vshader" type="x-shader/x-vertex">#version 300 es
     21 in vec3 position;
     22 out vec3 outAttrib1;
     23 out vec3 outAttrib2;
     24 void main()
     25 {
     26    outAttrib1 = position;
     27    outAttrib2 = position;
     28    gl_Position = vec4(position, 1);
     29 }
     30 </script>
     31 <script id="fshader" type="x-shader/x-fragment">#version 300 es
     32 precision mediump float;
     33 out vec4 color;
     34 in vec3 outAttrib1;
     35 in vec3 outAttrib2;
     36 void main()
     37 {
     38    color = vec4(0);
     39 }
     40 </script>
     41 <script>
     42 "use strict";
     43 description("This test covers an ANGLE bug with two transform feedback varyings. When the two are declared, but not referenced in the fragment shader, ANGLE would fail capture.");
     44 
     45 debug("");
     46 
     47 var wtu = WebGLTestUtils;
     48 var canvas = document.getElementById("canvas");
     49 var gl = wtu.create3DContext(canvas, null, 2);
     50 var quadVB;
     51 
     52 if (!gl) {
     53    testFailed("WebGL context does not exist");
     54 } else {
     55    testPassed("WebGL context exists");
     56 
     57    debug("");
     58    debug("Testing transform feedback with two unreferenced outputs");
     59    runTest();
     60 }
     61 
     62 function getQuadVerts(depth) {
     63  var quadVerts = new Float32Array(3 * 6);
     64  quadVerts[0] = -1.0; quadVerts[1] =   1.0; quadVerts[2] = depth;
     65  quadVerts[3] = -1.0; quadVerts[4] =  -1.0; quadVerts[5] = depth;
     66  quadVerts[6] =  1.0; quadVerts[7] =  -1.0; quadVerts[8] = depth;
     67  quadVerts[9] = -1.0; quadVerts[10] =  1.0; quadVerts[11] = depth;
     68  quadVerts[12] = 1.0; quadVerts[13] = -1.0; quadVerts[14] = depth;
     69  quadVerts[15] = 1.0; quadVerts[16] =  1.0; quadVerts[17] = depth;
     70  return quadVerts;
     71 }
     72 
     73 function drawQuad(depth) {
     74  if (!quadVB) {
     75    quadVB = gl.createBuffer()
     76  }
     77 
     78  var quadVerts = getQuadVerts(depth);
     79 
     80  gl.bindBuffer(gl.ARRAY_BUFFER, quadVB);
     81  gl.bufferData(gl.ARRAY_BUFFER, quadVerts, gl.STATIC_DRAW);
     82  gl.vertexAttribPointer(0, 3, gl.FLOAT, gl.FALSE, 0, 0);
     83  gl.enableVertexAttribArray(0);
     84  gl.drawArrays(gl.TRIANGLES, 0, 6);
     85 }
     86 
     87 function runTest() {
     88 
     89    // Create the transform feedback program
     90    var program = wtu.setupTransformFeedbackProgram(gl, ["vshader", "fshader"],
     91        ["outAttrib1", "outAttrib2"], gl.INTERLEAVED_ATTRIBS,
     92        ["position"]);
     93    if (!program) {
     94        testFailed("Fail to set up the program");
     95        return;
     96    }
     97 
     98    // Init transform feedback buffers
     99    var out_buffer = gl.createBuffer();
    100    gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, out_buffer);
    101    gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, Float32Array.BYTES_PER_ELEMENT * 3 * 2 * 6,
    102                  gl.STREAM_DRAW);
    103 
    104    var tf = gl.createTransformFeedback();
    105 
    106    gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, tf);
    107    gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, out_buffer);
    108    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Init transform feedback should succeed");
    109 
    110    // Draw the quad
    111    gl.useProgram(program)
    112    gl.beginTransformFeedback(gl.TRIANGLES);
    113    drawQuad(0.5);
    114    gl.endTransformFeedback();
    115    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Draw with transform feedback should succeed");
    116 
    117    // Verify the output buffer contents
    118    var quadVerts = getQuadVerts(0.5);
    119    var expected_data = [];
    120    for (var i = 0; i < quadVerts.length; i += 3) {
    121        for (var count = 0; count < 2; count++) {
    122            expected_data[expected_data.length] = quadVerts[i];
    123            expected_data[expected_data.length] = quadVerts[i+1];
    124            expected_data[expected_data.length] = quadVerts[i+2];
    125        }
    126    }
    127    wtu.checkFloatBuffer(gl, gl.TRANSFORM_FEEDBACK_BUFFER, expected_data);
    128 }
    129 
    130 debug("");
    131 var successfullyParsed = true;
    132 </script>
    133 <script src="../../js/js-test-post.js"></script>
    134 
    135 </body>
    136 </html>