On 12/10/2012 12:32 PM, Marek Olšák wrote:
On Mon, Dec 10, 2012 at 5:25 PM, Brian Paul<bri...@vmware.com>  wrote:
On 12/08/2012 03:02 PM, Marek Olšák wrote:

---
   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 df886a5..7b2b595 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 6733644..4a84430 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 11cbea2..e86e436 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 97dccd0..f3dbda2 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 83b7e14..47c4ed2 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 d650c75..cb7ac19 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 c2d161f..ca5a21f 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;
      }



I guess I don't quite get this.  Why not just make sure
ctx->Extensions.ARB_texture_buffer_object is off when ctx->API is not
API_OPENGL_CORE?

AFAICT, ARB_texture_buffer_object was only getting turned on by the intel
driver when we were creating a core context anyway.

There are other examples of this sort of thing where we're checking "if
extension is enabled AND API=something" where it seems to me that we should
only enable the extension depending on the API.

The idea is that drivers only expose the features they implement and
core Mesa determines which of them should be exposed to the user.
That's how it works between GL and GLES at least. I thought the core
profile should have been treated similarly, but what do I know.
Extensions have always been enabled based on the API - the APIs for
each extension are listed in extensions.c.

Ah right. I think I brought this up before-- in extensions.c the extension_table[] encodes which extensions are supported by which API. We could loop over the extensions and turn off the ones which aren't supported by a given API during context setup.

I think someone said there was some problem with that but I'd have to go dig through email to refresh my memory.


I think Intel added the API check into their driver because there were
hw-specific limitations not allowing them to expose TBOs for the
legacy context, and they didn't want to explicitly disallow some other
driver to implement GL3.1 with ARB_compatibility.

Anyway, it's possible I won't push this series at all. It depends on
how hard it would be to implement GL3.1 with ARB_compatibility.

OK.

-Brian
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to