Index: conformance/textures/tex-input-validation.html |
=================================================================== |
--- conformance/textures/tex-input-validation.html (revision 0) |
+++ conformance/textures/tex-input-validation.html (revision 0) |
@@ -0,0 +1,361 @@ |
+<!-- |
+Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+Use of this source code is governed by a BSD-style license that can be |
+found in the LICENSE file. |
+ --> |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<meta charset="utf-8"> |
+<link rel="stylesheet" href="../../resources/js-test-style.css"/> |
+<script src="../../resources/js-test-pre.js"></script> |
+<script src="../resources/webgl-test.js"></script> |
+<script src="../resources/webgl-test-utils.js"></script> |
+</head> |
+<body> |
+<div id="description"></div> |
+<div id="console"></div> |
+ |
+<script> |
+var wtu = WebGLTestUtils; |
+var gl = null; |
+var tex = null; |
+var error = 0; |
+ |
+function enumToString(value) { |
+ return wtu.glEnumToString(gl, value); |
+} |
+ |
+function testTexImage2D(testCase) |
+{ |
+ var level = 0; |
+ var width = 16; |
+ var height = 16; |
+ var msg = "" + |
+ " internalFormat: " + enumToString(testCase.internalFormat) + |
+ " target: " + enumToString(testCase.target) + |
+ " format: " + enumToString(testCase.format) + |
+ " type: " + enumToString(testCase.type) + |
+ " border: " + testCase.border; |
+ |
+ gl.texImage2D(testCase.target, level, testCase.internalFormat, width, height, testCase.border, testCase.format, testCase.type, null); |
+ error = testCase.expectedError; |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+function testTexSubImage2D(testCase) |
+{ |
+ var level = 0; |
+ var xoffset = 0; |
+ var yoffset = 0; |
+ var width = 16; |
+ var height = 16; |
+ var msg = ""+ |
+ " format: " + enumToString(testCase.format) + |
+ " type: " + enumToString(testCase.type); |
+ var array = new Uint8Array(width * height * 4); |
+ gl.texSubImage2D(testCase.target, level, xoffset, yoffset, width, height, testCase.format, testCase.type, array); |
+ error = testCase.expectedError; |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+function testTexParameter(testCase) |
+{ |
+ var msg = "paramName: " + enumToString(testCase.pname); |
+ error = testCase.expectedError; |
+ gl.texParameteri(testCase.target, testCase.pname, testCase.param); |
+ glErrorShouldBe(gl, error, msg); |
+ gl.texParameterf(testCase.target, testCase.pname, testCase.param); |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+function testGetTexParameter(testCase) |
+{ |
+ var msg = "paramName: " + enumToString(testCase.pname); |
+ error = testCase.expectedError; |
+ gl.getTexParameter(testCase.target, testCase.pname); |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+function testCopyTexImage2D(testCase) |
+{ |
+ var level = 0; |
+ var x = 0; |
+ var y = 0; |
+ var width = 16; |
+ var height = 16; |
+ |
+ var msg = "" + |
+ " colorBufferFormat: " + enumToString(testCase.colorBufferFormat) + |
+ " internalFormat: " + enumToString(testCase.internalFormat) + |
+ " target: " + enumToString(testCase.target) + |
+ " border: " + testCase.border; |
+ |
+ gl.renderbufferStorage(gl.RENDERBUFFER, testCase.colorBufferFormat, width, height); |
+ glErrorShouldBe(gl, gl.NO_ERROR); |
+ shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_COMPLETE"); |
+ |
+ gl.copyTexImage2D(testCase.target, level, testCase.internalFormat, x, y, width, height, testCase.border); |
+ error = testCase.expectedError; |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+function testCopyTexSubImage2D(testCase) |
+{ |
+ var level = 0; |
+ var x = 0; |
+ var y = 0; |
+ var width = 16; |
+ var height = 16; |
+ var xoffset = 0; |
+ var yoffset = 0; |
+ var border = 0; |
+ var type = gl.UNSIGNED_BYTE; |
+ var msg = "" + |
+ " colorBufferFormat: " + enumToString(testCase.colorBufferFormat) + |
+ " internalFormat: " + enumToString(testCase.internalFormat) + |
+ " target: " + enumToString(testCase.target); |
+ |
+ gl.renderbufferStorage(gl.RENDERBUFFER, testCase.colorBufferFormat, width, height); |
+ glErrorShouldBe(gl, gl.NO_ERROR); |
+ shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_COMPLETE"); |
+ |
+ gl.texImage2D(testCase.target, level, testCase.internalFormat, xoffset + width, yoffset + height, border, testCase.internalFormat, type, null); |
+ glErrorShouldBe(gl, gl.NO_ERROR); |
+ |
+ gl.copyTexSubImage2D(testCase.target, level, xoffset, yoffset, x, y, width, height); |
+ error = testCase.expectedError; |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+function testCopyFromInternalFBO(testCase) |
+{ |
+ var target = gl.TEXTURE_2D; |
+ var level = 0; |
+ var x = 0; |
+ var y = 0; |
+ var width = 16; |
+ var height = 16; |
+ var xoffset = 0; |
+ var yoffset = 0; |
+ var border = 0; |
+ var type = gl.UNSIGNED_BYTE; |
+ var msg = "" + |
+ " colorBufferFormat: " + enumToString(testCase.contextAlpha ? gl.RGBA : gl.RGB) + |
+ " internalFormat: " + enumToString(testCase.internalFormat); |
+ |
+ if (testCase.contextAlpha) |
+ gl = create3DContext(null, { alpha: true }); |
+ else |
+ gl = create3DContext(null, { alpha: false }); |
+ shouldBeNonNull("gl"); |
+ shouldBeNonNull("tex = gl.createTexture()"); |
+ gl.bindTexture(target, tex); |
+ if (testCase.subImage) { |
+ gl.texImage2D(target, level, testCase.internalFormat, xoffset + width, yoffset + height, border, testCase.internalFormat, type, null); |
+ glErrorShouldBe(gl, gl.NO_ERROR); |
+ gl.copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); |
+ } else { |
+ glErrorShouldBe(gl, gl.NO_ERROR); |
+ gl.copyTexImage2D(target, level, testCase.internalFormat, x, y, width, height, border); |
+ } |
+ error = testCase.expectedError; |
+ glErrorShouldBe(gl, error, msg); |
+} |
+ |
+description("Validate tex functions input parameters"); |
+ |
+shouldBeNonNull("gl = create3DContext()"); |
+shouldBeNonNull("tex = gl.createTexture()"); |
+gl.bindTexture(gl.TEXTURE_2D, tex); |
+glErrorShouldBe(gl, gl.NO_ERROR); |
+ |
+debug(""); |
+debug("Checking TexImage2D: a set of inputs that are valid in GL but invalid in GLES2"); |
+ |
+var testCases = |
+ [ {target: 0x8064, // GL_PROXY_TEXTURE_2D |
+ internalFormat: gl.RGBA, |
+ border: 0, |
+ format: gl.RGBA, |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ internalFormat: 0x1903, // GL_RED |
+ border: 0, |
+ format: 0x1903, // GL_RED |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ internalFormat: gl.RGBA, |
+ border: 1, |
+ format: gl.RGBA, |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.INVALID_VALUE}, |
+ {target: gl.TEXTURE_2D, |
+ internalFormat: gl.RGBA, |
+ border: 0, |
+ format: gl.RGB, |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.INVALID_OPERATION}, |
+ {target: gl.TEXTURE_2D, |
+ internalFormat: gl.RGBA, |
+ border: 0, |
+ format: gl.RGBA, |
+ type: gl.BYTE, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ internalFormat: gl.RGBA, |
+ border: 0, |
+ format: gl.RGBA, |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.NO_ERROR} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testTexImage2D(testCases[ii]); |
+ |
+debug(""); |
+debug("Checking TexSubImage2D: a set of inputs that are valid in GL but invalid in GLES2"); |
+ |
+testCases = |
+ [ {target: gl.TEXTURE_2D, |
+ format: 0x1903, // GL_RED |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ format: gl.RGBA, |
+ type: gl.BYTE, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ format: gl.RGBA, |
+ type: gl.UNSIGNED_BYTE, |
+ expectedError: gl.NO_ERROR} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testTexSubImage2D(testCases[ii]); |
+ |
+debug(""); |
+debug("Checking TexParameter: a set of inputs that are valid in GL but invalid in GLES2"); |
+ |
+testCases = |
+ [ {target: 0x0DE0, // GL_TEXTURE_1D |
+ pname: gl.TEXTURE_WRAP_T, |
+ param: gl.REPEAT, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ pname: 0x813A, // GL_TEXTURE_MIN_LOD |
+ param: 0, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ pname: gl.TEXTURE_WRAP_T, |
+ param: 0x2900, // GL_CLAMP |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ pname: gl.TEXTURE_WRAP_T, |
+ param: gl.REPEAT, |
+ expectedError: gl.NO_ERROR} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testTexParameter(testCases[ii]); |
+ |
+debug(""); |
+debug("Checking GetTexParameter: a set of inputs that are valid in GL but invalid in GLES2"); |
+ |
+testCases = |
+ [ {target: 0x0DE0, // GL_TEXTURE_1D |
+ pname: gl.TEXTURE_WRAP_T, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ pname: 0x813A, // GL_TEXTURE_MIN_LOD |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ pname: gl.TEXTURE_WRAP_T, |
+ expectedError: gl.NO_ERROR} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testGetTexParameter(testCases[ii]); |
+ |
+debug(""); |
+debug("Checking CopyTexImage2D: a set of inputs that are valid in GL but invalid in GLES2"); |
+ |
+var colorBuffer = null; |
+var fbo = null; |
+ |
+shouldBeNonNull("fbo = gl.createFramebuffer()"); |
+gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); |
+shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); |
+gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); |
+gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer); |
+glErrorShouldBe(gl, gl.NO_ERROR); |
+ |
+testCases = |
+ [ {target: gl.TEXTURE_2D, |
+ colorBufferFormat: gl.RGB565, |
+ internalFormat: 0x8054, // GL_RGB16 |
+ border: 0, |
+ expectedError: gl.INVALID_ENUM}, |
+ {target: gl.TEXTURE_2D, |
+ colorBufferFormat: gl.RGB565, |
+ internalFormat: gl.RGBA, |
+ border: 1, |
+ expectedError: gl.INVALID_VALUE}, |
+ {target: gl.TEXTURE_2D, |
+ colorBufferFormat: gl.RGB565, |
+ internalFormat: gl.RGBA, |
+ border: 0, |
+ expectedError: gl.INVALID_OPERATION}, |
+ {target: gl.TEXTURE_2D, |
+ colorBufferFormat: gl.RGB565, |
+ internalFormat: gl.RGB, |
+ border: 0, |
+ expectedError: gl.NO_ERROR} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testCopyTexImage2D(testCases[ii]); |
+ |
+debug(""); |
+debug("Checking CopyTexSubImage2D: a set of inputs that are valid in GL but invalid in GLES2"); |
+ |
+testCases = |
+ [ {target: gl.TEXTURE_2D, |
+ colorBufferFormat: gl.RGB5_A1, |
+ internalFormat: gl.RGBA, |
+ expectedError: gl.NO_ERROR}, |
+ {target: gl.TEXTURE_2D, |
+ colorBufferFormat: gl.RGB565, |
+ internalFormat: gl.RGBA, |
+ expectedError: gl.INVALID_OPERATION} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testCopyTexSubImage2D(testCases[ii]); |
+ |
+debug(""); |
+debug("Checking CopyTex{Sub}Image2D: copy from WebGL internal framebuffer"); |
+ |
+testCases = |
+ [ {contextAlpha: true, |
+ internalFormat: gl.RGBA, |
+ subImage: false, |
+ expectedError: gl.NO_ERROR}, |
+ {contextAlpha: false, |
+ internalFormat: gl.RGBA, |
+ subImage: false, |
+ expectedError: gl.INVALID_OPERATION}, |
+ {contextAlpha: true, |
+ internalFormat: gl.RGBA, |
+ subImage: true, |
+ expectedError: gl.NO_ERROR}, |
+ {contextAlpha: false, |
+ internalFormat: gl.RGBA, |
+ subImage: true, |
+ expectedError: gl.INVALID_OPERATION} ]; |
+ |
+for (var ii = 0; ii < testCases.length; ++ii) |
+ testCopyFromInternalFBO(testCases[ii]); |
+ |
+successfullyParsed = true; |
+</script> |
+ |
+<script src="../../resources/js-test-post.js"></script> |
+</body> |
+</html> |
Property changes on: conformance/textures/tex-input-validation.html |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |