Commit 9d7d0b14 by Jiajia Qin Committed by Commit Bot

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/416193Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent 47c48080
......@@ -325,6 +325,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
bindVertexArray(0);
bindArrayBuffer(0);
bindDrawIndirectBuffer(0);
bindElementArrayBuffer(0);
bindRenderbuffer(GL_RENDERBUFFER, 0);
......@@ -959,6 +960,12 @@ void Context::bindArrayBuffer(GLuint bufferHandle)
mGLState.setArrayBufferBinding(buffer);
}
void Context::bindDrawIndirectBuffer(GLuint bufferHandle)
{
Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setDrawIndirectBufferBinding(buffer);
}
void Context::bindElementArrayBuffer(GLuint bufferHandle)
{
Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
......@@ -3644,11 +3651,7 @@ void Context::bindBuffer(GLenum target, GLuint buffer)
}
break;
case GL_DRAW_INDIRECT_BUFFER:
if (buffer != 0)
{
// Binding buffers to this binding point is not implemented yet.
UNIMPLEMENTED();
}
bindDrawIndirectBuffer(buffer);
break;
case GL_DISPATCH_INDIRECT_BUFFER:
if (buffer != 0)
......
......@@ -143,6 +143,7 @@ class Context final : public ValidationContext
void bindPixelUnpackBuffer(GLuint bufferHandle);
void useProgram(GLuint program);
void bindTransformFeedback(GLuint transformFeedbackHandle);
void bindDrawIndirectBuffer(GLuint bufferHandle);
Error beginQuery(GLenum target, GLuint query);
Error endQuery(GLenum target);
......
......@@ -494,6 +494,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
switch (pname)
{
case GL_DRAW_INDIRECT_BUFFER_BINDING:
case GL_MAX_FRAMEBUFFER_WIDTH:
case GL_MAX_FRAMEBUFFER_HEIGHT:
case GL_MAX_FRAMEBUFFER_SAMPLES:
......
......@@ -228,6 +228,7 @@ void State::reset()
}
mArrayBuffer.set(NULL);
mDrawIndirectBuffer.set(NULL);
mRenderbuffer.set(NULL);
if (mProgram)
......@@ -1125,6 +1126,12 @@ GLuint State::getArrayBufferId() const
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 @@ Buffer *State::getTargetBuffer(GLenum target) const
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 @@ void State::getIntegerv(const ContextState &data, GLenum pname, GLint *params)
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;
......
......@@ -215,6 +215,9 @@ class State : angle::NonCopyable
void setArrayBufferBinding(Buffer *buffer);
GLuint getArrayBufferId() const;
void setDrawIndirectBufferBinding(Buffer *buffer);
Buffer *getDrawIndirectBuffer() const { return mDrawIndirectBuffer.get(); }
// GL_UNIFORM_BUFFER - Both indexed and generic targets
void setGenericUniformBufferBinding(Buffer *buffer);
void setIndexedUniformBufferBinding(GLuint index, Buffer *buffer, GLintptr offset, GLsizeiptr size);
......@@ -361,6 +364,7 @@ class State : angle::NonCopyable
DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING,
DIRTY_BIT_RENDERBUFFER_BINDING,
DIRTY_BIT_VERTEX_ARRAY_BINDING,
DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING,
DIRTY_BIT_PROGRAM_BINDING,
DIRTY_BIT_MULTISAMPLING,
DIRTY_BIT_SAMPLE_ALPHA_TO_ONE,
......@@ -435,6 +439,7 @@ class State : angle::NonCopyable
float mFarZ;
BindingPointer<Buffer> mArrayBuffer;
BindingPointer<Buffer> mDrawIndirectBuffer;
Framebuffer *mReadFramebuffer;
Framebuffer *mDrawFramebuffer;
BindingPointer<Renderbuffer> mRenderbuffer;
......
......@@ -1574,6 +1574,9 @@ void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBit
case gl::State::DIRTY_BIT_VERTEX_ARRAY_BINDING:
// TODO(jmadill): implement this
break;
case gl::State::DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING:
// TODO: implement this
break;
case gl::State::DIRTY_BIT_PROGRAM_BINDING:
// TODO(jmadill): implement this
break;
......
......@@ -1158,7 +1158,6 @@
1442 OPENGL D3D11 : dEQP-GLES31.functional.texture.gather.* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.boolean.sample_mask_* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.integer.texture_binding_2d_multisample_* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.integer.draw_indirect_buffer_binding_* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.integer.atomic_counter_buffer_binding_* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.integer.shader_storage_buffer_binding_* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.integer.dispatch_indirect_buffer_binding_* = FAIL
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment