Modified: trunk/LayoutTests/webgl/resources/webgl_test_files/conformance/extensions/webgl-depth-texture.html (144240 => 144241)
--- trunk/LayoutTests/webgl/resources/webgl_test_files/conformance/extensions/webgl-depth-texture.html 2013-02-27 22:39:19 UTC (rev 144240)
+++ trunk/LayoutTests/webgl/resources/webgl_test_files/conformance/extensions/webgl-depth-texture.html 2013-02-27 22:44:29 UTC (rev 144241)
@@ -71,13 +71,24 @@
var tex;
var name;
var supportedFormats;
+var res = 8;
var canvas2;
+var imageData;
if (!gl) {
testFailed("WebGL context does not exist");
} else {
testPassed("WebGL context exists");
+ // make canvas for testing.
+ canvas2 = document.createElement("canvas");
+ canvas2.width = res;
+ canvas2.height = res;
+ var ctx = canvas2.getContext("2d");
+ ctx.fillStyle = "blue";
+ ctx.fillRect(0, 0, canvas2.width, canvas2.height);
+ imageData = ctx.getImageData(0, 0, canvas2.width, canvas2.height);
+
// Run tests with extension disabled
runTestDisabled();
@@ -119,9 +130,12 @@
gl.bindTexture(gl.TEXTURE_2D, tex);
shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, 1, 1, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, null)');
shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, 1, 1, 0, gl.DEPTH_COMPONENT, gl.UNSIGNED_INT, null)');
+ shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, imageData)');
+ shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, gl.DEPTH_COMPONENT, gl.UNSIGNED_INT, imageData)');
+ shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, gl.DEPTH_COMPONENT, gl.UNSIGNED_SHORT, canvas2)');
+ shouldGenerateGLError(gl, gl.INVALID_ENUM, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, gl.DEPTH_COMPONENT, gl.UNSIGNED_INT, canvas2)');
}
-
function dumpIt(gl, res, msg) {
return; // comment out to debug
debug(msg);
@@ -140,16 +154,6 @@
function runTestExtension() {
debug("Testing WEBGL_depth_texture");
- var res = 8;
-
- // make canvas for testing.
- canvas2 = document.createElement("canvas");
- canvas2.width = res;
- canvas2.height = res;
- var ctx = canvas2.getContext("2d");
- ctx.fillStyle = "blue";
- ctx.fillRect(0, 0, canvas2.width, canvas2.height);
-
var program = wtu.setupProgram(gl, ['vshader', 'fshader'], ['a_position']);
gl.useProgram(program);
gl.uniform2f(gl.getUniformLocation(program, "u_resolution"), res, res);
@@ -216,6 +220,15 @@
// test with canvas
shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)');
+ // test with canvas with illegal internal format
+ shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, 0, gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)');
+
+ // test with ImageData
+ shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', gl.' + typeInfo.format + ', ' + typeStr + ', imageData)');
+
+ // test with ImageData with illegal internal format
+ shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, 0, gl.' + typeInfo.format + ', ' + typeStr + ', imageData)');
+
// test copyTexImage2D
shouldGenerateGLError(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 0, 0, 1, 1, 0)');
@@ -225,6 +238,12 @@
// test texSubImage2D
shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')');
+ // test texSubImage2D with canvas
+ shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)');
+
+ // test texSubImage2D with ImageData
+ shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.' + typeInfo.format + ', ' + typeStr + ', imageData)');
+
// test copyTexSubImage2D
shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)');
Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp (144240 => 144241)
--- trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp 2013-02-27 22:39:19 UTC (rev 144240)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContext.cpp 2013-02-27 22:44:29 UTC (rev 144241)
@@ -3711,6 +3711,10 @@
Vector<uint8_t> data;
if (!pixels)
return;
+ if (!validateTexFuncFormatAndType("texImage2D", format, type, level))
+ return;
+ if (!validateSettableTexFormat("texImage2D", format))
+ return;
bool needConversion = true;
// The data from ImageData is always of format RGBA8.
// No conversion is needed if destination format is RGBA and type is USIGNED_BYTE and no Flip or Premultiply operation is required.
@@ -3759,6 +3763,10 @@
ec = SECURITY_ERR;
return;
}
+ if (!validateTexFuncFormatAndType("texImage2D", format, type, level))
+ return;
+ if (!validateSettableTexFormat("texImage2D", format))
+ return;
WebGLTexture* texture = validateTextureBinding("texImage2D", target, true);
// If possible, copy from the canvas element directly to the texture
@@ -3900,6 +3908,10 @@
ec = 0;
if (isContextLost())
return;
+ if (!validateTexFuncFormatAndType("texSubImage2D", format, type, level))
+ return;
+ if (!validateSettableTexFormat("texSubImage2D", format))
+ return;
Vector<uint8_t> data;
GraphicsContext3D::ImageExtractor imageExtractor(image, domSource, premultiplyAlpha, m_unpackColorspaceConversion == GraphicsContext3D::NONE);
if (!imageExtractor.extractSucceeded()) {
@@ -3961,6 +3973,10 @@
return;
if (!pixels)
return;
+ if (!validateTexFuncFormatAndType("texSubImage2D", format, type, level))
+ return;
+ if (!validateSettableTexFormat("texSubImage2D", format))
+ return;
Vector<uint8_t> data;
bool needConversion = true;
// The data from ImageData is always of format RGBA8.
@@ -4009,6 +4025,10 @@
ec = SECURITY_ERR;
return;
}
+ if (!validateTexFuncFormatAndType("texSubImage2D", format, type, level))
+ return;
+ if (!validateSettableTexFormat("texSubImage2D", format))
+ return;
RefPtr<ImageData> imageData = canvas->getImageData();
if (imageData)
texSubImage2D(target, level, xoffset, yoffset, format, type, imageData.get(), ec);