On 01/08/2014 11:20 AM, Paul Berry wrote: > Suggested-by: Brian Paul <bri...@vmware.com> > --- > src/mesa/program/ir_to_mesa.cpp | 17 +------------ > src/mesa/program/program.h | 18 ++++++++++++++ > src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 40 > +++++++++++++++--------------- > 3 files changed, 39 insertions(+), 36 deletions(-) > > diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp > index 7988248..f6c229c 100644 > --- a/src/mesa/program/ir_to_mesa.cpp > +++ b/src/mesa/program/ir_to_mesa.cpp > @@ -2799,26 +2799,11 @@ get_mesa_program(struct gl_context *ctx, > ir_instruction **mesa_instruction_annotation; > int i; > struct gl_program *prog; > - GLenum target; > + GLenum target = _mesa_shader_stage_to_program(shader->Stage);
I think some of these can be const. > const char *target_string = _mesa_shader_stage_to_string(shader->Stage); > struct gl_shader_compiler_options *options = > &ctx->ShaderCompilerOptions[shader->Stage]; > > - switch (shader->Stage) { > - case MESA_SHADER_VERTEX: > - target = GL_VERTEX_PROGRAM_ARB; > - break; > - case MESA_SHADER_FRAGMENT: > - target = GL_FRAGMENT_PROGRAM_ARB; > - break; > - case MESA_SHADER_GEOMETRY: > - target = GL_GEOMETRY_PROGRAM_NV; > - break; > - default: > - assert(!"should not be reached"); > - return NULL; > - } > - > validate_ir_tree(shader->ir); > > prog = ctx->Driver.NewProgram(ctx, target, shader_program->Name); > diff --git a/src/mesa/program/program.h b/src/mesa/program/program.h > index 4015b4c..648233c 100644 > --- a/src/mesa/program/program.h > +++ b/src/mesa/program/program.h > @@ -207,6 +207,24 @@ _mesa_program_enum_to_shader_stage(GLenum v) > } > } > > + > +static inline GLenum > +_mesa_shader_stage_to_program(gl_shader_stage stage) > +{ > + switch (stage) { > + case MESA_SHADER_VERTEX: > + return GL_VERTEX_PROGRAM_ARB; > + case MESA_SHADER_FRAGMENT: > + return GL_FRAGMENT_PROGRAM_ARB; > + case MESA_SHADER_GEOMETRY: > + return GL_GEOMETRY_PROGRAM_NV; > + } > + > + ASSERT(0); > + return GL_VERTEX_PROGRAM_ARB; > +} > + > + > static inline GLenum > _mesa_program_index_to_target(GLuint i) > { > diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > index 4b6fd2d..73c39eb 100644 > --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp > @@ -5023,6 +5023,24 @@ out: > } > /* ----------------------------- End TGSI code > ------------------------------ */ > > + > +static unsigned > +shader_stage_to_ptarget(gl_shader_stage stage) > +{ > + switch (stage) { > + case MESA_SHADER_VERTEX: > + return PIPE_SHADER_VERTEX; > + case MESA_SHADER_FRAGMENT: > + return PIPE_SHADER_FRAGMENT; > + case MESA_SHADER_GEOMETRY: > + return PIPE_SHADER_GEOMETRY; > + } > + > + assert(!"should not be reached"); > + return PIPE_SHADER_VERTEX; > +} > + > + > /** > * Convert a shader's GLSL IR into a Mesa gl_program, although without > * generating Mesa IR. > @@ -5034,30 +5052,12 @@ get_mesa_program(struct gl_context *ctx, > { > glsl_to_tgsi_visitor* v; > struct gl_program *prog; > - GLenum target; > + GLenum target = _mesa_shader_stage_to_program(shader->Stage); > bool progress; > struct gl_shader_compiler_options *options = > > &ctx->ShaderCompilerOptions[_mesa_shader_enum_to_shader_stage(shader->Type)]; > struct pipe_screen *pscreen = ctx->st->pipe->screen; > - unsigned ptarget; > - > - switch (shader->Type) { > - case GL_VERTEX_SHADER: > - target = GL_VERTEX_PROGRAM_ARB; > - ptarget = PIPE_SHADER_VERTEX; > - break; > - case GL_FRAGMENT_SHADER: > - target = GL_FRAGMENT_PROGRAM_ARB; > - ptarget = PIPE_SHADER_FRAGMENT; > - break; > - case GL_GEOMETRY_SHADER: > - target = GL_GEOMETRY_PROGRAM_NV; > - ptarget = PIPE_SHADER_GEOMETRY; > - break; > - default: > - assert(!"should not be reached"); > - return NULL; > - } > + unsigned ptarget = shader_stage_to_ptarget(shader->Stage); > > validate_ir_tree(shader->ir); > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev