[Mesa-dev] [PATCH 12/19] mesa: Refactor set_ubo_binding()
Ian Romanick
idr at freedesktop.org
Mon Apr 28 14:06:06 PDT 2014
On 04/21/2014 02:57 PM, Fredrik Höglund wrote:
> Make set_ubo_binding() just update the binding, and move the code
> that does validation, flushes the vertices etc. into a new
> bind_uniform_buffer() function.
> ---
>
> v2: Document the difference between set_ubo_binding() and
> bind_uniform_buffer().
>
> src/mesa/main/bufferobj.c | 63 +++++++++++++++++++++++++++++++++--------------
> 1 file changed, 44 insertions(+), 19 deletions(-)
>
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 9a59a5a..856b246 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -2612,17 +2612,45 @@ _mesa_GetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname,
> }
> }
>
> +/**
> + * Binds a buffer object to a uniform buffer binding point.
> + *
> + * The caller is responsible for flushing vertices and updating
> + * NewDriverState.
> + */
> static void
> set_ubo_binding(struct gl_context *ctx,
> - int index,
> - struct gl_buffer_object *bufObj,
> - GLintptr offset,
> - GLsizeiptr size,
> - GLboolean autoSize)
> + struct gl_uniform_buffer_binding *binding,
> + struct gl_buffer_object *bufObj,
> + GLintptr offset,
> + GLsizeiptr size,
> + GLboolean autoSize)
Either in this patch or in a follow-up patch, I think autoSize (and
gl_uniform_buffer_binding::AutomaticSize) should be bool. It's not
directly visible to the API.
> +{
> + _mesa_reference_buffer_object(ctx, &binding->BufferObject, bufObj);
> +
> + binding->Offset = offset;
> + binding->Size = size;
> + binding->AutomaticSize = autoSize;
> +}
> +
> +/**
> + * Binds a buffer object to a uniform buffer binding point.
> + *
> + * Unlike set_ubo_binding(), this function also flushes vertices
> + * and updates NewDriverState. It also checks if the binding
> + * has actually changed before updating it.
> + */
> +static void
> +bind_uniform_buffer(struct gl_context *ctx,
> + GLuint index,
> + struct gl_buffer_object *bufObj,
> + GLintptr offset,
> + GLsizeiptr size,
> + GLboolean autoSize)
> {
> - struct gl_uniform_buffer_binding *binding;
> + struct gl_uniform_buffer_binding *binding =
> + &ctx->UniformBufferBindings[index];
>
> - binding = &ctx->UniformBufferBindings[index];
> if (binding->BufferObject == bufObj &&
> binding->Offset == offset &&
> binding->Size == size &&
> @@ -2633,10 +2661,7 @@ set_ubo_binding(struct gl_context *ctx,
> FLUSH_VERTICES(ctx, 0);
> ctx->NewDriverState |= ctx->DriverFlags.NewUniformBuffer;
>
> - _mesa_reference_buffer_object(ctx, &binding->BufferObject, bufObj);
> - binding->Offset = offset;
> - binding->Size = size;
> - binding->AutomaticSize = autoSize;
> + set_ubo_binding(ctx, binding, bufObj, offset, size, autoSize);
> }
>
> /**
> @@ -2665,13 +2690,12 @@ bind_buffer_range_uniform_buffer(struct gl_context *ctx,
> return;
> }
>
> - if (bufObj == ctx->Shared->NullBufferObj) {
> - offset = -1;
> - size = -1;
> - }
> -
> _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, bufObj);
> - set_ubo_binding(ctx, index, bufObj, offset, size, GL_FALSE);
> +
> + if (bufObj == ctx->Shared->NullBufferObj)
> + bind_uniform_buffer(ctx, index, bufObj, -1, -1, GL_TRUE);
> + else
> + bind_uniform_buffer(ctx, index, bufObj, offset, size, GL_FALSE);
This is a change. Why is autoSize sometimes true?
> }
>
>
> @@ -2690,10 +2714,11 @@ bind_buffer_base_uniform_buffer(struct gl_context *ctx,
> }
>
> _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, bufObj);
> +
> if (bufObj == ctx->Shared->NullBufferObj)
> - set_ubo_binding(ctx, index, bufObj, -1, -1, GL_TRUE);
> + bind_uniform_buffer(ctx, index, bufObj, -1, -1, GL_TRUE);
> else
> - set_ubo_binding(ctx, index, bufObj, 0, 0, GL_TRUE);
> + bind_uniform_buffer(ctx, index, bufObj, 0, 0, GL_TRUE);
> }
>
> /**
>
More information about the mesa-dev
mailing list