[Mesa-dev] [PATCH 08/13] meta: Merge compiling and linking of blit program

Ian Romanick idr at freedesktop.org
Mon May 12 10:12:21 PDT 2014


This patch is

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

For 10.3, I think we should look to migrate meta to using separate
shader objects and explicit attrib locations... or at least make some
short-cut functions to reduce the number of calls made in meta.

On 05/09/2014 01:28 AM, Topi Pohjolainen wrote:
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/mesa/drivers/common/meta.c      | 45 ++++++++++++++++++++++++-------------
>  src/mesa/drivers/common/meta.h      |  7 ++++++
>  src/mesa/drivers/common/meta_blit.c | 18 +++------------
>  3 files changed, 39 insertions(+), 31 deletions(-)
> 
> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
> index b4c3056..3ef3f79 100644
> --- a/src/mesa/drivers/common/meta.c
> +++ b/src/mesa/drivers/common/meta.c
> @@ -204,6 +204,31 @@ _mesa_meta_link_program_with_debug(struct gl_context *ctx, GLuint program)
>     return 0;
>  }
>  
> +void
> +_mesa_meta_compile_and_link_program(struct gl_context *ctx,
> +                                    const char *vs_source,
> +                                    const char *fs_source,
> +                                    const char *name,
> +                                    GLuint *program)
> +{
> +   GLuint vs = _mesa_meta_compile_shader_with_debug(ctx, GL_VERTEX_SHADER,
> +                                                    vs_source);
> +   GLuint fs = _mesa_meta_compile_shader_with_debug(ctx, GL_FRAGMENT_SHADER,
> +                                                    fs_source);
> +
> +   *program = _mesa_CreateProgram();
> +   _mesa_AttachShader(*program, fs);
> +   _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_ObjectLabel(GL_PROGRAM, *program, -1, name);
> +
> +   _mesa_UseProgram(*program);
> +}
> +
>  /**
>   * Generate a generic shader to blit from a texture to a framebuffer
>   *
> @@ -219,10 +244,8 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
>  {
>     const char *vs_source;
>     char *fs_source;
> -   GLuint vs, fs;
>     void *const mem_ctx = ralloc_context(NULL);
>     struct blit_shader *shader = choose_blit_shader(target, table);
> -   char *name;
>  
>     assert(shader != NULL);
>  
> @@ -282,22 +305,12 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
>                                    shader->texcoords);
>     }
>  
> -   vs = _mesa_meta_compile_shader_with_debug(ctx, GL_VERTEX_SHADER, vs_source);
> -   fs = _mesa_meta_compile_shader_with_debug(ctx, GL_FRAGMENT_SHADER, fs_source);
>  
> -   shader->shader_prog = _mesa_CreateProgram();
> -   _mesa_AttachShader(shader->shader_prog, fs);
> -   _mesa_DeleteShader(fs);
> -   _mesa_AttachShader(shader->shader_prog, vs);
> -   _mesa_DeleteShader(vs);
> -   _mesa_BindAttribLocation(shader->shader_prog, 0, "position");
> -   _mesa_BindAttribLocation(shader->shader_prog, 1, "texcoords");
> -   _mesa_meta_link_program_with_debug(ctx, shader->shader_prog);
> -   name = ralloc_asprintf(mem_ctx, "%s blit", shader->type);
> -   _mesa_ObjectLabel(GL_PROGRAM, shader->shader_prog, -1, name);
> +   _mesa_meta_compile_and_link_program(ctx, vs_source, fs_source,
> +                                       ralloc_asprintf(mem_ctx, "%s blit",
> +                                                       shader->type),
> +                                       &shader->shader_prog);
>     ralloc_free(mem_ctx);
> -
> -   _mesa_UseProgram(shader->shader_prog);
>  }
>  
>  /**
> diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h
> index 32b71fa..fdd8714 100644
> --- a/src/mesa/drivers/common/meta.h
> +++ b/src/mesa/drivers/common/meta.h
> @@ -455,6 +455,13 @@ _mesa_meta_compile_shader_with_debug(struct gl_context *ctx, GLenum target,
>  GLuint
>  _mesa_meta_link_program_with_debug(struct gl_context *ctx, GLuint program);
>  
> +void
> +_mesa_meta_compile_and_link_program(struct gl_context *ctx,
> +                                    const char *vs_source,
> +                                    const char *fs_source,
> +                                    const char *name,
> +                                    GLuint *program);
> +
>  GLboolean
>  _mesa_meta_alloc_texture(struct temp_texture *tex,
>                           GLsizei width, GLsizei height, GLenum intFormat);
> diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c
> index c3dc146..14ecf8f 100644
> --- a/src/mesa/drivers/common/meta_blit.c
> +++ b/src/mesa/drivers/common/meta_blit.c
> @@ -62,7 +62,6 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>  {
>     const char *vs_source;
>     char *fs_source;
> -   GLuint vs, fs;
>     void *mem_ctx;
>     enum blit_msaa_shader shader_index;
>     bool dst_is_msaa = false;
> @@ -314,21 +313,10 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx,
>                                    sample_resolve);
>     }
>  
> -   vs = _mesa_meta_compile_shader_with_debug(ctx, GL_VERTEX_SHADER, vs_source);
> -   fs = _mesa_meta_compile_shader_with_debug(ctx, GL_FRAGMENT_SHADER, fs_source);
> -
> -   blit->msaa_shaders[shader_index] = _mesa_CreateProgram();
> -   _mesa_AttachShader(blit->msaa_shaders[shader_index], fs);
> -   _mesa_DeleteShader(fs);
> -   _mesa_AttachShader(blit->msaa_shaders[shader_index], vs);
> -   _mesa_DeleteShader(vs);
> -   _mesa_BindAttribLocation(blit->msaa_shaders[shader_index], 0, "position");
> -   _mesa_BindAttribLocation(blit->msaa_shaders[shader_index], 1, "texcoords");
> -   _mesa_meta_link_program_with_debug(ctx, blit->msaa_shaders[shader_index]);
> -   _mesa_ObjectLabel(GL_PROGRAM, blit->msaa_shaders[shader_index], -1, name);
> -   ralloc_free(mem_ctx);
> +   _mesa_meta_compile_and_link_program(ctx, vs_source, fs_source, name,
> +                                       &blit->msaa_shaders[shader_index]);
>  
> -   _mesa_UseProgram(blit->msaa_shaders[shader_index]);
> +   ralloc_free(mem_ctx);
>  }
>  
>  static void
> 



More information about the mesa-dev mailing list