Add support for GL_DRAW_INDIRECT_BUFFER_BINDING binding point
BUG=angleproject:1595
TEST=dEQP-GLES31.functional.state_query.integer.draw_indirect_buffer_binding*
Change-Id: Ib8f712fdf10411ef0b7b63742d17c3caca99137b
Reviewed-on: https://chromium-review.googlesource.com/416193
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index a57cc4a..9bc670f 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -228,6 +228,7 @@
}
mArrayBuffer.set(NULL);
+ mDrawIndirectBuffer.set(NULL);
mRenderbuffer.set(NULL);
if (mProgram)
@@ -1125,6 +1126,12 @@
return mArrayBuffer.id();
}
+void State::setDrawIndirectBufferBinding(Buffer *buffer)
+{
+ mDrawIndirectBuffer.set(buffer);
+ mDirtyBits.set(DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING);
+}
+
void State::setGenericUniformBufferBinding(Buffer *buffer)
{
mGenericUniformBuffer.set(buffer);
@@ -1182,17 +1189,16 @@
UNIMPLEMENTED();
return nullptr;
case GL_DRAW_INDIRECT_BUFFER:
- UNIMPLEMENTED();
- return nullptr;
+ return mDrawIndirectBuffer.get();
default: UNREACHABLE(); return NULL;
}
}
void State::detachBuffer(GLuint bufferName)
{
- BindingPointer<Buffer> *buffers[] = {&mArrayBuffer, &mCopyReadBuffer,
- &mCopyWriteBuffer, &mPack.pixelBuffer,
- &mUnpack.pixelBuffer, &mGenericUniformBuffer};
+ BindingPointer<Buffer> *buffers[] = {
+ &mArrayBuffer, &mCopyReadBuffer, &mCopyWriteBuffer, &mDrawIndirectBuffer,
+ &mPack.pixelBuffer, &mUnpack.pixelBuffer, &mGenericUniformBuffer};
for (auto buffer : buffers)
{
if (buffer->id() == bufferName)
@@ -1611,6 +1617,9 @@
switch (pname)
{
case GL_ARRAY_BUFFER_BINDING: *params = mArrayBuffer.id(); break;
+ case GL_DRAW_INDIRECT_BUFFER_BINDING:
+ *params = mDrawIndirectBuffer.id();
+ break;
case GL_ELEMENT_ARRAY_BUFFER_BINDING: *params = getVertexArray()->getElementArrayBuffer().id(); break;
//case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE
case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mDrawFramebuffer->id(); break;