On 08/24/2012 01:19 PM, Eric Anholt wrote:
Ian Romanick <[email protected]> writes:

From: Eric Anholt <[email protected]>

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.

 From the v3 comment, it sounds like you intend that i965 should not set
GL_ARB_texture_buffer_object, since it can't do TBO in non-core.  That
was what my v2 did, but...

The idea is that a driver will set the ctx->Extensions.ARB_texture_buffer_object flag in any context where it can support that functionality. For i965, this is when the user asked for either a 3.0 forward compatible context, a 3.1 context, or a 3.2+ core profile context. Inside Mesa, all of these get API_OPENGL_CORE. Other drivers could, hypothetically do other things.

The patch "i965: Advertise GLSL 1.40 and TexBOs in core contexts" does exactly this:

@@ -106,6 +110,10 @@ 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;
+      }
    }

    if (intel->gen >= 5)

Other than the hunk just below, I think we're okay?

+static const int extra_texture_buffer_object[] = {
+   EXTRA_VERSION_31,
+   EXT(ARB_texture_buffer_object),
+   EXTRA_END
+};

Here, it's still changing from logic that is "support if ARB_tbo" to
"support if ARB_tbo or GL 3.1", good.

So, this is actually the bug. :)

diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 8ec48eb..2595717 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;

but here we're changing from "support if ARB_tbo" to "support if ARB_tbo
and desktop".  So, i965, not exposing ARB_tbo, would fail to work in a
3.1 core context.  Similarly for the rest of the file.
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to