blob: b0b7337d28092e950cf6465a004d80682f12b713 [file] [edit]
// Copyright (C) 2026 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import {test} from '@playwright/test';
/**
* This test simply dumps WebGL information to the console. It's not a real
* test, but it can be useful to quickly check the WebGL capabilities of the
* environment where tests are running. It's very quick to run as it doesn't
* load a trace or even load the Perfetto UI at all.
*/
test('Dump GL info', async ({browser}) => {
const page = await browser.newPage();
const info = await page.evaluate(() => {
// Use separate canvases to accurately detect support for each WebGL version
const canvas1 = document.createElement('canvas');
const canvas2 = document.createElement('canvas');
const webgl2 = canvas2.getContext('webgl2');
const webgl1 = canvas1.getContext('webgl');
const gl = webgl2 ?? webgl1;
if (!gl) {
return {
error: 'WebGL not supported',
webgl2Supported: false,
webgl1Supported: false,
};
}
const dbg = gl.getExtension('WEBGL_debug_renderer_info');
const contextType = webgl2 ? 'webgl2' : 'webgl1';
// Gather all available debug parameters
const params: Record<string, unknown> = {
contextType,
webgl2Supported: !!webgl2,
webgl1Supported: !!webgl1,
debugExtensionAvailable: !!dbg,
// Renderer info (from debug extension if available)
renderer: dbg ? gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL) : 'N/A',
vendor: dbg ? gl.getParameter(dbg.UNMASKED_VENDOR_WEBGL) : 'N/A',
// Standard WebGL parameters
version: gl.getParameter(gl.VERSION),
shadingLanguageVersion: gl.getParameter(gl.SHADING_LANGUAGE_VERSION),
vendorString: gl.getParameter(gl.VENDOR),
rendererString: gl.getParameter(gl.RENDERER),
// Capabilities
maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxViewportDims: gl.getParameter(gl.MAX_VIEWPORT_DIMS),
maxRenderbufferSize: gl.getParameter(gl.MAX_RENDERBUFFER_SIZE),
maxVertexAttribs: gl.getParameter(gl.MAX_VERTEX_ATTRIBS),
maxVertexUniformVectors: gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS),
maxFragmentUniformVectors: gl.getParameter(
gl.MAX_FRAGMENT_UNIFORM_VECTORS,
),
maxVaryingVectors: gl.getParameter(gl.MAX_VARYING_VECTORS),
maxTextureImageUnits: gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS),
maxCombinedTextureImageUnits: gl.getParameter(
gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS,
),
// Precision formats (for fragment shaders)
highFloatPrecision: gl.getShaderPrecisionFormat(
gl.FRAGMENT_SHADER,
gl.HIGH_FLOAT,
),
mediumFloatPrecision: gl.getShaderPrecisionFormat(
gl.FRAGMENT_SHADER,
gl.MEDIUM_FLOAT,
),
// Available extensions
supportedExtensions: gl.getSupportedExtensions(),
};
return params;
});
console.log('GL INFO:', info);
});