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:
parent
1b86a91c64
commit
bb4a39ec95
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue