mesa: Expose texture buffer objects when the context is GL 3.1 core.

v2: Use API_OPENGL_CORE.

v3: Only require desktop GL.  If a driver can't support TexBOs in a non-core
context, it should not enable them.

Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Eric Anholt 2012-07-26 15:10:04 -07:00 committed by Ian Romanick
parent 1b86a91c64
commit bb4a39ec95
2 changed files with 18 additions and 10 deletions

View File

@ -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_uniform_buffer_object_and_geometry_shader[] = {
EXT(ARB_uniform_buffer_object),
EXT(ARB_geometry_shader4),
@ -1287,15 +1293,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,

View File

@ -754,7 +754,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 _mesa_is_desktop_gl(ctx)
&& ctx->Extensions.ARB_texture_buffer_object
? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL;
case GL_TEXTURE_EXTERNAL_OES:
return ctx->Extensions.OES_EGL_image_external
@ -947,9 +948,9 @@ _mesa_max_texture_levels(struct gl_context *ctx, GLenum target)
ctx->Extensions.EXT_texture_array)
? ctx->Const.MaxTextureLevels : 0;
case GL_TEXTURE_BUFFER:
return _mesa_is_desktop_gl(ctx) &&
(ctx->Extensions.ARB_texture_buffer_object ||
(ctx->Version >= 31)) ? 1 : 0;
return _mesa_is_desktop_gl(ctx)
&& ctx->Extensions.ARB_texture_buffer_object
? 1 : 0;
case GL_TEXTURE_EXTERNAL_OES:
/* fall-through */
default:
@ -3975,7 +3976,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
&& _mesa_is_desktop_gl(ctx))) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer");
return;
}