[Mesa-dev] [PATCH 6/6] mesa: remove dd_function_table::BindProgram

Nicolai Hähnle nhaehnle at gmail.com
Fri Mar 24 11:08:38 UTC 2017


With Timothy's comment on patch #3 addressed, the series is

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

On 24.03.2017 00:42, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
>  src/mesa/drivers/common/driverfuncs.c |  1 -
>  src/mesa/main/arbprogram.c            |  3 --
>  src/mesa/main/atifragshader.c         |  3 --
>  src/mesa/main/dd.h                    |  3 --
>  src/mesa/main/state.c                 | 55 +++++------------------------------
>  src/mesa/tnl/t_vp_build.c             |  8 -----
>  6 files changed, 7 insertions(+), 66 deletions(-)
>
> diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c
> index 642cd91..db0a107 100644
> --- a/src/mesa/drivers/common/driverfuncs.c
> +++ b/src/mesa/drivers/common/driverfuncs.c
> @@ -106,21 +106,20 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
>     driver->DeleteTexture = _mesa_delete_texture_object;
>     driver->NewTextureImage = _swrast_new_texture_image;
>     driver->DeleteTextureImage = _swrast_delete_texture_image;
>     driver->AllocTextureImageBuffer = _swrast_alloc_texture_image_buffer;
>     driver->FreeTextureImageBuffer = _swrast_free_texture_image_buffer;
>     driver->MapTextureImage = _swrast_map_teximage;
>     driver->UnmapTextureImage = _swrast_unmap_teximage;
>     driver->DrawTex = _mesa_meta_DrawTex;
>
>     /* Vertex/fragment programs */
> -   driver->BindProgram = NULL;
>     driver->NewProgram = _mesa_new_program;
>     driver->DeleteProgram = _mesa_delete_program;
>
>     /* ATI_fragment_shader */
>     driver->NewATIfs = NULL;
>
>     /* simple state commands */
>     driver->AlphaFunc = NULL;
>     driver->BlendColor = NULL;
>     driver->BlendEquationSeparate = NULL;
> diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c
> index 2c60310..f3a0a54c 100644
> --- a/src/mesa/main/arbprogram.c
> +++ b/src/mesa/main/arbprogram.c
> @@ -111,23 +111,20 @@ _mesa_BindProgramARB(GLenum target, GLuint id)
>     if (target == GL_VERTEX_PROGRAM_ARB) {
>        _mesa_reference_program(ctx, &ctx->VertexProgram.Current, newProg);
>     }
>     else if (target == GL_FRAGMENT_PROGRAM_ARB) {
>        _mesa_reference_program(ctx, &ctx->FragmentProgram.Current, newProg);
>     }
>
>     /* Never null pointers */
>     assert(ctx->VertexProgram.Current);
>     assert(ctx->FragmentProgram.Current);
> -
> -   if (ctx->Driver.BindProgram)
> -      ctx->Driver.BindProgram(ctx, target, newProg);
>  }
>
>
>  /**
>   * Delete a list of programs.
>   * \note Not compiled into display lists.
>   * \note Called by both glDeleteProgramsNV and glDeleteProgramsARB.
>   */
>  void GLAPIENTRY
>  _mesa_DeleteProgramsARB(GLsizei n, const GLuint *ids)
> diff --git a/src/mesa/main/atifragshader.c b/src/mesa/main/atifragshader.c
> index 83a449a..27d8b86 100644
> --- a/src/mesa/main/atifragshader.c
> +++ b/src/mesa/main/atifragshader.c
> @@ -257,23 +257,20 @@ _mesa_BindFragmentShaderATI(GLuint id)
>        }
>
>     }
>
>     /* do actual bind */
>     ctx->ATIFragmentShader.Current = newProg;
>
>     assert(ctx->ATIFragmentShader.Current);
>     if (newProg)
>        newProg->RefCount++;
> -
> -   /*if (ctx->Driver.BindProgram)
> -      ctx->Driver.BindProgram(ctx, target, prog); */
>  }
>
>  void GLAPIENTRY
>  _mesa_DeleteFragmentShaderATI(GLuint id)
>  {
>     GET_CURRENT_CONTEXT(ctx);
>
>     if (ctx->ATIFragmentShader.Compiling) {
>        _mesa_error(ctx, GL_INVALID_OPERATION, "glDeleteFragmentShaderATI(insideShader)");
>        return;
> diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
> index f300ad6..b3a85f1 100644
> --- a/src/mesa/main/dd.h
> +++ b/src/mesa/main/dd.h
> @@ -462,23 +462,20 @@ struct dd_function_table {
>     GLboolean (*BindRenderbufferTexImage)(struct gl_context *ctx,
>                                           struct gl_renderbuffer *rb,
>                                           struct gl_texture_image *texImage);
>     /*@}*/
>
>
>     /**
>      * \name Vertex/fragment program functions
>      */
>     /*@{*/
> -   /** Bind a vertex/fragment program */
> -   void (*BindProgram)(struct gl_context *ctx, GLenum target,
> -                       struct gl_program *prog);
>     /** Allocate a new program */
>     struct gl_program * (*NewProgram)(struct gl_context *ctx, GLenum target,
>                                       GLuint id, bool is_arb_asm);
>     /** Delete a program */
>     void (*DeleteProgram)(struct gl_context *ctx, struct gl_program *prog);
>     /**
>      * Allocate a program to associate with the new ATI fragment shader (optional)
>      */
>     struct gl_program * (*NewATIfs)(struct gl_context *ctx,
>                                     struct ati_fragment_shader *curProg);
> diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
> index 07629d8..5a760f5 100644
> --- a/src/mesa/main/state.c
> +++ b/src/mesa/main/state.c
> @@ -73,22 +73,21 @@ update_program_enables(struct gl_context *ctx)
>        && ctx->VertexProgram.Current->arb.Instructions;
>     ctx->FragmentProgram._Enabled = ctx->FragmentProgram.Enabled
>        && ctx->FragmentProgram.Current->arb.Instructions;
>     ctx->ATIFragmentShader._Enabled = ctx->ATIFragmentShader.Enabled
>        && ctx->ATIFragmentShader.Current->Instructions[0];
>  }
>
>
>  /**
>   * Update the ctx->*Program._Current pointers to point to the
> - * current/active programs.  Then call ctx->Driver.BindProgram() to
> - * tell the driver which programs to use.
> + * current/active programs.
>   *
>   * Programs may come from 3 sources: GLSL shaders, ARB/NV_vertex/fragment
>   * programs or programs derived from fixed-function state.
>   *
>   * This function needs to be called after texture state validation in case
>   * we're generating a fragment program from fixed-function texture state.
>   *
>   * \return bitfield which will indicate _NEW_PROGRAM state if a new vertex
>   * or fragment program is being used.
>   */
> @@ -231,67 +230,27 @@ update_program(struct gl_context *ctx)
>     if (csProg) {
>        /* Use GLSL compute shader */
>        _mesa_reference_program(ctx, &ctx->ComputeProgram._Current, csProg);
>     } else {
>        /* no compute program */
>        _mesa_reference_program(ctx, &ctx->ComputeProgram._Current, NULL);
>     }
>
>     /* Let the driver know what's happening:
>      */
> -   if (ctx->FragmentProgram._Current != prevFP) {
> +   if (ctx->FragmentProgram._Current != prevFP ||
> +       ctx->VertexProgram._Current != prevVP ||
> +       ctx->GeometryProgram._Current != prevGP ||
> +       ctx->TessEvalProgram._Current != prevTEP ||
> +       ctx->TessCtrlProgram._Current != prevTCP ||
> +       ctx->ComputeProgram._Current != prevCP)
>        new_state |= _NEW_PROGRAM;
> -      if (ctx->Driver.BindProgram) {
> -         ctx->Driver.BindProgram(ctx, GL_FRAGMENT_PROGRAM_ARB,
> -                                 ctx->FragmentProgram._Current);
> -      }
> -   }
> -
> -   if (ctx->GeometryProgram._Current != prevGP) {
> -      new_state |= _NEW_PROGRAM;
> -      if (ctx->Driver.BindProgram) {
> -         ctx->Driver.BindProgram(ctx, GL_GEOMETRY_PROGRAM_NV,
> -                                 ctx->GeometryProgram._Current);
> -      }
> -   }
> -
> -   if (ctx->TessEvalProgram._Current != prevTEP) {
> -      new_state |= _NEW_PROGRAM;
> -      if (ctx->Driver.BindProgram) {
> -         ctx->Driver.BindProgram(ctx, GL_TESS_EVALUATION_PROGRAM_NV,
> -                                 ctx->TessEvalProgram._Current);
> -      }
> -   }
> -
> -   if (ctx->TessCtrlProgram._Current != prevTCP) {
> -      new_state |= _NEW_PROGRAM;
> -      if (ctx->Driver.BindProgram) {
> -         ctx->Driver.BindProgram(ctx, GL_TESS_CONTROL_PROGRAM_NV,
> -                                 ctx->TessCtrlProgram._Current);
> -      }
> -   }
> -
> -   if (ctx->VertexProgram._Current != prevVP) {
> -      new_state |= _NEW_PROGRAM;
> -      if (ctx->Driver.BindProgram) {
> -         ctx->Driver.BindProgram(ctx, GL_VERTEX_PROGRAM_ARB,
> -                                 ctx->VertexProgram._Current);
> -      }
> -   }
> -
> -   if (ctx->ComputeProgram._Current != prevCP) {
> -      new_state |= _NEW_PROGRAM;
> -      if (ctx->Driver.BindProgram) {
> -         ctx->Driver.BindProgram(ctx, GL_COMPUTE_PROGRAM_NV,
> -                                 ctx->ComputeProgram._Current);
> -      }
> -   }
>
>     return new_state;
>  }
>
>
>  /**
>   * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0.
>   */
>  static GLbitfield
>  update_program_constants(struct gl_context *ctx)
> diff --git a/src/mesa/tnl/t_vp_build.c b/src/mesa/tnl/t_vp_build.c
> index 18d105f..3d8210c 100644
> --- a/src/mesa/tnl/t_vp_build.c
> +++ b/src/mesa/tnl/t_vp_build.c
> @@ -41,19 +41,11 @@
>  void _tnl_UpdateFixedFunctionProgram( struct gl_context *ctx )
>  {
>     const struct gl_program *prev = ctx->VertexProgram._Current;
>
>     if (!ctx->VertexProgram._Current ||
>         ctx->VertexProgram._Current == ctx->VertexProgram._TnlProgram) {
>        ctx->VertexProgram._Current
>           = ctx->VertexProgram._TnlProgram
>           = _mesa_get_fixed_func_vertex_program(ctx);
>     }
> -
> -   /* Tell the driver about the change.  Could define a new target for
> -    * this?
> -    */
> -   if (ctx->VertexProgram._Current != prev && ctx->Driver.BindProgram) {
> -      ctx->Driver.BindProgram(ctx, GL_VERTEX_PROGRAM_ARB,
> -                              ctx->VertexProgram._Current);
> -   }
>  }
>


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list