mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
mesa: Add indexed binding points for uniform buffer objects.
Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
c5c696e7fb
commit
5527c2d220
2 changed files with 51 additions and 0 deletions
|
|
@ -603,6 +603,8 @@ _mesa_copy_buffer_subdata(struct gl_context *ctx,
|
|||
void
|
||||
_mesa_init_buffer_objects( struct gl_context *ctx )
|
||||
{
|
||||
GLuint i;
|
||||
|
||||
memset(&DummyBufferObject, 0, sizeof(DummyBufferObject));
|
||||
_glthread_INIT_MUTEX(DummyBufferObject.Mutex);
|
||||
DummyBufferObject.RefCount = 1000*1000*1000; /* never delete */
|
||||
|
|
@ -614,16 +616,43 @@ _mesa_init_buffer_objects( struct gl_context *ctx )
|
|||
ctx->Shared->NullBufferObj);
|
||||
_mesa_reference_buffer_object(ctx, &ctx->CopyWriteBuffer,
|
||||
ctx->Shared->NullBufferObj);
|
||||
|
||||
ctx->UniformBufferBindings = calloc(ctx->Const.MaxUniformBufferBindings,
|
||||
sizeof(*ctx->UniformBufferBindings));
|
||||
|
||||
_mesa_reference_buffer_object(ctx, &ctx->UniformBuffer,
|
||||
ctx->Shared->NullBufferObj);
|
||||
|
||||
for (i = 0; i < ctx->Const.MaxUniformBufferBindings; i++) {
|
||||
_mesa_reference_buffer_object(ctx,
|
||||
&ctx->UniformBufferBindings[i].BufferObject,
|
||||
ctx->Shared->NullBufferObj);
|
||||
ctx->UniformBufferBindings[i].Offset = -1;
|
||||
ctx->UniformBufferBindings[i].Size = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_mesa_free_buffer_objects( struct gl_context *ctx )
|
||||
{
|
||||
GLuint i;
|
||||
|
||||
_mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj, NULL);
|
||||
|
||||
_mesa_reference_buffer_object(ctx, &ctx->CopyReadBuffer, NULL);
|
||||
_mesa_reference_buffer_object(ctx, &ctx->CopyWriteBuffer, NULL);
|
||||
|
||||
_mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, NULL);
|
||||
|
||||
for (i = 0; i < ctx->Const.MaxUniformBufferBindings; i++) {
|
||||
_mesa_reference_buffer_object(ctx,
|
||||
&ctx->UniformBufferBindings[i].BufferObject,
|
||||
NULL);
|
||||
}
|
||||
|
||||
free(ctx->UniformBufferBindings);
|
||||
ctx->UniformBufferBindings = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3295,6 +3295,20 @@ struct gl_driver_flags
|
|||
GLbitfield NewArray; /**< Vertex array state */
|
||||
};
|
||||
|
||||
struct gl_uniform_buffer_binding
|
||||
{
|
||||
struct gl_buffer_object *BufferObject;
|
||||
/** Start of uniform block data in the buffer */
|
||||
GLintptr Offset;
|
||||
/** Size of data allowed to be referenced from the buffer (in bytes) */
|
||||
GLsizeiptr Size;
|
||||
/**
|
||||
* glBindBufferBase() indicates that the Size should be ignored and only
|
||||
* limited by the current size of the BufferObject.
|
||||
*/
|
||||
GLboolean AutomaticSize;
|
||||
};
|
||||
|
||||
/**
|
||||
* Mesa rendering context.
|
||||
*
|
||||
|
|
@ -3437,6 +3451,14 @@ struct gl_context
|
|||
*/
|
||||
struct gl_buffer_object *UniformBuffer;
|
||||
|
||||
/**
|
||||
* Array of uniform buffers for GL_ARB_uniform_buffer_object and GL 3.1.
|
||||
* This is set up using glBindBufferRange() or glBindBufferBase(). They are
|
||||
* associated with uniform blocks by glUniformBlockBinding()'s state in the
|
||||
* shader program.
|
||||
*/
|
||||
struct gl_uniform_buffer_binding *UniformBufferBindings;
|
||||
|
||||
/*@}*/
|
||||
|
||||
struct gl_meta_state *Meta; /**< for "meta" operations */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue