[Mesa-dev] [PATCH 2/2] mesa: Expose texture buffer objects when the context is GL 3.1 core.
Kenneth Graunke
kenneth at whitecape.org
Tue Jul 31 16:16:01 PDT 2012
On 07/31/2012 03:24 PM, Eric Anholt wrote:
> ---
> src/mesa/main/bufferobj.c | 3 ++-
> src/mesa/main/get.c | 16 +++++++++++-----
> src/mesa/main/teximage.c | 6 ++++--
> 3 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
> index 5fdf52e..7216307 100644
> --- a/src/mesa/main/bufferobj.c
> +++ b/src/mesa/main/bufferobj.c
> @@ -89,7 +89,8 @@ get_buffer_target(struct gl_context *ctx, GLenum target)
> break;
> #endif
> case GL_TEXTURE_BUFFER:
> - if (ctx->Extensions.ARB_texture_buffer_object) {
> + if (ctx->Extensions.ARB_texture_buffer_object ||
> + (ctx->API == API_OPENGL && ctx->Version >= 31)) {
I think you want API_OPENGL_CORE here. API_OPENGL is
legacy/compatibility GL.
> return &ctx->Texture.BufferObject;
> }
> break;
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 7ffa3c1..a1e6879 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -284,6 +284,12 @@ static const int extra_GLSL_130[] = {
> EXTRA_END
> };
>
> +static const int extra_texture_buffer_object[] = {
> + EXTRA_VERSION_31,
> + EXT(ARB_texture_buffer_object),
> + EXTRA_END
> +};
> +
> static const int extra_ARB_sampler_objects[] = {
> EXT(ARB_sampler_objects),
> EXTRA_END
> @@ -1292,15 +1298,15 @@ static const struct value_desc values[] = {
>
> /* GL_ARB_texture_buffer_object */
> { GL_MAX_TEXTURE_BUFFER_SIZE_ARB, CONTEXT_INT(Const.MaxTextureBufferSize),
> - extra_ARB_texture_buffer_object },
> + extra_texture_buffer_object },
> { GL_TEXTURE_BINDING_BUFFER_ARB, LOC_CUSTOM, TYPE_INT, 0,
> - extra_ARB_texture_buffer_object },
> + extra_texture_buffer_object },
> { GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB, LOC_CUSTOM, TYPE_INT,
> - TEXTURE_BUFFER_INDEX, extra_ARB_texture_buffer_object },
> + TEXTURE_BUFFER_INDEX, extra_texture_buffer_object },
> { GL_TEXTURE_BUFFER_FORMAT_ARB, LOC_CUSTOM, TYPE_INT, 0,
> - extra_ARB_texture_buffer_object },
> + extra_texture_buffer_object },
> { GL_TEXTURE_BUFFER_ARB, LOC_CUSTOM, TYPE_INT, 0,
> - extra_ARB_texture_buffer_object },
> + extra_texture_buffer_object },
>
> /* GL_ARB_sampler_objects / GL 3.3 */
> { GL_SAMPLER_BINDING,
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index ef64a79..e70470d 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -774,7 +774,8 @@ _mesa_select_tex_object(struct gl_context *ctx,
> case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
> return arrayTex ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
> case GL_TEXTURE_BUFFER:
> - return ctx->Extensions.ARB_texture_buffer_object
> + return (ctx->Extensions.ARB_texture_buffer_object ||
> + (ctx->API == API_OPENGL && ctx->Version >= 31))
Ditto. You want API_OPENGL_CORE
> ? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;
> case GL_TEXTURE_EXTERNAL_OES:
> return ctx->Extensions.OES_EGL_image_external
> @@ -3881,7 +3882,8 @@ _mesa_TexBuffer(GLenum target, GLenum internalFormat, GLuint buffer)
> GET_CURRENT_CONTEXT(ctx);
> ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
>
> - if (!ctx->Extensions.ARB_texture_buffer_object) {
> + if (!(ctx->Extensions.ARB_texture_buffer_object ||
> + (ctx->API == API_OPENGL && ctx->Version >= 31))) {
And again.
> _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer");
> return;
> }
>
With those changes, you can add a:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
More information about the mesa-dev
mailing list