From 6d120d162bf430acb41eee5317eecfe33e19a058 Mon Sep 17 00:00:00 2001 From: Kelsey Gilbert Date: Wed, 14 Dec 2022 23:08:41 +0000 Subject: [PATCH] Bug 1805626 - Query vert attrib buffer binding directly. r=gfx-reviewers,lsalzman Previously we were querying the current ARRAY_BUFFER_BINDING, which would fail if you did: ``` BindBuffer(ARRAY_BUFFER, a) VertexAttribPointer(...) BindBuffer(ARRAY_BUFFER, b) ``` We would assume we should call VeretxAttribPointer again with `b` bound, when we need to bind `a` instead. Unfortunately, this is hard to test, and we only hit this on drivers where we don't use VAOs, which are rare now. Differential Revision: https://phabricator.services.mozilla.com/D164744 --- gfx/gl/GLBlitHelper.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gfx/gl/GLBlitHelper.cpp b/gfx/gl/GLBlitHelper.cpp index c555ea19707d..95b4fc1533d9 100644 --- a/gfx/gl/GLBlitHelper.cpp +++ b/gfx/gl/GLBlitHelper.cpp @@ -457,8 +457,8 @@ DrawBlitProg::DrawBlitProg(const GLBlitHelper* const parent, const GLuint prog) mLoc_uColorMatrix( mParent.mGL->fGetUniformLocation(mProg, "uColorMatrix")) { const auto& gl = mParent.mGL; - MOZ_GL_ASSERT(gl, mLoc_uDestMatrix != -1); // Required - MOZ_GL_ASSERT(gl, mLoc_uTexMatrix0 != -1); // Required + MOZ_GL_ASSERT(gl, mLoc_uDestMatrix != -1); // Required + MOZ_GL_ASSERT(gl, mLoc_uTexMatrix0 != -1); // Required if (mLoc_uColorMatrix != -1) { MOZ_GL_ASSERT(gl, mLoc_uTexMatrix1 != -1); @@ -567,17 +567,17 @@ void DrawBlitProg::Draw(const BaseArgs& args, gl->fBindVertexArray(mParent.mQuadVAO); } else { // clang-format off - gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_ENABLED, &vaa0Enabled); - gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_SIZE, &vaa0Size); - gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_TYPE, (GLint*)&vaa0Type); - gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &vaa0Normalized); - gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_STRIDE, (GLint*)&vaa0Stride); - gl->fGetVertexAttribPointerv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_POINTER, &vaa0Pointer); + gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, (GLint*)&vaa0Buffer); + gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_ENABLED, &vaa0Enabled); + gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_SIZE, &vaa0Size); + gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_TYPE, (GLint*)&vaa0Type); + gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &vaa0Normalized); + gl->fGetVertexAttribiv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_STRIDE, (GLint*)&vaa0Stride); + gl->fGetVertexAttribPointerv(0, LOCAL_GL_VERTEX_ATTRIB_ARRAY_POINTER, &vaa0Pointer); // clang-format on gl->fEnableVertexAttribArray(0); const ScopedBindArrayBuffer bindVBO(gl, mParent.mQuadVBO); - vaa0Buffer = bindVBO.mOldVBO; gl->fVertexAttribPointer(0, 2, LOCAL_GL_FLOAT, false, 0, 0); }