| Index: LayoutTests/webgl/resources/webgl_test_files/conformance/resources/oes-texture-float-and-half-float-linear.js
|
| diff --git a/LayoutTests/webgl/resources/webgl_test_files/conformance/resources/oes-texture-float-and-half-float-linear.js b/LayoutTests/webgl/resources/webgl_test_files/conformance/resources/oes-texture-float-and-half-float-linear.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c2f0c7d260e9a80ddf01896c9de181164e07a51e
|
| --- /dev/null
|
| +++ b/LayoutTests/webgl/resources/webgl_test_files/conformance/resources/oes-texture-float-and-half-float-linear.js
|
| @@ -0,0 +1,173 @@
|
| +/*
|
| +** Copyright (c) 2013 The Khronos Group Inc.
|
| +**
|
| +** Permission is hereby granted, free of charge, to any person obtaining a
|
| +** copy of this software and/or associated documentation files (the
|
| +** "Materials"), to deal in the Materials without restriction, including
|
| +** without limitation the rights to use, copy, modify, merge, publish,
|
| +** distribute, sublicense, and/or sell copies of the Materials, and to
|
| +** permit persons to whom the Materials are furnished to do so, subject to
|
| +** the following conditions:
|
| +**
|
| +** The above copyright notice and this permission notice shall be included
|
| +** in all copies or substantial portions of the Materials.
|
| +**
|
| +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
| +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
| +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
| +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
| +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
| +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
| +*/
|
| +
|
| +function generateTest(extensionTypeName, extensionName, pixelType, prologue) {
|
| + var wtu = WebGLTestUtils;
|
| + var gl = null;
|
| + var successfullyParsed = false;
|
| +
|
| + var init = function()
|
| + {
|
| + initTestingHarnessWaitUntilDone();
|
| + description("This test verifies the functionality of the " + extensionName + " extension, if it is available.");
|
| +
|
| + var canvas = document.getElementById("canvas");
|
| + gl = wtu.create3DContext(canvas);
|
| +
|
| + if (!prologue(gl, extensionTypeName)) {
|
| + finishTest();
|
| + return;
|
| + }
|
| +
|
| + // Before the extension is enabled
|
| + var extensionEnabled = false;
|
| + runTestSuite(extensionEnabled);
|
| +
|
| + if (!gl.getExtension(extensionName))
|
| + testPassed("No " + extensionName + " support -- this is legal");
|
| + else {
|
| + // After the extension is enabled
|
| + extensionEnabled = true;
|
| + runTestSuite(extensionEnabled);
|
| + }
|
| +
|
| + finishTest();
|
| + }
|
| +
|
| + function runTestSuite(extensionEnabled)
|
| + {
|
| + var magF = [gl.NEAREST, gl.LINEAR];
|
| + var minF = [gl.NEAREST, gl.LINEAR, gl.NEAREST_MIPMAP_NEAREST, gl.NEAREST_MIPMAP_LINEAR, gl.LINEAR_MIPMAP_NEAREST, gl.LINEAR_MIPMAP_LINEAR];
|
| + var tex2DFShader = [
|
| + 'uniform sampler2D tex;',
|
| + 'void main() {',
|
| + ' gl_FragData[0] = texture2D(tex, vec2(0.5, 0.5)) * vec4(4.0, 2.0, 2.0, 1);',
|
| + '}'].join('\n');
|
| +
|
| + var positionVertexShader = [
|
| + 'attribute vec4 vPosition;',
|
| + 'void main() {',
|
| + ' gl_Position = vPosition;',
|
| + '}'].join('\n');
|
| +
|
| + var texCubeFShader = [
|
| + 'uniform samplerCube tex;',
|
| + 'void main() {',
|
| + ' gl_FragColor = textureCube(tex, normalize(vec3(0.5, 0.5, 1))) * vec4(4.0, 2.0, 2.0, 1);',
|
| + '}'].join('\n');
|
| +
|
| + var vs = wtu.loadShader(gl, positionVertexShader, gl.VERTEX_SHADER);
|
| + var fs_2d = wtu.loadShader(gl, tex2DFShader, gl.FRAGMENT_SHADER);
|
| + var fs_cube = wtu.loadShader(gl, texCubeFShader, gl.FRAGMENT_SHADER);
|
| +
|
| + // TEXTURE_2D
|
| + var program = wtu.setupProgram(gl, [vs, fs_2d]);
|
| + gl.useProgram(program);
|
| + wtu.setupUnitQuad(gl);
|
| + for (var kk = 0; kk < 2; ++kk) {
|
| + for (var ii = 0; ii < 6; ++ii) {
|
| + var linear = false;
|
| + if (magF[kk] == gl.LINEAR || (minF[ii] != gl.NEAREST && minF[ii] != gl.NEAREST_MIPMAP_NEAREST))
|
| + linear = true;
|
| + var color = (!extensionEnabled && linear) ? [0, 0, 0, 255] : [255, 255, 255, 255];
|
| + runEachTest(gl.TEXTURE_2D, magF[kk], minF[ii], linear, extensionEnabled, color);
|
| + }
|
| + }
|
| +
|
| + // TEXTURE_CUBE_MAP
|
| + var programCube = wtu.setupProgram(gl, [vs, fs_cube]);
|
| + gl.useProgram(programCube);
|
| + wtu.setupUnitQuad(gl);
|
| + for (var kk = 0; kk < 2; ++kk) {
|
| + for (var ii = 0; ii < 6; ++ii) {
|
| + var linear = false;
|
| + if (magF[kk] == gl.LINEAR || (minF[ii] != gl.NEAREST && minF[ii] != gl.NEAREST_MIPMAP_NEAREST))
|
| + linear = true;
|
| + var color = (!extensionEnabled && linear) ? [0, 0, 0, 255] : [255, 255, 255, 255];
|
| + runEachTest(gl.TEXTURE_CUBE_MAP, magF[kk], minF[ii], linear, extensionEnabled, color);
|
| + }
|
| + }
|
| + }
|
| +
|
| + function runEachTest(textureTarget, magFilter, minFilter, linear, extensionEnabled, expected)
|
| + {
|
| + var format = gl.RGBA;
|
| + var numberOfChannels = 4;
|
| + debug("");
|
| + debug("testing target: " + wtu.glEnumToString(gl,textureTarget) +
|
| + ", testing format: " + wtu.glEnumToString(gl, format) +
|
| + ", magFilter is: " + wtu.glEnumToString(gl, magFilter) +
|
| + ", minFilter is: " + wtu.glEnumToString(gl, minFilter) +
|
| + ", " + extensionName + " is " + (extensionEnabled ? "enabled": "not enabled")
|
| + );
|
| +
|
| + // Generate data.
|
| + var width = 4;
|
| + var height = 4;
|
| + var canvas2d = document.createElement('canvas');
|
| + canvas2d.width = width;
|
| + canvas2d.height = height;
|
| + var ctx2d = canvas2d.getContext('2d');
|
| + var color = [64, 128, 128, 255];
|
| + ctx2d.fillStyle = "rgba(" + color[0] + "," + color[1] + "," + color[2] + "," + color[3] + ")";
|
| + ctx2d.fillRect(0, 0, width, height);
|
| +
|
| + var texture = gl.createTexture();
|
| + gl.bindTexture(textureTarget, texture);
|
| + gl.texParameteri(textureTarget, gl.TEXTURE_MAG_FILTER, magFilter);
|
| + gl.texParameteri(textureTarget, gl.TEXTURE_MIN_FILTER, minFilter);
|
| + gl.texParameteri(textureTarget, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
| + gl.texParameteri(textureTarget, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
| +
|
| + if (textureTarget == gl.TEXTURE_2D) {
|
| + gl.texImage2D(gl.TEXTURE_2D, 0, format, format, gl[pixelType], canvas2d);
|
| + if (minFilter != gl.NEAREST && minFilter != gl.LINEAR)
|
| + gl.generateMipmap(gl.TEXTURE_2D);
|
| + }
|
| + else if (textureTarget == gl.TEXTURE_CUBE_MAP) {
|
| + var targets = [
|
| + gl.TEXTURE_CUBE_MAP_POSITIVE_X,
|
| + gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
|
| + gl.TEXTURE_CUBE_MAP_POSITIVE_Y,
|
| + gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,
|
| + gl.TEXTURE_CUBE_MAP_POSITIVE_Z,
|
| + gl.TEXTURE_CUBE_MAP_NEGATIVE_Z];
|
| + for (var tt = 0; tt < targets.length; ++tt)
|
| + gl.texImage2D(targets[tt], 0, format, format, gl[pixelType], canvas2d);
|
| + if (minFilter != gl.NEAREST && minFilter != gl.LINEAR)
|
| + gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
|
| + }
|
| + wtu.drawQuad(gl);
|
| + if (!linear) {
|
| + glErrorShouldBe(gl, gl.NO_ERROR, extensionTypeName + " texture with non-Linear filter should succeed with NO_ERROR no matter whether " + extensionName + " is enabled or not");
|
| + } else if (!extensionEnabled) {
|
| + glErrorShouldBe(gl, gl.NO_ERROR, extensionTypeName + " texture with Linear filter should produce [0, 0, 0, 1.0] with NO_ERROR if " + extensionName + " isn't enabled");
|
| + } else {
|
| + glErrorShouldBe(gl, gl.NO_ERROR, extensionTypeName + " texture with Linear filter should succeed with NO_ERROR if " + extensionTypeName + " is enabled");
|
| + }
|
| +
|
| + wtu.checkCanvas(gl, expected, "should be " + expected[0] + "," + expected[1] + "," + expected[2] + "," + expected[3]);
|
| + }
|
| +
|
| + return init;
|
| +}
|
|
|