[Mesa-dev] [PATCH] meta: Use ARB_explicit_attrib_location in the rest of the meta shaders.

Ian Romanick idr at freedesktop.org
Tue Mar 22 21:26:25 UTC 2016


I thought I already had this patch, but it looks like it was on my to-do
list.  I had patches to use GL_ARB_explicit_uniform_location, and those
needed GL_ARB_explicit_attrib_location (to get the layout keyword).

https://patchwork.freedesktop.org/patch/74220/ (and others... I'm not
sure why I haven't landed these.)

Every driver that supports GLSL also supports
GL_ARB_explicit_attrib_location.

On 03/15/2016 12:05 PM, Kenneth Graunke wrote:
> This is cleaner than using glBindAttribLocation().
> 
> Not all drivers support the extension, but I don't think those drivers
> use GLSL in the first place.  Apparently some Meta shaders already use
> GL_ARB_explicit_attrib_location, so I think it should be okay.
> 
> Honestly, I'm not sure how the old code worked anyway - we bound the
> attribute location for "texcoords", while all the shaders capitalized
> or spelled it differently.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/common/meta.c      | 17 ++++++-----------
>  src/mesa/drivers/common/meta_blit.c | 15 +++++++++------
>  2 files changed, 15 insertions(+), 17 deletions(-)
> 
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index ab78f45..b05dfc7 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -207,8 +207,6 @@ _mesa_meta_compile_and_link_program(struct gl_context *ctx,
>     _mesa_DeleteShader(fs);
>     _mesa_AttachShader(*program, vs);
>     _mesa_DeleteShader(vs);
> -   _mesa_BindAttribLocation(*program, 0, "position");
> -   _mesa_BindAttribLocation(*program, 1, "texcoords");
>     _mesa_meta_link_program_with_debug(ctx, *program);
>  
>     _mesa_UseProgram(*program);
> @@ -230,19 +228,15 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
>  {
>     char *vs_source, *fs_source;
>     struct blit_shader *shader = choose_blit_shader(target, table);
> -   const char *vs_input, *vs_output, *fs_input, *vs_preprocess, *fs_preprocess;
> +   const char *fs_input, *vs_preprocess, *fs_preprocess;
>     void *mem_ctx;
>  
>     if (ctx->Const.GLSLVersion < 130) {
>        vs_preprocess = "";
> -      vs_input = "attribute";
> -      vs_output = "varying";
>        fs_preprocess = "#extension GL_EXT_texture_array : enable";
>        fs_input = "varying";
>     } else {
>        vs_preprocess = "#version 130";
> -      vs_input = "in";
> -      vs_output = "out";
>        fs_preprocess = "#version 130";
>        fs_input = "in";
>        shader->func = "texture";
> @@ -259,15 +253,16 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
>  
>     vs_source = ralloc_asprintf(mem_ctx,
>                  "%s\n"
> -                "%s vec2 position;\n"
> -                "%s vec4 textureCoords;\n"
> -                "%s vec4 texCoords;\n"
> +                "#extension GL_ARB_explicit_attrib_location: enable\n"
> +                "layout(location = 0) in vec2 position;\n"
> +                "layout(location = 1) in vec4 textureCoords;\n"
> +                "out vec4 texCoords;\n"
>                  "void main()\n"
>                  "{\n"
>                  "   texCoords = textureCoords;\n"
>                  "   gl_Position = vec4(position, 0.0, 1.0);\n"
>                  "}\n",
> -                vs_preprocess, vs_input, vs_input, vs_output);
> +                vs_preprocess);
>  
>     fs_source = ralloc_asprintf(mem_ctx,
>                  "%s\n"
> diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
> index 5d80f7d..179dc0d 100644
> --- a/src/mesa/drivers/common/meta_blit.c
> +++ b/src/mesa/drivers/common/meta_blit.c
> @@ -168,8 +168,9 @@ setup_glsl_msaa_blit_scaled_shader(struct gl_context *ctx,
>  
>     static const char vs_source[] =
>                                 "#version 130\n"
> -                               "in vec2 position;\n"
> -                               "in vec3 textureCoords;\n"
> +                               "#extension GL_ARB_explicit_attrib_location: enable\n"
> +                               "layout(location = 0) in vec2 position;\n"
> +                               "layout(location = 1) in vec3 textureCoords;\n"
>                                 "out vec2 texCoords;\n"
>                                 "flat out int layer;\n"
>                                 "void main()\n"
> @@ -384,8 +385,9 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>  
>        vs_source = ralloc_asprintf(mem_ctx,
>                                    "#version 130\n"
> -                                  "in vec2 position;\n"
> -                                  "in %s textureCoords;\n"
> +                                  "#extension GL_ARB_explicit_attrib_location: enable\n"
> +                                  "layout(location = 0) in vec2 position;\n"
> +                                  "layout(location = 1) in %s textureCoords;\n"
>                                    "out %s texCoords;\n"
>                                    "void main()\n"
>                                    "{\n"
> @@ -506,8 +508,9 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>  
>        vs_source = ralloc_asprintf(mem_ctx,
>                                    "#version 130\n"
> -                                  "in vec2 position;\n"
> -                                  "in %s textureCoords;\n"
> +                                  "#extension GL_ARB_explicit_attrib_location: enable\n"
> +                                  "layout(location = 0) in vec2 position;\n"
> +                                  "layout(location = 1) in %s textureCoords;\n"
>                                    "out %s texCoords;\n"
>                                    "void main()\n"
>                                    "{\n"
> 



More information about the mesa-dev mailing list