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, ...@@ -325,6 +325,7 @@ Context::Context(rx::EGLImplFactory *implFactory,
bindVertexArray(0); bindVertexArray(0);
bindArrayBuffer(0); bindArrayBuffer(0);
bindDrawIndirectBuffer(0);
bindElementArrayBuffer(0); bindElementArrayBuffer(0);
bindRenderbuffer(GL_RENDERBUFFER, 0); bindRenderbuffer(GL_RENDERBUFFER, 0);
...@@ -959,6 +960,12 @@ void Context::bindArrayBuffer(GLuint bufferHandle) ...@@ -959,6 +960,12 @@ void Context::bindArrayBuffer(GLuint bufferHandle)
mGLState.setArrayBufferBinding(buffer); mGLState.setArrayBufferBinding(buffer);
} }
void Context::bindDrawIndirectBuffer(GLuint bufferHandle)
{
Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
mGLState.setDrawIndirectBufferBinding(buffer);
}
void Context::bindElementArrayBuffer(GLuint bufferHandle) void Context::bindElementArrayBuffer(GLuint bufferHandle)
{ {
Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle); Buffer *buffer = mResourceManager->checkBufferAllocation(mImplementation.get(), bufferHandle);
...@@ -3644,11 +3651,7 @@ void Context::bindBuffer(GLenum target, GLuint buffer) ...@@ -3644,11 +3651,7 @@ void Context::bindBuffer(GLenum target, GLuint buffer)
} }
break; break;
case GL_DRAW_INDIRECT_BUFFER: case GL_DRAW_INDIRECT_BUFFER:
if (buffer != 0) bindDrawIndirectBuffer(buffer);
{
// Binding buffers to this binding point is not implemented yet.
UNIMPLEMENTED();
}
break; break;
case GL_DISPATCH_INDIRECT_BUFFER: case GL_DISPATCH_INDIRECT_BUFFER:
if (buffer != 0) if (buffer != 0)
......
...@@ -143,6 +143,7 @@ class Context final : public ValidationContext ...@@ -143,6 +143,7 @@ class Context final : public ValidationContext
void bindPixelUnpackBuffer(GLuint bufferHandle); void bindPixelUnpackBuffer(GLuint bufferHandle);
void useProgram(GLuint program); void useProgram(GLuint program);
void bindTransformFeedback(GLuint transformFeedbackHandle); void bindTransformFeedback(GLuint transformFeedbackHandle);
void bindDrawIndirectBuffer(GLuint bufferHandle);
Error beginQuery(GLenum target, GLuint query); Error beginQuery(GLenum target, GLuint query);
Error endQuery(GLenum target); Error endQuery(GLenum target);
......
...@@ -494,6 +494,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign ...@@ -494,6 +494,7 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
switch (pname) switch (pname)
{ {
case GL_DRAW_INDIRECT_BUFFER_BINDING:
case GL_MAX_FRAMEBUFFER_WIDTH: case GL_MAX_FRAMEBUFFER_WIDTH:
case GL_MAX_FRAMEBUFFER_HEIGHT: case GL_MAX_FRAMEBUFFER_HEIGHT:
case GL_MAX_FRAMEBUFFER_SAMPLES: case GL_MAX_FRAMEBUFFER_SAMPLES:
......
...@@ -228,6 +228,7 @@ void State::reset() ...@@ -228,6 +228,7 @@ void State::reset()
} }
mArrayBuffer.set(NULL); mArrayBuffer.set(NULL);
mDrawIndirectBuffer.set(NULL);
mRenderbuffer.set(NULL); mRenderbuffer.set(NULL);
if (mProgram) if (mProgram)
...@@ -1125,6 +1126,12 @@ GLuint State::getArrayBufferId() const ...@@ -1125,6 +1126,12 @@ GLuint State::getArrayBufferId() const
return mArrayBuffer.id(); return mArrayBuffer.id();
} }
void State::setDrawIndirectBufferBinding(Buffer *buffer)
{
mDrawIndirectBuffer.set(buffer);
mDirtyBits.set(DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING);
}
void State::setGenericUniformBufferBinding(Buffer *buffer) void State::setGenericUniformBufferBinding(Buffer *buffer)
{ {
mGenericUniformBuffer.set(buffer); mGenericUniformBuffer.set(buffer);
...@@ -1182,17 +1189,16 @@ Buffer *State::getTargetBuffer(GLenum target) const ...@@ -1182,17 +1189,16 @@ Buffer *State::getTargetBuffer(GLenum target) const
UNIMPLEMENTED(); UNIMPLEMENTED();
return nullptr; return nullptr;
case GL_DRAW_INDIRECT_BUFFER: case GL_DRAW_INDIRECT_BUFFER:
UNIMPLEMENTED(); return mDrawIndirectBuffer.get();
return nullptr;
default: UNREACHABLE(); return NULL; default: UNREACHABLE(); return NULL;
} }
} }
void State::detachBuffer(GLuint bufferName) void State::detachBuffer(GLuint bufferName)
{ {
BindingPointer<Buffer> *buffers[] = {&mArrayBuffer, &mCopyReadBuffer, BindingPointer<Buffer> *buffers[] = {
&mCopyWriteBuffer, &mPack.pixelBuffer, &mArrayBuffer, &mCopyReadBuffer, &mCopyWriteBuffer, &mDrawIndirectBuffer,
&mUnpack.pixelBuffer, &mGenericUniformBuffer}; &mPack.pixelBuffer, &mUnpack.pixelBuffer, &mGenericUniformBuffer};
for (auto buffer : buffers) for (auto buffer : buffers)
{ {
if (buffer->id() == bufferName) if (buffer->id() == bufferName)
...@@ -1611,6 +1617,9 @@ void State::getIntegerv(const ContextState &data, GLenum pname, GLint *params) ...@@ -1611,6 +1617,9 @@ void State::getIntegerv(const ContextState &data, GLenum pname, GLint *params)
switch (pname) switch (pname)
{ {
case GL_ARRAY_BUFFER_BINDING: *params = mArrayBuffer.id(); break; 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_ELEMENT_ARRAY_BUFFER_BINDING: *params = getVertexArray()->getElementArrayBuffer().id(); break;
//case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE //case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE
case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mDrawFramebuffer->id(); break; case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mDrawFramebuffer->id(); break;
......
...@@ -215,6 +215,9 @@ class State : angle::NonCopyable ...@@ -215,6 +215,9 @@ class State : angle::NonCopyable
void setArrayBufferBinding(Buffer *buffer); void setArrayBufferBinding(Buffer *buffer);
GLuint getArrayBufferId() const; GLuint getArrayBufferId() const;
void setDrawIndirectBufferBinding(Buffer *buffer);
Buffer *getDrawIndirectBuffer() const { return mDrawIndirectBuffer.get(); }
// GL_UNIFORM_BUFFER - Both indexed and generic targets // GL_UNIFORM_BUFFER - Both indexed and generic targets
void setGenericUniformBufferBinding(Buffer *buffer); void setGenericUniformBufferBinding(Buffer *buffer);
void setIndexedUniformBufferBinding(GLuint index, Buffer *buffer, GLintptr offset, GLsizeiptr size); void setIndexedUniformBufferBinding(GLuint index, Buffer *buffer, GLintptr offset, GLsizeiptr size);
...@@ -361,6 +364,7 @@ class State : angle::NonCopyable ...@@ -361,6 +364,7 @@ class State : angle::NonCopyable
DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING, DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING,
DIRTY_BIT_RENDERBUFFER_BINDING, DIRTY_BIT_RENDERBUFFER_BINDING,
DIRTY_BIT_VERTEX_ARRAY_BINDING, DIRTY_BIT_VERTEX_ARRAY_BINDING,
DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING,
DIRTY_BIT_PROGRAM_BINDING, DIRTY_BIT_PROGRAM_BINDING,
DIRTY_BIT_MULTISAMPLING, DIRTY_BIT_MULTISAMPLING,
DIRTY_BIT_SAMPLE_ALPHA_TO_ONE, DIRTY_BIT_SAMPLE_ALPHA_TO_ONE,
...@@ -435,6 +439,7 @@ class State : angle::NonCopyable ...@@ -435,6 +439,7 @@ class State : angle::NonCopyable
float mFarZ; float mFarZ;
BindingPointer<Buffer> mArrayBuffer; BindingPointer<Buffer> mArrayBuffer;
BindingPointer<Buffer> mDrawIndirectBuffer;
Framebuffer *mReadFramebuffer; Framebuffer *mReadFramebuffer;
Framebuffer *mDrawFramebuffer; Framebuffer *mDrawFramebuffer;
BindingPointer<Renderbuffer> mRenderbuffer; BindingPointer<Renderbuffer> mRenderbuffer;
......
...@@ -1574,6 +1574,9 @@ void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBit ...@@ -1574,6 +1574,9 @@ void StateManagerGL::syncState(const gl::State &state, const gl::State::DirtyBit
case gl::State::DIRTY_BIT_VERTEX_ARRAY_BINDING: case gl::State::DIRTY_BIT_VERTEX_ARRAY_BINDING:
// TODO(jmadill): implement this // TODO(jmadill): implement this
break; break;
case gl::State::DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING:
// TODO: implement this
break;
case gl::State::DIRTY_BIT_PROGRAM_BINDING: case gl::State::DIRTY_BIT_PROGRAM_BINDING:
// TODO(jmadill): implement this // TODO(jmadill): implement this
break; break;
......
...@@ -1158,7 +1158,6 @@ ...@@ -1158,7 +1158,6 @@
1442 OPENGL D3D11 : dEQP-GLES31.functional.texture.gather.* = FAIL 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.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.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.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.shader_storage_buffer_binding_* = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.state_query.integer.dispatch_indirect_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