<p dir="ltr">Neil,<br>
I've been thinking about this same thing.  My one comment is that it might be good to call that function after the driver has installed its extensions.  That way you can make meta extensions dependant on driver extensions.  Not sure how useful that is though.<br>

--Jason Ekstrand</p>
<div class="gmail_quote">On Jun 13, 2014 5:59 PM, "Neil Roberts" <<a href="mailto:neil@linux.intel.com">neil@linux.intel.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This adds a function called _mesa_init_driver_extensions that is called by all<br>
DRI-based drivers. The intention is that any extensions that are implemented<br>
directly by _mesa_init_driver_functions without any driver-specific<br>
entrypoints will be enabled here.<br>
---<br>
 src/mesa/drivers/common/driverfuncs.c          | 8 ++++++++<br>
 src/mesa/drivers/common/driverfuncs.h          | 2 ++<br>
 src/mesa/drivers/dri/i915/intel_extensions.c   | 3 +++<br>
 src/mesa/drivers/dri/i965/intel_extensions.c   | 3 +++<br>
 src/mesa/drivers/dri/nouveau/nouveau_context.c | 1 +<br>
 src/mesa/drivers/dri/r200/r200_context.c       | 2 ++<br>
 src/mesa/drivers/dri/radeon/radeon_context.c   | 2 ++<br>
 src/mesa/drivers/dri/swrast/swrast.c           | 1 +<br>
 8 files changed, 22 insertions(+)<br>
<br>
diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c<br>
index 6ece5d8..ee8b390 100644<br>
--- a/src/mesa/drivers/common/driverfuncs.c<br>
+++ b/src/mesa/drivers/common/driverfuncs.c<br>
@@ -326,3 +326,11 @@ _mesa_init_driver_state(struct gl_context *ctx)<br>
<br>
    ctx->Driver.DrawBuffer(ctx, ctx->Color.DrawBuffer[0]);<br>
 }<br>
+<br>
+/**<br>
+ * Enable extensions that are available for all DRI-based drivers.<br>
+ */<br>
+void<br>
+_mesa_init_driver_extensions(struct gl_context *ctx)<br>
+{<br>
+}<br>
diff --git a/src/mesa/drivers/common/driverfuncs.h b/src/mesa/drivers/common/driverfuncs.h<br>
index 6b9a900..520c059 100644<br>
--- a/src/mesa/drivers/common/driverfuncs.h<br>
+++ b/src/mesa/drivers/common/driverfuncs.h<br>
@@ -33,5 +33,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver);<br>
 extern void<br>
 _mesa_init_driver_state(struct gl_context *ctx);<br>
<br>
+extern void<br>
+_mesa_init_driver_extensions(struct gl_context *ctx);<br>
<br>
 #endif<br>
diff --git a/src/mesa/drivers/dri/i915/intel_extensions.c b/src/mesa/drivers/dri/i915/intel_extensions.c<br>
index 76f608e..3a8744a 100644<br>
--- a/src/mesa/drivers/dri/i915/intel_extensions.c<br>
+++ b/src/mesa/drivers/dri/i915/intel_extensions.c<br>
@@ -31,6 +31,7 @@<br>
 #include "intel_context.h"<br>
 #include "intel_extensions.h"<br>
 #include "intel_reg.h"<br>
+#include "drivers/common/driverfuncs.h"<br>
 #include "utils.h"<br>
<br>
 /**<br>
@@ -44,6 +45,8 @@ intelInitExtensions(struct gl_context *ctx)<br>
<br>
    assert(intel->gen == 2 || intel->gen == 3);<br>
<br>
+   _mesa_init_driver_extensions(ctx);<br>
+<br>
    ctx->Extensions.ARB_draw_elements_base_vertex = true;<br>
    ctx->Extensions.ARB_explicit_attrib_location = true;<br>
    ctx->Extensions.ARB_framebuffer_object = true;<br>
diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c<br>
index 39d0ab5..fe47464 100644<br>
--- a/src/mesa/drivers/dri/i965/intel_extensions.c<br>
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c<br>
@@ -31,6 +31,7 @@<br>
 #include "intel_batchbuffer.h"<br>
 #include "intel_reg.h"<br>
 #include "utils.h"<br>
+#include "drivers/common/driverfuncs.h"<br>
<br>
 /**<br>
  * Test if we can use MI_LOAD_REGISTER_MEM from an untrusted batchbuffer.<br>
@@ -162,6 +163,8 @@ intelInitExtensions(struct gl_context *ctx)<br>
<br>
    assert(brw->gen >= 4);<br>
<br>
+   _mesa_init_driver_extensions(ctx);<br>
+<br>
    ctx->Extensions.ARB_buffer_storage = true;<br>
    ctx->Extensions.ARB_depth_buffer_float = true;<br>
    ctx->Extensions.ARB_depth_clamp = true;<br>
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c<br>
index f8c8dc3..ad7ee86 100644<br>
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c<br>
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c<br>
@@ -183,6 +183,7 @@ nouveau_context_init(struct gl_context *ctx, gl_api api,<br>
        }<br>
<br>
        /* Enable any supported extensions. */<br>
+        _mesa_init_driver_extensions(ctx);<br>
        ctx->Extensions.EXT_blend_color = true;<br>
        ctx->Extensions.EXT_blend_minmax = true;<br>
        ctx->Extensions.EXT_texture_filter_anisotropic = true;<br>
diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c<br>
index 71dfcf3..93ca23d 100644<br>
--- a/src/mesa/drivers/dri/r200/r200_context.c<br>
+++ b/src/mesa/drivers/dri/r200/r200_context.c<br>
@@ -366,6 +366,8 @@ GLboolean r200CreateContext( gl_api api,<br>
    _math_matrix_ctr( &rmesa->tmpmat );<br>
    _math_matrix_set_identity( &rmesa->tmpmat );<br>
<br>
+   _mesa_init_driver_extensions(ctx);<br>
+<br>
    ctx->Extensions.ARB_occlusion_query = true;<br>
    ctx->Extensions.ARB_point_sprite = true;<br>
    ctx->Extensions.ARB_texture_border_clamp = true;<br>
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c b/src/mesa/drivers/dri/radeon/radeon_context.c<br>
index 1ceb4ab..fd8e95b 100644<br>
--- a/src/mesa/drivers/dri/radeon/radeon_context.c<br>
+++ b/src/mesa/drivers/dri/radeon/radeon_context.c<br>
@@ -328,6 +328,8 @@ r100CreateContext( gl_api api,<br>
       _math_matrix_set_identity( &rmesa->tmpmat[i] );<br>
    }<br>
<br>
+   _mesa_init_driver_extensions(ctx);<br>
+<br>
    ctx->Extensions.ARB_occlusion_query = true;<br>
    ctx->Extensions.ARB_texture_border_clamp = true;<br>
    ctx->Extensions.ARB_texture_cube_map = true;<br>
diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c<br>
index 8881381..71e2184 100644<br>
--- a/src/mesa/drivers/dri/swrast/swrast.c<br>
+++ b/src/mesa/drivers/dri/swrast/swrast.c<br>
@@ -720,6 +720,7 @@ dri_create_context(gl_api api,<br>
     }<br>
<br>
     _mesa_meta_init(mesaCtx);<br>
+    _mesa_init_driver_extensions(mesaCtx);<br>
     _mesa_enable_sw_extensions(mesaCtx);<br>
<br>
     _mesa_compute_version(mesaCtx);<br>
--<br>
1.9.3<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div>