mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
mesa: Add binding point for indirect buffer
Based on part of Patch 2 of Christoph Bumiller's ARB_draw_indirect series. Signed-off-by: Chris Forbes <chrisf@ijw.co.nz> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
56e98fe2fe
commit
a95236cfc1
4 changed files with 22 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
@ -875,6 +884,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 );
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -747,6 +747,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" ],
|
||||
]}
|
||||
|
||||
]
|
||||
|
|
|
|||
|
|
@ -3903,6 +3903,8 @@ struct gl_context
|
|||
|
||||
struct gl_perf_monitor_state PerfMonitor;
|
||||
|
||||
struct gl_buffer_object *DrawIndirectBuffer; /** < GL_ARB_draw_indirect */
|
||||
|
||||
struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */
|
||||
struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue