| <html> |
| <head> |
| <script type="text/javascript"> |
| let canvas; |
| let gl; |
| let timeout; |
| |
| function send(result, message) { |
| if (window.domAutomationController) |
| window.domAutomationController.send(result); |
| if (message) |
| console.log(message); |
| else if (!window.domAutomationController) |
| console.log(result); |
| } |
| |
| function near(val, expect) { |
| return Math.abs(val - expect) < 2; |
| } |
| |
| function onLoad() { |
| send("LOADED"); |
| |
| // Originally-reported problem occurred on AMD GPU on dual-GPU MacBook Pros. |
| canvas = document.getElementById("canvas1"); |
| gl = canvas.getContext('webgl2', { powerPreference: 'high-performance' }); |
| |
| gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 0xff); |
| gl.bindTexture(gl.TEXTURE_2D_ARRAY, gl.createTexture()); |
| let ext = gl.getExtension('WEBGL_compressed_texture_s3tc'); |
| let format; |
| if (ext) { |
| format = ext.COMPRESSED_RGBA_S3TC_DXT3_EXT; |
| } else { |
| ext = gl.getExtension('WEBGL_compressed_texture_etc'); |
| if (!ext) { |
| send("FAILURE", "Desktop/mobile compressed texture formats not supported"); |
| return; |
| } |
| format = ext.COMPRESSED_RGBA8_ETC2_EAC; |
| } |
| gl.compressedTexImage3D(gl.TEXTURE_2D_ARRAY, 0, format, 4, 4, 4, 0, new Uint16Array(32)); |
| |
| // Try clearing the canvas to solid green and see if it's read back successfully. |
| // If the context was lost because of a GPU process crash in ASAN builds, this will fail. |
| gl.clearColor(0, 1, 0, 1); |
| gl.clear(gl.COLOR_BUFFER_BIT); |
| let readback = new Uint8Array(4); |
| gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, readback); |
| if (near(readback[0], 0) && |
| near(readback[1], 255) && |
| near(readback[2], 0) && |
| near(readback[3], 255)) { |
| send("SUCCESS"); |
| } else { |
| send("FAILURE", "Expected solid green, got (" + |
| readback[0] + ", " + |
| readback[1] + ", " + |
| readback[2] + ", " + |
| readback[3] + ")"); |
| } |
| } |
| </script> |
| </head> |
| <body onload="onLoad()"> |
| <canvas id="canvas1" width="64px" height="64px"> |
| </canvas> |
| </body> |
| </html> |