<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL shader precision format test.</title>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"> </script>
<script src="resources/webgl-test-utils.js"> </script>
</head>
<body>
<canvas id="canvas" width="2" height="2" style="width: 40px; height: 40px;"></canvas>
<div id="description"></div>
<div id="console"></div>
<script>
if (window.initNonKhronosFramework) {
    window.initNonKhronosFramework(true);
}

if (window.internals)
    window.internals.settings.setWebGLErrorsToConsoleEnabled(false);

var wtu = WebGLTestUtils;
description(document.title);
debug("Tests that WebGLShaderPrecisionFormat class and getShaderPrecisionFormat work.");
debug("");
var gl = create3DContext(document.getElementById("canvas"));

function verifyShaderPrecisionFormat(shadertype, precisiontype) {
    shouldBeTrue('gl.getShaderPrecisionFormat(' + shadertype + ', ' +
                 precisiontype + ') instanceof WebGLShaderPrecisionFormat');
}

debug("");
debug("Test that getShaderPrecisionFormat returns a WebGLShaderPrecisionFormat object.");
debug("");

verifyShaderPrecisionFormat('gl.VERTEX_SHADER', 'gl.LOW_FLOAT');
verifyShaderPrecisionFormat('gl.VERTEX_SHADER', 'gl.MEDIUM_FLOAT');
verifyShaderPrecisionFormat('gl.VERTEX_SHADER', 'gl.HIGH_FLOAT');
verifyShaderPrecisionFormat('gl.VERTEX_SHADER', 'gl.LOW_INT');
verifyShaderPrecisionFormat('gl.VERTEX_SHADER', 'gl.MEDIUM_INT');
verifyShaderPrecisionFormat('gl.VERTEX_SHADER', 'gl.HIGH_INT');
verifyShaderPrecisionFormat('gl.FRAGMENT_SHADER', 'gl.LOW_FLOAT');
verifyShaderPrecisionFormat('gl.FRAGMENT_SHADER', 'gl.MEDIUM_FLOAT');
verifyShaderPrecisionFormat('gl.FRAGMENT_SHADER', 'gl.HIGH_FLOAT');
verifyShaderPrecisionFormat('gl.FRAGMENT_SHADER', 'gl.LOW_INT');
verifyShaderPrecisionFormat('gl.FRAGMENT_SHADER', 'gl.MEDIUM_INT');
verifyShaderPrecisionFormat('gl.FRAGMENT_SHADER', 'gl.HIGH_INT');

debug("");
debug("Test that getShaderPrecisionFormat throws an error with invalid parameters.");
debug("");

shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.getShaderPrecisionFormat(gl.HIGH_INT, gl.VERTEX_SHADER)');

debug("");
debug("Test that WebGLShaderPrecisionFormat values are sensible.");
debug("");

// The minimum values are from OpenGL ES Shading Language spec, section 4.5.

var shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);
shouldBeTrue('shaderPrecisionFormat.rangeMin >= 1');
shouldBeTrue('shaderPrecisionFormat.rangeMax >= 1');
shouldBeTrue('shaderPrecisionFormat.precision >= 8');

shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT);
shouldBeTrue('shaderPrecisionFormat.rangeMin >= 14');
shouldBeTrue('shaderPrecisionFormat.rangeMax >= 14');
shouldBeTrue('shaderPrecisionFormat.precision >= 10');

shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);
shouldBeTrue('shaderPrecisionFormat.rangeMin >= 62');
shouldBeTrue('shaderPrecisionFormat.rangeMax >= 62');
shouldBeTrue('shaderPrecisionFormat.precision >= 16');

shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_INT);
shouldBeTrue('shaderPrecisionFormat.rangeMin >= 8');
shouldBeTrue('shaderPrecisionFormat.rangeMax >= 8');
shouldBeTrue('shaderPrecisionFormat.precision == 0');

shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_INT);
shouldBeTrue('shaderPrecisionFormat.rangeMin >= 10');
shouldBeTrue('shaderPrecisionFormat.rangeMax >= 10');
shouldBeTrue('shaderPrecisionFormat.precision == 0');

shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_INT);
shouldBeTrue('shaderPrecisionFormat.rangeMin >= 16');
shouldBeTrue('shaderPrecisionFormat.rangeMax >= 16');
shouldBeTrue('shaderPrecisionFormat.precision == 0');

debug("");
debug("Test that getShaderPrecisionFormat returns the same thing every call.");
debug("");

shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);
var shaderPrecisionFormat2 = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);
shouldBeTrue('shaderPrecisionFormat.rangeMin == shaderPrecisionFormat2.rangeMin');
shouldBeTrue('shaderPrecisionFormat.rangeMax == shaderPrecisionFormat2.rangeMax');
shouldBeTrue('shaderPrecisionFormat.precision == shaderPrecisionFormat2.precision');

finishTest();
</script>

</body>
</html>


