mesa: Add support for the GL_UNIFORM_BUFFER general binding point.
Fixes piglit ARB_uniform_buffer_object/buffer-targets. Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
5426b1ade9
commit
c5c696e7fb
|
@ -92,6 +92,11 @@ get_buffer_target(struct gl_context *ctx, GLenum target)
|
||||||
return &ctx->Texture.BufferObject;
|
return &ctx->Texture.BufferObject;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GL_UNIFORM_BUFFER:
|
||||||
|
if (ctx->Extensions.ARB_uniform_buffer_object) {
|
||||||
|
return &ctx->UniformBuffer;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -840,6 +845,10 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->UniformBuffer == bufObj) {
|
||||||
|
_mesa_BindBufferARB( GL_UNIFORM_BUFFER, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/* unbind any pixel pack/unpack pointers bound to this buffer */
|
/* unbind any pixel pack/unpack pointers bound to this buffer */
|
||||||
if (ctx->Pack.BufferObj == bufObj) {
|
if (ctx->Pack.BufferObj == bufObj) {
|
||||||
_mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 );
|
_mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 );
|
||||||
|
|
|
@ -1351,6 +1351,8 @@ static const struct value_desc values[] = {
|
||||||
{ GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, CONTEXT_INT(Const.UniformBufferOffsetAlignment),
|
{ GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, CONTEXT_INT(Const.UniformBufferOffsetAlignment),
|
||||||
extra_ARB_uniform_buffer_object },
|
extra_ARB_uniform_buffer_object },
|
||||||
|
|
||||||
|
{ GL_UNIFORM_BUFFER_BINDING, LOC_CUSTOM, TYPE_INT, 0, extra_ARB_uniform_buffer_object },
|
||||||
|
|
||||||
#endif /* FEATURE_GL */
|
#endif /* FEATURE_GL */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1801,6 +1803,10 @@ find_custom_value(struct gl_context *ctx, const struct value_desc *d, union valu
|
||||||
v->value_int = samp ? samp->Name : 0;
|
v->value_int = samp ? samp->Name : 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
/* GL_ARB_uniform_buffer_object */
|
||||||
|
case GL_UNIFORM_BUFFER_BINDING:
|
||||||
|
v->value_int = ctx->UniformBuffer->Name;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3430,6 +3430,13 @@ struct gl_context
|
||||||
|
|
||||||
struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */
|
struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */
|
||||||
struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */
|
struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current GL_ARB_uniform_buffer_object binding referenced by
|
||||||
|
* GL_UNIFORM_BUFFER target for glBufferData, glMapBuffer, etc.
|
||||||
|
*/
|
||||||
|
struct gl_buffer_object *UniformBuffer;
|
||||||
|
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
struct gl_meta_state *Meta; /**< for "meta" operations */
|
struct gl_meta_state *Meta; /**< for "meta" operations */
|
||||||
|
|
Loading…
Reference in New Issue