Reviewed-by: Marek Olšák <mar...@gmail.com> Nice cleanup BTW.
Marek On Tue, Oct 4, 2011 at 10:44 PM, Ian Romanick <i...@freedesktop.org> wrote: > From: Ian Romanick <ian.d.roman...@intel.com> > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > Cc: Marek Olšák <mar...@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 > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev