[Mesa-dev] [PATCH 6/9] mesa: Simplify calling Driver.ProgramStringNotify after previous refactors

Marek Olšák maraeo at gmail.com
Tue Oct 4 14:08:50 PDT 2011


Reviewed-by: Marek Olšák <maraeo at gmail.com>

Nice cleanup BTW.

Marek

On Tue, Oct 4, 2011 at 10:44 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Cc: Marek Olšák <maraeo at gmail.com>
> ---
>  src/mesa/program/ir_to_mesa.cpp            |   33 +++++++--------------
>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp |   44 +++++++---------------------
>  2 files changed, 22 insertions(+), 55 deletions(-)
>
> diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
> index b9b7b1a..5be44bc 100644
> --- a/src/mesa/program/ir_to_mesa.cpp
> +++ b/src/mesa/program/ir_to_mesa.cpp
> @@ -3288,31 +3288,20 @@ _mesa_ir_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
>       linked_prog = get_mesa_program(ctx, prog, prog->_LinkedShaders[i]);
>
>       if (linked_prog) {
> -         bool ok = true;
> +        static const GLenum targets[] = {
> +           GL_VERTEX_PROGRAM_ARB,
> +           GL_FRAGMENT_PROGRAM_ARB,
> +           GL_GEOMETRY_PROGRAM_NV
> +        };
>
> -         switch (prog->_LinkedShaders[i]->Type) {
> -         case GL_VERTEX_SHADER:
> +        if (i == MESA_SHADER_VERTEX) {
>             ((struct gl_vertex_program *)linked_prog)->UsesClipDistance
>                = prog->Vert.UsesClipDistance;
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> -                                   linked_prog);
> -            ok = ctx->Driver.ProgramStringNotify(ctx, GL_VERTEX_PROGRAM_ARB,
> -                                                 linked_prog);
> -            break;
> -         case GL_FRAGMENT_SHADER:
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> -                                   linked_prog);
> -            ok = ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
> -                                                 linked_prog);
> -            break;
> -         case GL_GEOMETRY_SHADER:
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> -                                   linked_prog);
> -            ok = ctx->Driver.ProgramStringNotify(ctx, GL_GEOMETRY_PROGRAM_NV,
> -                                                 linked_prog);
> -            break;
> -         }
> -         if (!ok) {
> +        }
> +
> +        _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> +                                linked_prog);
> +         if (!ctx->Driver.ProgramStringNotify(ctx, targets[i], linked_prog)) {
>             return GL_FALSE;
>          }
>       }
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 80a5930..fe65ae5 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -5180,39 +5180,17 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
>       linked_prog = get_mesa_program(ctx, prog, prog->_LinkedShaders[i]);
>
>       if (linked_prog) {
> -         bool ok = true;
> -
> -         switch (prog->_LinkedShaders[i]->Type) {
> -         case GL_VERTEX_SHADER:
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> -                                    linked_prog);
> -            ok = ctx->Driver.ProgramStringNotify(ctx, GL_VERTEX_PROGRAM_ARB,
> -                                                 linked_prog);
> -            if (!ok) {
> -               _mesa_reference_vertprog(ctx, &prog->VertexProgram, NULL);
> -            }
> -            break;
> -         case GL_FRAGMENT_SHADER:
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> -                                   linked_prog);
> -            ok = ctx->Driver.ProgramStringNotify(ctx, GL_FRAGMENT_PROGRAM_ARB,
> -                                                 linked_prog);
> -            if (!ok) {
> -               _mesa_reference_fragprog(ctx, &prog->FragmentProgram, NULL);
> -            }
> -            break;
> -         case GL_GEOMETRY_SHADER:
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> -                                   linked_prog);
> -            ok = ctx->Driver.ProgramStringNotify(ctx, GL_GEOMETRY_PROGRAM_NV,
> -                                                 linked_prog);
> -            if (!ok) {
> -               _mesa_reference_geomprog(ctx, &prog->GeometryProgram, NULL);
> -            }
> -            break;
> -         }
> -         if (!ok) {
> -            _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program, NULL);
> +        static const GLenum targets[] = {
> +           GL_VERTEX_PROGRAM_ARB,
> +           GL_FRAGMENT_PROGRAM_ARB,
> +           GL_GEOMETRY_PROGRAM_NV
> +        };
> +
> +        _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> +                                linked_prog);
> +         if (!ctx->Driver.ProgramStringNotify(ctx, targets[i], linked_prog)) {
> +           _mesa_reference_program(ctx, &prog->_LinkedShaders[i]->Program,
> +                                   NULL);
>             _mesa_reference_program(ctx, &linked_prog, NULL);
>             return GL_FALSE;
>          }
> --
> 1.7.6
>
>


More information about the mesa-dev mailing list