Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE HTML>
<html>
<head>
<meta charset='UTF-8'>
<script src='/tests/SimpleTest/SimpleTest.js'></script>
<link rel='stylesheet' href='/tests/SimpleTest/test.css'>
</head>
<body>
<script>
function RunWithPrefs(prefPairList, func) {
var prefEnv = {'set': prefPairList};
try {
SpecialPowers.pushPrefEnv(prefEnv, func);
} catch (e) {
console.log('Warning: Failed to set prefs: ' + JSON.stringify(prefPairList));
func();
}
}
////////////////////////////////////////
var ANGLE_IS_SINGLETON = true;
var expectD3DType;
try {
// code borrowed from browser/modules/test/browser_taskbar_preview.js
var version = SpecialPowers.Services.sysinfo.getProperty('version');
version = parseFloat(version);
// Version 6.0 is Vista, 6.1 is 7.
if (version <= 6.0)
expectD3DType = 'd3d9';
else
expectD3DType = 'd3d11';
} catch (e) {
expectD3DType = 'd3d11';
}
function GetRenderer() {
var c = document.createElement('canvas');
var gl = c.getContext('experimental-webgl');
if (!gl)
return undefined;
var ext = gl.getExtension('WEBGL_debug_renderer_info');
if (!ext)
throw new Error('Requires WEBGL_debug_renderer_info.');
var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
return renderer;
}
function GetRendererType() {
var renderer = GetRenderer();
if (renderer === undefined)
return 'none';
if (renderer.includes('ANGLE')) {
if (renderer.includes('Microsoft Basic Render Driver')) // Also includes 'Direct3D11'.
return 'warp';
if (renderer.includes('Direct3D11'))
return 'd3d11';
if (renderer.includes('Direct3D9'))
return 'd3d9';
} else {
return 'gl';
}
throw new Error('Unrecognized renderer type for: ' + renderer);
}
function TestActualType(testName, expectedType) {
var actualType = GetRendererType();
ok(actualType == expectedType,
'[' + testName + '] Expected ' + expectedType + ', was ' + actualType);
}
////////////////////////////////////////
function TestDefault() {
var expectedType = 'gl';
var isWindows = (navigator.platform.indexOf('Win') == 0);
if (isWindows) {
expectedType = expectD3DType;
}
TestActualType('TestDefault', expectedType);
if (isWindows && !ANGLE_IS_SINGLETON) {
var prefPairList = [
['webgl.angle.force-warp', true],
];
RunWithPrefs(prefPairList, TestWARP);
return;
}
var prefPairList = [
['webgl.disabled', true],
];
RunWithPrefs(prefPairList, TestDisabled);
return;
}
function TestWARP() {
var expectedType = (expectD3DType == 'd3d11') ? 'warp' : 'none';
TestActualType('TestWARP', expectedType);
var prefPairList = [
['webgl.angle.force-warp', false],
['webgl.angle.force-d3d11', true],
];
RunWithPrefs(prefPairList, TestD3D11);
}
function TestD3D11() {
var expectedType = (expectD3DType == 'd3d11') ? 'd3d11' : 'none';
TestActualType('TestD3D11', expectedType);
var prefPairList = [
['webgl.angle.force-d3d11', false],
['webgl.angle.try-d3d11', false],
];
RunWithPrefs(prefPairList, TestD3D9);
}
function TestD3D9() {
TestActualType('TestD3D9', 'd3d9');
var prefPairList = [
['webgl.angle.try-d3d11', true],
['webgl.disable-angle', true],
];
RunWithPrefs(prefPairList, TestWinGL);
}
function TestWinGL() {
TestActualType('TestWinGL', 'gl');
var prefPairList = [
['webgl.disabled', true],
];
RunWithPrefs(prefPairList, TestDisabled);
}
function TestDisabled() {
TestActualType('TestDisabled', 'none');
SimpleTest.finish();
}
////////////////////////////////////////
SimpleTest.waitForExplicitFinish();
var prefPairList = [
['webgl.force-enabled', true],
['webgl.enable-debug-renderer-info', true],
];
RunWithPrefs(prefPairList, TestDefault);
</script>
</body>
</html>