More fixes from review. draft
authorJeff Gilbert <jdashg@gmail.com>
Thu, 17 Dec 2015 16:16:52 -0800
changeset 316085 ceeba974fa1905d5bae78b425ed799d59148d805
parent 316084 4e4963104c3eff60281b8166caae4d51cd156445
child 316086 a8cef41b6a865c7cf0cf6f105dd5aac059dd129a
push id8514
push userjgilbert@mozilla.com
push dateFri, 18 Dec 2015 00:24:33 +0000
milestone45.0a1
More fixes from review.
dom/canvas/WebGLTexture.cpp
dom/canvas/WebGLTextureUpload.cpp
dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html
dom/canvas/test/webgl-conformance/conformance/more/util.js
dom/canvas/test/webgl-conformance/conformance/textures/tex-input-validation.html
--- a/dom/canvas/WebGLTexture.cpp
+++ b/dom/canvas/WebGLTexture.cpp
@@ -567,21 +567,17 @@ WebGLTexture::ResolveForDraw(const char*
 }
 
 bool
 WebGLTexture::EnsureImageDataInitialized(const char* funcName, TexImageTarget target,
                                          uint32_t level)
 {
     auto& imageInfo = ImageInfoAt(target, level);
     MOZ_ASSERT(imageInfo.IsDefined());
-    /*
-    if (!imageInfo.IsDefined())
-        return true; // The driver should handle this for us?
-                     // (happens because ResolveFakeBlack plus incomplete mipchains)
-    */
+
     if (imageInfo.IsDataInitialized())
         return true;
 
     return InitializeImageData(funcName, target, level);
 }
 
 bool
 WebGLTexture::InitializeImageData(const char* funcName, TexImageTarget target,
--- a/dom/canvas/WebGLTextureUpload.cpp
+++ b/dom/canvas/WebGLTextureUpload.cpp
@@ -1635,17 +1635,17 @@ ScopedCopyTexImageSource::ScopedCopyTexI
     GLuint rgbaFB = 0;
     gl->fGenFramebuffers(1, &rgbaFB);
     gl->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, rgbaFB);
     gl->fFramebufferRenderbuffer(LOCAL_GL_FRAMEBUFFER, LOCAL_GL_COLOR_ATTACHMENT0,
                                  LOCAL_GL_RENDERBUFFER, rgbaRB);
 
     const GLenum status = gl->fCheckFramebufferStatus(LOCAL_GL_FRAMEBUFFER);
     if (status != LOCAL_GL_FRAMEBUFFER_COMPLETE) {
-        MOZ_CRASH("Temp framebuffer is not Complete.");
+        MOZ_CRASH("Temp framebuffer is not complete.");
     }
 
     // Restore RB binding.
     scopedRB.Unwrap(); // This function should really have a better name.
 
     // Draw-blit rgbaTex into rgbaFB.
     const gfx::IntSize srcSize(srcWidth, srcHeight);
     gl->BlitHelper()->DrawBlitTextureToFramebuffer(scopedTex.Texture(), rgbaFB,
--- a/dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html
+++ b/dom/canvas/test/webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html
@@ -28,85 +28,79 @@ FROM, OUT OF OR IN CONNECTION WITH THE S
 OTHER DEALINGS IN THE SOFTWARE.
 
 -->
 <link rel="stylesheet" type="text/css" href="../unit.css" />
 <script type="application/x-javascript" src="../unit.js"></script>
 <script type="application/x-javascript" src="../util.js"></script>
 <script src="../../resources/webgl-test-utils.js"></script>
 <script type="application/x-javascript">
-var wtu = WebGLTestUtils;
 
 Tests.startUnit = function () {
     var canvas = document.getElementById('gl');
-    var gl = canvas.getContext(GL_CONTEXT_ID);
+    var gl = wrapGLContext(canvas.getContext(GL_CONTEXT_ID));
     return [gl];
 }
 
 Tests.setup = function(gl) {
     var tex = gl.createTexture();
     gl.bindTexture(gl.TEXTURE_2D, tex);
     return [gl]
 }
 
 Tests.teardown = function(gl,tex) {
     gl.bindTexture(gl.TEXTURE_2D, null);
     gl.deleteTexture(tex);
 }
 
-function assertGLErrorIn(gl, expectedList, desc, func) {
-    func();
-    wtu.glErrorShouldBeIn(gl, expectedList, desc);
-}
-
 Tests.testTexImage2D = function(gl) {
-    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 2,2,0,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));
-    assertGLErrorIn(gl, [gl.INVALID_OPERATION], "not enough data", function(){
+    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 2,2,0,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0]));
+    assertGLError(gl, gl.INVALID_OPERATION, "not enough data", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, 2,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_OPERATION], "not enough data", function(){
+    assertGLError(gl, gl.INVALID_OPERATION, "not enough data", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, 1,2,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_ENUM], "bad target", function(){
+    assertGLError(gl, gl.INVALID_ENUM, "bad target", function(){
         gl.texSubImage2D(gl.FLOAT, 0, 0,0, 1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_VALUE], "width out of range", function(){
+    assertGLError(gl, gl.INVALID_VALUE, "width out of range", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, 3,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_VALUE], "height out of range", function(){
+    assertGLError(gl, gl.INVALID_VALUE, "height out of range", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, 1,3,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]));
     });
     assertOk("zero size", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, 0,0,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_VALUE], "negative width", function(){
+    assertGLError(gl, gl.INVALID_VALUE, "negative width", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, -1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_VALUE], "negative height", function(){
+    assertGLError(gl, gl.INVALID_VALUE, "negative height", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,0, 0, 1,-1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_VALUE], "negative x", function(){
+    assertGLError(gl, gl.INVALID_VALUE, "negative x", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,-1,1,1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_VALUE], "negative y", function(){
+    assertGLError(gl, gl.INVALID_VALUE, "negative y", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0,1,-1,1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
     assertGLErrorIn(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], "bad format", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.FLOAT,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0,0]));
     });
     assertGLErrorIn(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], "bad type", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.RGBA,gl.TEXTURE_2D, new Uint8Array([0,0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_OPERATION], "not enough data", function(){
+    assertGLError(gl, gl.INVALID_OPERATION, "not enough data", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.RGBA,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_OPERATION], "format does not match internal format", function(){
+    assertGLError(gl, gl.INVALID_OPERATION, "format does not match internal format", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.RGB,gl.UNSIGNED_BYTE, new Uint8Array([0,0,0]));
     });
-    assertGLErrorIn(gl, [gl.INVALID_OPERATION], "type does not match original", function(){
+    assertGLError(gl, gl.INVALID_OPERATION, "type does not match original", function(){
         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0,0, 1,1,gl.RGBA,gl.UNSIGNED_SHORT_4_4_4_4, new Uint16Array([0]));
     });
 }
 
 
 Tests.endUnit = function(gl) {
 }
 
--- a/dom/canvas/test/webgl-conformance/conformance/more/util.js
+++ b/dom/canvas/test/webgl-conformance/conformance/more/util.js
@@ -996,19 +996,18 @@ function wrapGLContext(gl) {
   }
   wrap.getError = function(){ return gl.getError(); };
   return wrap;
 }
 
 // Assert that f generates a specific GL error.
 function assertGLError(gl, err, name, f) {
   if (f == null) { f = name; name = null; }
-  var r = false;
   var glErr = 0;
-  try { f(); } catch(e) { r=true; glErr = e.glError; }
+  try { f(); } catch(e) { glErr = e.glError; }
   if (glErr !== err) {
     if (glErr === undefined) {
       testFailed("assertGLError: UNEXPCETED EXCEPTION", name, f);
     } else {
       testFailed("assertGLError: expected: " + getGLErrorAsString(gl, err) +
                  " actual: " + getGLErrorAsString(gl, glErr), name, f);
     }
     return false;
@@ -1022,17 +1021,17 @@ function assertGLErrorIn(gl, expectedErr
 
   var actualError = 0;
   try {
     f();
   } catch(e) {
     if ('glError' in e) {
       actualError = e.glError;
     } else {
-      testFailed("assertGLError: UNEXPCETED EXCEPTION", name, f);
+      testFailed("assertGLErrorIn: UNEXPCETED EXCEPTION", name, f);
       return false;
     }
   }
 
   var expectedErrorStrList = [];
   var expectedErrorSet = {};
   for (var i in expectedErrorList) {
     var cur = expectedErrorList[i];
@@ -1040,17 +1039,17 @@ function assertGLErrorIn(gl, expectedErr
     expectedErrorStrList.push(getGLErrorAsString(gl, cur));
   }
   var expectedErrorListStr = "[" + expectedErrorStrList.join(", ") + "]";
 
   if (actualError in expectedErrorSet) {
     return true;
   }
 
-  testFailed("assertGLError: expected: " + expectedErrorListStr +
+  testFailed("assertGLErrorIn: expected: " + expectedErrorListStr +
              " actual: " + getGLErrorAsString(gl, actualError), name, f);
   return false;
 }
 
 // Assert that f generates some GL error. Used in situations where it's
 // ambigious which of multiple possible errors will be generated.
 function assertSomeGLError(gl, name, f) {
   if (f == null) { f = name; name = null; }
--- a/dom/canvas/test/webgl-conformance/conformance/textures/tex-input-validation.html
+++ b/dom/canvas/test/webgl-conformance/conformance/textures/tex-input-validation.html
@@ -59,27 +59,27 @@ function testTexSubImage2D(testCase)
     wtu.glErrorShouldBeIn(gl, errors, msg);
 }
 
 function testTexParameter(testCase)
 {
     var msg = "paramName: " + enumToString(testCase.pname);
     errors = testCase.expectedErrors;
     gl.texParameteri(testCase.target, testCase.pname, testCase.param);
-    glErrorShouldBe(gl, errors, msg);
+    wtu.glErrorShouldBeIn(gl, errors, msg);
     gl.texParameterf(testCase.target, testCase.pname, testCase.param);
-    glErrorShouldBe(gl, errors, msg);
+    wtu.glErrorShouldBeIn(gl, errors, msg);
 }
 
 function testGetTexParameter(testCase)
 {
     var msg = "paramName: " + enumToString(testCase.pname);
     errors = testCase.expectedErrors;
     gl.getTexParameter(testCase.target, testCase.pname);
-    glErrorShouldBe(gl, errors, msg);
+    wtu.glErrorShouldBeIn(gl, errors, msg);
 }
 
 function testCopyTexImage2D(testCase)
 {
     var level = 0;
     var x = 0;
     var y = 0;
     var width = 16;