bound-buffer-size-change-test.html (5415B)
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 buffer size change test for bindBufferBase/bindBufferRange</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 <div id="console"></div> 19 <script> 20 "use strict"; 21 description("WebGL buffer size change for bindings through bindBufferBase/bindBufferRange"); 22 23 // This test verifies the ES3 behavior, that the bound buffer range (offset, size) is not 24 // limited by the actual buffer size, and the driver is responsible that no out-of-range 25 // access may happen. 26 27 var wtu = WebGLTestUtils; 28 29 var gl = wtu.create3DContext(undefined, undefined, 2); 30 31 debug(""); 32 debug("bindBufferBase with TRANSFORM_FEEDBACK_BUFFER target"); 33 var buffer1 = gl.createBuffer(); 34 gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, buffer1); 35 wtu.glErrorShouldBe(gl, gl.NO_ERROR, 36 "Calling bindBufferBase on a buffer where no storage is allocated should succeed."); 37 shouldBe("gl.getParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING)", "buffer1"); 38 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)", "buffer1"); 39 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)", "0"); 40 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)", "0"); 41 42 gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, 4, gl.STATIC_DRAW); 43 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)", "buffer1"); 44 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)", "0"); 45 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)", "0"); 46 47 wtu.glErrorShouldBe(gl, gl.NO_ERROR); 48 49 debug(""); 50 debug("bindBufferBase with UNIFORM_BUFFER target"); 51 var buffer2 = gl.createBuffer(); 52 gl.bindBufferBase(gl.UNIFORM_BUFFER, 1, buffer2); 53 wtu.glErrorShouldBe(gl, gl.NO_ERROR, 54 "Calling bindBufferBase on a buffer where no storage is allocated should succeed."); 55 shouldBe("gl.getParameter(gl.UNIFORM_BUFFER_BINDING)", "buffer2"); 56 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)", "buffer2"); 57 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)", "0"); 58 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)", "0"); 59 60 gl.bufferData(gl.UNIFORM_BUFFER, 8, gl.STATIC_DRAW); 61 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)", "buffer2"); 62 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)", "0"); 63 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)", "0"); 64 65 wtu.glErrorShouldBe(gl, gl.NO_ERROR); 66 67 debug(""); 68 debug("bindBufferRange with TRANSFORM_FEEDBACK_BUFFER target"); 69 var buffer3 = gl.createBuffer(); 70 gl.bindBufferRange(gl.TRANSFORM_FEEDBACK_BUFFER, 0, buffer3, 4, 8); 71 wtu.glErrorShouldBe(gl, gl.NO_ERROR, 72 "Calling bindBufferRange on a buffer where no storage is allocated should succeed."); 73 shouldBe("gl.getParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING)", "buffer3"); 74 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)", "buffer3"); 75 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)", "8"); 76 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)", "4"); 77 78 gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, 4, gl.STATIC_DRAW); 79 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)", "buffer3"); 80 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)", "8"); 81 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)", "4"); 82 83 gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, 12, gl.STATIC_DRAW); 84 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)", "buffer3"); 85 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)", "8"); 86 shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)", "4"); 87 88 wtu.glErrorShouldBe(gl, gl.NO_ERROR); 89 90 debug(""); 91 debug("bindBufferRange with UNIFORM_BUFFER target"); 92 var buffer4 = gl.createBuffer(); 93 var offset = gl.getParameter(gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT); 94 gl.bindBufferRange(gl.UNIFORM_BUFFER, 1, buffer4, offset, 12); 95 wtu.glErrorShouldBe(gl, gl.NO_ERROR, 96 "Calling bindBufferRange on a buffer where no storage is allocated should succeed."); 97 shouldBe("gl.getParameter(gl.UNIFORM_BUFFER_BINDING)", "buffer4"); 98 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)", "buffer4"); 99 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)", "12"); 100 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)", "offset"); 101 102 gl.bufferData(gl.UNIFORM_BUFFER, offset + 8, gl.STATIC_DRAW); 103 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)", "buffer4"); 104 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)", "12"); 105 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)", "offset"); 106 107 gl.bufferData(gl.UNIFORM_BUFFER, offset + 12, gl.STATIC_DRAW); 108 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)", "buffer4"); 109 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)", "12"); 110 shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)", "offset"); 111 112 wtu.glErrorShouldBe(gl, gl.NO_ERROR); 113 114 debug(""); 115 var successfullyParsed = true; 116 </script> 117 <script src="../../js/js-test-post.js"></script> 118 </body> 119 </html>