mesa: Use functions to convert gl_shader_stage to PROGRAM enum or pipe target.
authorPaul Berry <stereotype441@gmail.com>
Wed, 8 Jan 2014 19:09:58 +0000 (11:09 -0800)
committerPaul Berry <stereotype441@gmail.com>
Thu, 9 Jan 2014 17:31:27 +0000 (09:31 -0800)
Suggested-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
v2: Improve assert message.

src/mesa/program/ir_to_mesa.cpp
src/mesa/program/program.h
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 7988248bb83883c42989d6762afc2428ce0b2a78..f6c229c7dc5b917b5c86dc5528cf7c9aee4f3616 100644 (file)
@@ -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);
    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);
index 4015b4c202bf56e0afd493490796f8d4a7ba981f..0e350cd6f86dc107709bca14e92601f85707c019 100644 (file)
@@ -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(!"Unexpected shader stage in _mesa_shader_stage_to_program");
+   return GL_VERTEX_PROGRAM_ARB;
+}
+
+
 static inline GLenum
 _mesa_program_index_to_target(GLuint i)
 {
index 4b6fd2d4bae5cd298e0209885aac9853a6bc7d58..73c39eb77d62da28ae7e1b6b3ea8dd1215420ce0 100644 (file)
@@ -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);