jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
This demonstrates that the previous version of this test which attempted to specify an internal format of BGRA and type UNSIGNEDINT8888REV was incorrect. First, WebGL does not contain these enums, so "undefined" (which translates to 0) was being passed to the WebGL implementation for these enums, causing a GL error. Second, WebGL requires that the format and internalformat match, as in OpenGL ES 2.0. Consult the OpenGL ES 2.0 specification.
<script>
var glcanvas = document.createElement('canvas');
var gl = glcanvas.getContext('experimental-webgl');
var canvas1024 = document.createElement('canvas');
canvas1024.width = 1024;
canvas1024.height = 1024;
var img1024 = new Image();
var tex1024 = gl.createTexture();
img1024.onload = function() {
gl.bindTexture(gl.TEXTURE_2D, tex1024);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, gl.BGRA, gl.UNSIGNED_INT_8_8_8_8_REV, img1024);
if (gl.getError() != gl.NO_ERROR)
throw "Error during setup";
};
img1024.src = canvas1024.toDataURL();
var canvas512 = document.createElement('canvas');
canvas512.width = 512;
canvas512.height = 512;
var img512 = new Image();
var tex512 = gl.createTexture();
img512.onload = function() {
gl.bindTexture(gl.TEXTURE_2D, tex512);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, gl.BGRA, gl.UNSIGNED_INT_8_8_8_8_REV, img512);
if (gl.getError() != gl.NO_ERROR)
throw "Error during setup";
};
img512.src = canvas512.toDataURL();
var canvas256 = document.createElement('canvas');
canvas256.width = 256;
canvas256.height = 256;
var img256 = new Image();
var tex256 = gl.createTexture();
img256.onload = function() {
gl.bindTexture(gl.TEXTURE_2D, tex256);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, gl.BGRA, gl.UNSIGNED_INT_8_8_8_8_REV, img256);
if (gl.getError() != gl.NO_ERROR)
throw "Error during setup";
};
img256.src = canvas256.toDataURL();
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
texImage2D 1024 |
| ready |
texSubImage2D 1024 |
| ready |
texImage2D 512 |
| ready |
texSubImage2D 512 |
| ready |
texImage2D 256 |
| ready |
texSubImage2D 256 |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.