mesa: Change redundant code into loops in shaderapi.c.
authorPaul Berry <stereotype441@gmail.com>
Thu, 9 Jan 2014 19:33:15 +0000 (11:33 -0800)
committerPaul Berry <stereotype441@gmail.com>
Wed, 22 Jan 2014 04:25:49 +0000 (20:25 -0800)
This is possible now that ctx->Shader.CurrentProgram is an array.

Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/shaderapi.c

index d57748c93adfcfc930936a1cbf6529166f7566b6..61ac0e35ac755e5826a7c9dbbd47f07e1d8e5d7a 100644 (file)
@@ -130,11 +130,11 @@ _mesa_init_shader_state(struct gl_context *ctx)
 void
 _mesa_free_shader_state(struct gl_context *ctx)
 {
 void
 _mesa_free_shader_state(struct gl_context *ctx)
 {
-   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram[MESA_SHADER_VERTEX], NULL);
-   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram[MESA_SHADER_GEOMETRY],
-                                 NULL);
-   _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram[MESA_SHADER_FRAGMENT],
-                                 NULL);
+   int i;
+   for (i = 0; i < MESA_SHADER_STAGES; i++) {
+      _mesa_reference_shader_program(ctx, &ctx->Shader.CurrentProgram[i],
+                                     NULL);
+   }
    _mesa_reference_shader_program(ctx, &ctx->Shader._CurrentFragmentProgram,
                                  NULL);
    _mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, NULL);
    _mesa_reference_shader_program(ctx, &ctx->Shader._CurrentFragmentProgram,
                                  NULL);
    _mesa_reference_shader_program(ctx, &ctx->Shader.ActiveProgram, NULL);
@@ -946,32 +946,11 @@ use_shader_program(struct gl_context *ctx, GLenum type,
                   struct gl_shader_program *shProg)
 {
    struct gl_shader_program **target;
                   struct gl_shader_program *shProg)
 {
    struct gl_shader_program **target;
+   gl_shader_stage stage = _mesa_shader_enum_to_shader_stage(type);
 
 
-   switch (type) {
-   case GL_VERTEX_SHADER:
-      target = &ctx->Shader.CurrentProgram[MESA_SHADER_VERTEX];
-      if ((shProg == NULL)
-         || (shProg->_LinkedShaders[MESA_SHADER_VERTEX] == NULL)) {
-        shProg = NULL;
-      }
-      break;
-   case GL_GEOMETRY_SHADER_ARB:
-      target = &ctx->Shader.CurrentProgram[MESA_SHADER_GEOMETRY];
-      if ((shProg == NULL)
-         || (shProg->_LinkedShaders[MESA_SHADER_GEOMETRY] == NULL)) {
-        shProg = NULL;
-      }
-      break;
-   case GL_FRAGMENT_SHADER:
-      target = &ctx->Shader.CurrentProgram[MESA_SHADER_FRAGMENT];
-      if ((shProg == NULL)
-         || (shProg->_LinkedShaders[MESA_SHADER_FRAGMENT] == NULL)) {
-        shProg = NULL;
-      }
-      break;
-   default:
-      return;
-   }
+   target = &ctx->Shader.CurrentProgram[stage];
+   if ((shProg == NULL) || (shProg->_LinkedShaders[stage] == NULL))
+      shProg = NULL;
 
    if (*target != shProg) {
       FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS);
 
    if (*target != shProg) {
       FLUSH_VERTICES(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS);