Bug 1300946 - GetCurrentBinding is the wrong approach. - r=jrmuizel draft
authorJeff Gilbert <jgilbert@mozilla.com>
Wed, 07 Sep 2016 15:27:20 -0700
changeset 415170 ee5900d18984ae7ed96b00d52dc42f0d229749b4
parent 410865 94befb88aee28153afdd35ef8a46761cd1a07bc6
child 415171 b613a392879b2e85f2daaa20fae56f7ed6d11e4b
child 415175 84822014632c99717c45d2f7f1cf2ff954b5decf
child 416664 45afa8079de8725bdb7c2099f5d9e283ff38c668
push id29809
push userbmo:jgilbert@mozilla.com
push dateMon, 19 Sep 2016 20:29:43 +0000
reviewersjrmuizel
bugs1300946
milestone51.0a1
Bug 1300946 - GetCurrentBinding is the wrong approach. - r=jrmuizel MozReview-Commit-ID: 866FkuUMMob
dom/canvas/WebGLContext.h
dom/canvas/WebGLContextBuffers.cpp
--- a/dom/canvas/WebGLContext.h
+++ b/dom/canvas/WebGLContext.h
@@ -776,18 +776,16 @@ protected:
 
     nsTArray<WebGLRefPtr<WebGLBuffer>> mBoundUniformBuffers;
     nsTArray<WebGLRefPtr<WebGLBuffer>> mBoundTransformFeedbackBuffers;
 
     WebGLRefPtr<WebGLBuffer>& GetBufferSlotByTarget(GLenum target);
     WebGLRefPtr<WebGLBuffer>& GetBufferSlotByTargetIndexed(GLenum target,
                                                            GLuint index);
 
-    GLenum GetCurrentBinding(WebGLBuffer* buffer) const;
-
 // -----------------------------------------------------------------------------
 // Queries (WebGL2ContextQueries.cpp)
 protected:
     WebGLRefPtr<WebGLQuery>& GetQuerySlotByTarget(GLenum target);
 
     WebGLRefPtr<WebGLQuery> mActiveOcclusionQuery;
     WebGLRefPtr<WebGLQuery> mActiveTransformFeedbackQuery;
 
--- a/dom/canvas/WebGLContextBuffers.cpp
+++ b/dom/canvas/WebGLContextBuffers.cpp
@@ -229,17 +229,17 @@ WebGLContext::BufferDataT(GLenum target,
     }
 
     boundBuffer->SetByteLength(data.LengthAllowShared());
 
     // Warning: Possibly shared memory.  See bug 1225033.
     if (!boundBuffer->ElementArrayCacheBufferData(data.DataAllowShared(), data.LengthAllowShared())) {
         boundBuffer->SetByteLength(0);
         return ErrorOutOfMemory("bufferData: out of memory");
-	}
+    }
 }
 
 void
 WebGLContext::BufferData(GLenum target,
                          const dom::SharedArrayBuffer& data,
                          GLenum usage)
 {
     BufferDataT(target, data, usage);
@@ -460,34 +460,16 @@ WebGLContext::ValidateBufferForTarget(GL
      * Any call to one of these functions which attempts to bind a
      * WebGLBuffer that has the element array WebGL buffer type to a
      * binding point that falls under other data, or bind a
      * WebGLBuffer which has the other data WebGL buffer type to
      * ELEMENT_ARRAY_BUFFER will generate an INVALID_OPERATION error,
      * and the state of the binding point will remain untouched.
      */
 
-    GLenum boundTo = GetCurrentBinding(buffer);
-    if (boundTo != LOCAL_GL_NONE) {
-        if (target == LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER &&
-            boundTo != LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER)
-        {
-            ErrorInvalidOperation("Can't bind buffer to TRANSFORM_FEEDBACK_BUFFER as the "
-                                  "buffer is already bound to another bind point.");
-            return false;
-        }
-        else if (target != LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER &&
-                 boundTo == LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER)
-        {
-            ErrorInvalidOperation("Can't bind buffer to bind point as it is currently "
-                                  "bound to TRANSFORM_FEEDBACK_BUFFER.");
-            return false;
-        }
-    }
-
     WebGLBuffer::Kind content = buffer->Content();
     if (content == WebGLBuffer::Kind::Undefined)
         return true;
 
     switch (target) {
     case LOCAL_GL_COPY_READ_BUFFER:
     case LOCAL_GL_COPY_WRITE_BUFFER:
         return true;
@@ -582,47 +564,16 @@ WebGLContext::GetBufferSlotByTargetIndex
         return mBoundUniformBuffers[index];
 
     default:
         MOZ_CRASH("GFX: Should not get here.");
     }
 }
 
 GLenum
-WebGLContext::GetCurrentBinding(WebGLBuffer* buffer) const
-{
-    if (mBoundArrayBuffer == buffer)
-        return LOCAL_GL_ARRAY_BUFFER;
-
-    if (mBoundCopyReadBuffer == buffer)
-        return LOCAL_GL_COPY_READ_BUFFER;
-
-    if (mBoundCopyWriteBuffer == buffer)
-        return LOCAL_GL_COPY_WRITE_BUFFER;
-
-    if (mBoundPixelPackBuffer == buffer)
-        return LOCAL_GL_PIXEL_PACK_BUFFER;
-
-    if (mBoundPixelUnpackBuffer == buffer)
-        return LOCAL_GL_PIXEL_UNPACK_BUFFER;
-
-    if (mBoundTransformFeedbackBuffer == buffer ||
-        mBoundTransformFeedbackBuffers.Contains(buffer)) {
-        return LOCAL_GL_TRANSFORM_FEEDBACK_BUFFER;
-    }
-
-    if (mBoundUniformBuffer == buffer ||
-        mBoundUniformBuffers.Contains(buffer)) {
-        return LOCAL_GL_UNIFORM_BUFFER;
-    }
-
-    return LOCAL_GL_NONE;
-}
-
-GLenum
 WebGLContext::CheckedBufferData(GLenum target, GLsizeiptr size,
                                 const GLvoid* data, GLenum usage)
 {
 #ifdef XP_MACOSX
     // bug 790879
     if (gl->WorkAroundDriverBugs() &&
         int64_t(size) > INT32_MAX) // cast avoids a potential always-true warning on 32bit
     {