[Mesa-dev] [PATCH V2 04/15] mesa: Add binding point for indirect buffer
Eric Anholt
eric at anholt.net
Thu Nov 7 09:33:07 PST 2013
Brian Paul <brianp at 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 <chrisf at 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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131107/0e814629/attachment.pgp>
More information about the mesa-dev
mailing list