From afa902a705b9de70902b6559a383a35f38152555 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 8 Dec 2012 22:53:23 +0100 Subject: [PATCH] mesa: don't advertise ARB_texture_buffer_object in legacy contexts Reviewed-by: Ian Romanick --- src/mesa/drivers/dri/intel/intel_extensions.c | 5 +---- src/mesa/main/bufferobj.c | 4 ++-- src/mesa/main/extensions.c | 2 +- src/mesa/main/get.c | 9 ++++++++- src/mesa/main/teximage.c | 15 +++++++-------- src/mesa/main/texobj.c | 6 +++--- src/mesa/main/texparam.c | 2 +- 7 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c index df886a5cdfd..7b2b595b9a4 100755 --- a/src/mesa/drivers/dri/intel/intel_extensions.c +++ b/src/mesa/drivers/dri/intel/intel_extensions.c @@ -102,10 +102,7 @@ intelInitExtensions(struct gl_context *ctx) ctx->Extensions.ARB_blend_func_extended = !driQueryOptionb(&intel->optionCache, "disable_blend_func_extended"); ctx->Extensions.ARB_draw_buffers_blend = true; ctx->Extensions.ARB_uniform_buffer_object = true; - - if (ctx->API == API_OPENGL_CORE) { - ctx->Extensions.ARB_texture_buffer_object = true; - } + ctx->Extensions.ARB_texture_buffer_object = true; } if (intel->gen >= 5) diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 6733644b612..4a844308b05 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -93,8 +93,8 @@ get_buffer_target(struct gl_context *ctx, GLenum target) } break; case GL_TEXTURE_BUFFER: - if (_mesa_is_desktop_gl(ctx) - && ctx->Extensions.ARB_texture_buffer_object) { + if (ctx->API == API_OPENGL_CORE && + ctx->Extensions.ARB_texture_buffer_object) { return &ctx->Texture.BufferObject; } break; diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 11cbea2b40e..e86e4360022 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -126,7 +126,7 @@ static const struct extension extension_table[] = { { "GL_ARB_shadow", o(ARB_shadow), GLL, 2001 }, { "GL_ARB_sync", o(ARB_sync), GL, 2003 }, { "GL_ARB_texture_border_clamp", o(ARB_texture_border_clamp), GLL, 2000 }, - { "GL_ARB_texture_buffer_object", o(ARB_texture_buffer_object), GL, 2008 }, + { "GL_ARB_texture_buffer_object", o(ARB_texture_buffer_object), GLC, 2008 }, { "GL_ARB_texture_compression", o(dummy_true), GLL, 2000 }, { "GL_ARB_texture_compression_rgtc", o(ARB_texture_compression_rgtc), GL, 2004 }, { "GL_ARB_texture_cube_map", o(ARB_texture_cube_map), GLL, 1999 }, diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 97dccd0edc1..f3dbda2d3d2 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -129,6 +129,7 @@ enum value_extra { EXTRA_VERSION_31, EXTRA_VERSION_32, EXTRA_API_GL, + EXTRA_API_GL_CORE, EXTRA_API_ES2, EXTRA_NEW_BUFFERS, EXTRA_NEW_FRAG_CLAMP, @@ -283,6 +284,7 @@ static const int extra_GLSL_130[] = { }; static const int extra_texture_buffer_object[] = { + EXTRA_API_GL_CORE, EXTRA_VERSION_31, EXT(ARB_texture_buffer_object), EXTRA_END @@ -329,7 +331,6 @@ EXTRA_EXT2(ARB_vertex_program, ARB_fragment_program); EXTRA_EXT(ARB_geometry_shader4); EXTRA_EXT(ARB_color_buffer_float); EXTRA_EXT(EXT_framebuffer_sRGB); -EXTRA_EXT(ARB_texture_buffer_object); EXTRA_EXT(OES_EGL_image_external); EXTRA_EXT(ARB_blend_func_extended); EXTRA_EXT(ARB_uniform_buffer_object); @@ -879,6 +880,12 @@ check_extra(struct gl_context *ctx, const char *func, const struct value_desc *d enabled++; } break; + case EXTRA_API_GL_CORE: + if (ctx->API == API_OPENGL_CORE) { + total++; + enabled++; + } + break; case EXTRA_NEW_BUFFERS: if (ctx->NewState & _NEW_BUFFERS) _mesa_update_state(ctx); diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 83b7e1488ec..47c4ed23590 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -791,9 +791,9 @@ _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 _mesa_is_desktop_gl(ctx) - && ctx->Extensions.ARB_texture_buffer_object - ? texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL; + return ctx->API == API_OPENGL_CORE && + ctx->Extensions.ARB_texture_buffer_object ? + texUnit->CurrentTex[TEXTURE_BUFFER_INDEX] : NULL; case GL_TEXTURE_EXTERNAL_OES: return ctx->Extensions.OES_EGL_image_external ? texUnit->CurrentTex[TEXTURE_EXTERNAL_INDEX] : NULL; @@ -994,9 +994,8 @@ _mesa_max_texture_levels(struct gl_context *ctx, GLenum target) return ctx->Extensions.ARB_texture_cube_map_array ? ctx->Const.MaxCubeTextureLevels : 0; case GL_TEXTURE_BUFFER: - return _mesa_is_desktop_gl(ctx) - && ctx->Extensions.ARB_texture_buffer_object - ? 1 : 0; + return ctx->API == API_OPENGL_CORE && + ctx->Extensions.ARB_texture_buffer_object ? 1 : 0; case GL_TEXTURE_EXTERNAL_OES: /* fall-through */ default: @@ -3895,8 +3894,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 - && _mesa_is_desktop_gl(ctx))) { + if (!(ctx->API == API_OPENGL_CORE && + ctx->Extensions.ARB_texture_buffer_object)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glTexBuffer"); return; } diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index d650c75e4e7..cb7ac19a804 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1148,9 +1148,9 @@ target_enum_to_index(struct gl_context *ctx, GLenum target) || _mesa_is_gles3(ctx) ? TEXTURE_2D_ARRAY_INDEX : -1; case GL_TEXTURE_BUFFER_ARB: - return _mesa_is_desktop_gl(ctx) - && ctx->Extensions.ARB_texture_buffer_object - ? TEXTURE_BUFFER_INDEX : -1; + return ctx->API == API_OPENGL_CORE && + ctx->Extensions.ARB_texture_buffer_object ? + TEXTURE_BUFFER_INDEX : -1; case GL_TEXTURE_EXTERNAL_OES: return _mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external ? TEXTURE_EXTERNAL_INDEX : -1; diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index c2d161f9a9d..ca5a21f788b 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -976,7 +976,7 @@ legal_get_tex_level_parameter_target(struct gl_context *ctx, GLenum target) * From the OpenGL 3.1 spec: * "target may also be TEXTURE_BUFFER, indicating the texture buffer." */ - return _mesa_is_desktop_gl(ctx) && ctx->Version >= 31; + return ctx->API == API_OPENGL_CORE && ctx->Version >= 31; default: return GL_FALSE; } -- 2.30.2