Brian Paul <bri...@vmware.com> writes: > On 11/07/2013 12:06 AM, Chris Forbes wrote: >> Based on part of Patch 2 of Christoph Bumiller's ARB_draw_indirect series. >> >> Signed-off-by: Chris Forbes <chr...@ijw.co.nz> >> --- >> src/mesa/main/bufferobj.c | 14 ++++++++++++++ >> src/mesa/main/get.c | 4 ++++ >> src/mesa/main/get_hash_params.py | 2 ++ >> src/mesa/main/mtypes.h | 2 ++ >> 4 files changed, 22 insertions(+) >> >> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c >> index 1f55061..a75802e 100644 >> --- a/src/mesa/main/bufferobj.c >> +++ b/src/mesa/main/bufferobj.c >> @@ -86,6 +86,12 @@ get_buffer_target(struct gl_context *ctx, GLenum target) >> return &ctx->CopyReadBuffer; >> case GL_COPY_WRITE_BUFFER: >> return &ctx->CopyWriteBuffer; >> + case GL_DRAW_INDIRECT_BUFFER: >> + if (ctx->API == API_OPENGL_CORE && >> + ctx->Extensions.ARB_draw_indirect) { >> + return &ctx->DrawIndirectBuffer; >> + } >> + break; >> case GL_TRANSFORM_FEEDBACK_BUFFER: >> if (ctx->Extensions.EXT_transform_feedback) { >> return &ctx->TransformFeedback.CurrentBuffer; >> @@ -626,6 +632,9 @@ _mesa_init_buffer_objects( struct gl_context *ctx ) >> _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, >> ctx->Shared->NullBufferObj); >> >> + _mesa_reference_buffer_object(ctx, &ctx->DrawIndirectBuffer, >> + ctx->Shared->NullBufferObj); >> + >> for (i = 0; i < MAX_COMBINED_UNIFORM_BUFFERS; i++) { >> _mesa_reference_buffer_object(ctx, >> &ctx->UniformBufferBindings[i].BufferObject, >> @@ -873,6 +882,11 @@ _mesa_DeleteBuffers(GLsizei n, const GLuint *ids) >> _mesa_BindBuffer( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); >> } >> >> + /* unbind ARB_draw_indirect binding point */ >> + if (ctx->DrawIndirectBuffer == bufObj) { >> + _mesa_BindBuffer( GL_DRAW_INDIRECT_BUFFER, 0 ); >> + } >> + >> /* unbind ARB_copy_buffer binding points */ >> if (ctx->CopyReadBuffer == bufObj) { >> _mesa_BindBuffer( GL_COPY_READ_BUFFER, 0 ); >> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c >> index ad53b25..a471383 100644 >> --- a/src/mesa/main/get.c >> +++ b/src/mesa/main/get.c >> @@ -914,6 +914,10 @@ find_custom_value(struct gl_context *ctx, const struct >> value_desc *d, union valu >> case GL_ATOMIC_COUNTER_BUFFER_BINDING: >> v->value_int = ctx->AtomicBuffer->Name; >> break; >> + /* GL_ARB_draw_indirect */ >> + case GL_DRAW_INDIRECT_BUFFER_BINDING: >> + v->value_int = ctx->DrawIndirectBuffer->Name; >> + break; >> } >> } >> >> diff --git a/src/mesa/main/get_hash_params.py >> b/src/mesa/main/get_hash_params.py >> index 0851b7b..226ede0 100644 >> --- a/src/mesa/main/get_hash_params.py >> +++ b/src/mesa/main/get_hash_params.py >> @@ -743,6 +743,8 @@ descriptor=[ >> { "apis": ["GL_CORE"], "params": [ >> # GL_ARB_texture_buffer_range >> [ "TEXTURE_BUFFER_OFFSET_ALIGNMENT", >> "CONTEXT_INT(Const.TextureBufferOffsetAlignment), >> extra_ARB_texture_buffer_range" ], >> +# GL_ARB_draw_indirect >> + [ "DRAW_INDIRECT_BUFFER_BINDING", "LOC_CUSTOM, TYPE_INT, 0, >> extra_ARB_draw_indirect" ], > > Does this really need a LOC_CUSTOM? Could we just do: > > [ "DRAW_INDIRECT_BUFFER_BINDING", > "CONTEXT_INT(DrawIndirectBuffer->name), extra_ARB_draw_indirect" ], > > and remove the switch case above?
get.c is all about things at offsets from the start of the context (or a couple of other structs), and things that aren't described that way need custom code.
pgpl1oEpawyZy.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev