[Mesa-dev] [PATCH 2/8] meta: Push into desktop GL mode when doing meta operations.

Eric Anholt eric at anholt.net
Fri Feb 14 15:00:11 PST 2014


This lets us simplify our shaders, and rely on GLES-prohibited
functionality (like ARB_texture_multisample) when writing these
driver-internal functions.
---
 src/mesa/drivers/common/meta.c | 39 ++++++++++++++++-----------------------
 src/mesa/drivers/common/meta.h |  3 +++
 2 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index dd905dd..a0613f2 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -204,9 +204,6 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
       fs_source = ralloc_asprintf(mem_ctx,
                                   "#extension GL_EXT_texture_array : enable\n"
                                   "#extension GL_ARB_texture_cube_map_array: enable\n"
-                                  "#ifdef GL_ES\n"
-                                  "precision highp float;\n"
-                                  "#endif\n"
                                   "uniform %s texSampler;\n"
                                   "varying vec4 texCoords;\n"
                                   "void main()\n"
@@ -219,7 +216,7 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
    }
    else {
       vs_source = ralloc_asprintf(mem_ctx,
-                                  "#version %s\n"
+                                  "#version 130\n"
                                   "in vec2 position;\n"
                                   "in vec4 textureCoords;\n"
                                   "out vec4 texCoords;\n"
@@ -227,14 +224,10 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
                                   "{\n"
                                   "   texCoords = textureCoords;\n"
                                   "   gl_Position = vec4(position, 0.0, 1.0);\n"
-                                  "}\n",
-                                  _mesa_is_desktop_gl(ctx) ? "130" : "300 es");
+                                  "}\n");
       fs_source = ralloc_asprintf(mem_ctx,
-                                  "#version %s\n"
+                                  "#version 130\n"
                                   "#extension GL_ARB_texture_cube_map_array: enable\n"
-                                  "#ifdef GL_ES\n"
-                                  "precision highp float;\n"
-                                  "#endif\n"
                                   "uniform %s texSampler;\n"
                                   "in vec4 texCoords;\n"
                                   "out vec4 out_color;\n"
@@ -244,7 +237,6 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
                                   "   out_color = texture(texSampler, %s);\n"
                                   "   gl_FragDepth = out_color.x;\n"
                                   "}\n",
-                                  _mesa_is_desktop_gl(ctx) ? "130" : "300 es",
                                   shader->type,
                                   shader->texcoords);
    }
@@ -401,6 +393,13 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
    memset(save, 0, sizeof(*save));
    save->SavedState = state;
 
+   /* We always push into desktop GL mode and pop out at the end.  No sense in
+    * writing our shaders varying based on the user's context choice, when
+    * Mesa can handle either.
+    */
+   save->API = ctx->API;
+   ctx->API = API_OPENGL_COMPAT;
+
    /* Pausing transform feedback needs to be done early, or else we won't be
     * able to change other state.
     */
@@ -753,6 +752,8 @@ _mesa_meta_end(struct gl_context *ctx)
    const GLbitfield state = save->SavedState;
    int i;
 
+   ctx->API = save->API;
+
    /* After starting a new occlusion query, initialize the results to the
     * values saved previously. The driver will then continue to increment
     * these values.
@@ -1482,9 +1483,6 @@ meta_glsl_clear_init(struct gl_context *ctx, struct clear_state *clear)
       "  }\n"
       "}\n";
    const char *fs_source =
-      "#ifdef GL_ES\n"
-      "precision highp float;\n"
-      "#endif\n"
       "uniform vec4 color;\n"
       "void main()\n"
       "{\n"
@@ -1536,27 +1534,22 @@ meta_glsl_clear_init(struct gl_context *ctx, struct clear_state *clear)
       void *shader_source_mem_ctx = ralloc_context(NULL);
       const char *vs_int_source =
          ralloc_asprintf(shader_source_mem_ctx,
-                         "#version %s\n"
+                         "#version 130\n"
                          "in vec4 position;\n"
                          "void main()\n"
                          "{\n"
                          "   gl_Position = position;\n"
-                         "}\n",
-                         _mesa_is_desktop_gl(ctx) ? "130" : "300 es");
+                         "}\n");
       const char *fs_int_source =
          ralloc_asprintf(shader_source_mem_ctx,
-                         "#version %s\n"
-                         "#ifdef GL_ES\n"
-                         "precision highp float;\n"
-                         "#endif\n"
+                         "#version 130\n"
                          "uniform ivec4 color;\n"
                          "out ivec4 out_color;\n"
                          "\n"
                          "void main()\n"
                          "{\n"
                          "   out_color = color;\n"
-                         "}\n",
-                         _mesa_is_desktop_gl(ctx) ? "130" : "300 es");
+                         "}\n");
 
       vs = _mesa_meta_compile_shader_with_debug(ctx, GL_VERTEX_SHADER,
                                                 vs_int_source);
diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h
index 5470ca4..822bfa1 100644
--- a/src/mesa/drivers/common/meta.h
+++ b/src/mesa/drivers/common/meta.h
@@ -68,6 +68,9 @@ struct save_state
 {
    GLbitfield SavedState;  /**< bitmask of MESA_META_* flags */
 
+   /* Always saved/restored with meta. */
+   gl_api API;
+
    /** MESA_META_CLEAR (and others?) */
    struct gl_query_object *CurrentOcclusionObject;
 
-- 
1.9.rc1



More information about the mesa-dev mailing list