[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