summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2012-07-26 15:10:04 -0700
committerIan Romanick <[email protected]>2012-08-29 15:09:36 -0700
commitbb4a39ec951a696efa07a120c9446b677703abab (patch)
tree793d16ecf01a6f2caab64c6c067e3dc1203948b4
parent1b86a91c643fdd4c3de1a2f5e84f94e812105766 (diff)
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 <[email protected]> Signed-off-by: Ian Romanick <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/main/get.c16
-rw-r--r--src/mesa/main/teximage.c12
2 files changed, 18 insertions, 10 deletions
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 3f7d223a79f..cd2f683114f 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_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,
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 59b38dee4aa..94a8bb795fc 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -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;
}