On Mon, Oct 23, 2017 at 11:57:53AM -0700, Kenneth Graunke wrote:
> This properly sets stage_state->push_constant_dirty = true, so that we
> emit 3DSTATE_CONSTANT_XS to disable the constant buffer for the shader
> stage.  It also sets stage_state->push_const_size = 0.
> ---
>  src/mesa/drivers/dri/i965/gen6_constant_state.c |  9 +++++++--
>  src/mesa/drivers/dri/i965/genX_state_upload.c   | 25 
> +++++++++----------------
>  2 files changed, 16 insertions(+), 18 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/gen6_constant_state.c 
> b/src/mesa/drivers/dri/i965/gen6_constant_state.c
> index 6b5d2e66cc9..acf7454cef5 100644
> --- a/src/mesa/drivers/dri/i965/gen6_constant_state.c
> +++ b/src/mesa/drivers/dri/i965/gen6_constant_state.c
> @@ -130,9 +130,14 @@ gen6_upload_push_constants(struct brw_context *brw,
>     const struct gen_device_info *devinfo = &brw->screen->devinfo;
>     struct gl_context *ctx = &brw->ctx;
>  
> -   _mesa_shader_write_subroutine_indices(ctx, stage_state->stage);
> +   bool active = prog_data &&
> +      (stage_state->stage != MESA_SHADER_TESS_CTRL ||
> +       brw->programs[MESA_SHADER_TESS_EVAL]);

Had to read this condition a few times but it looks to do exactly what you
wrote in the commit. Series:

Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com>

>  
> -   if (prog_data->nr_params == 0) {
> +   if (active)
> +      _mesa_shader_write_subroutine_indices(ctx, stage_state->stage);
> +
> +   if (!active || prog_data->nr_params == 0) {
>        stage_state->push_const_size = 0;
>     } else {
>        /* Updates the ParamaterValues[i] pointers for all parameters of the
> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c 
> b/src/mesa/drivers/dri/i965/genX_state_upload.c
> index f2b3e4570b2..4ccfd489191 100644
> --- a/src/mesa/drivers/dri/i965/genX_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> @@ -3165,12 +3165,10 @@ genX(upload_gs_push_constants)(struct brw_context 
> *brw)
>     /* BRW_NEW_GEOMETRY_PROGRAM */
>     const struct gl_program *gp = brw->programs[MESA_SHADER_GEOMETRY];
>  
> -   if (gp) {
> -      /* BRW_NEW_GS_PROG_DATA */
> -      struct brw_stage_prog_data *prog_data = brw->gs.base.prog_data;
> +   /* BRW_NEW_GS_PROG_DATA */
> +   struct brw_stage_prog_data *prog_data = brw->gs.base.prog_data;
>  
> -      gen6_upload_push_constants(brw, gp, prog_data, stage_state);
> -   }
> +   gen6_upload_push_constants(brw, gp, prog_data, stage_state);
>  }
>  
>  static const struct brw_tracked_state genX(gs_push_constants) = {
> @@ -4027,11 +4025,9 @@ genX(upload_tes_push_constants)(struct brw_context 
> *brw)
>     /* BRW_NEW_TESS_PROGRAMS */
>     const struct gl_program *tep = brw->programs[MESA_SHADER_TESS_EVAL];
>  
> -   if (tep) {
> -      /* BRW_NEW_TES_PROG_DATA */
> -      const struct brw_stage_prog_data *prog_data = brw->tes.base.prog_data;
> -      gen6_upload_push_constants(brw, tep, prog_data, stage_state);
> -   }
> +   /* BRW_NEW_TES_PROG_DATA */
> +   const struct brw_stage_prog_data *prog_data = brw->tes.base.prog_data;
> +   gen6_upload_push_constants(brw, tep, prog_data, stage_state);
>  }
>  
>  static const struct brw_tracked_state genX(tes_push_constants) = {
> @@ -4051,14 +4047,11 @@ genX(upload_tcs_push_constants)(struct brw_context 
> *brw)
>     struct brw_stage_state *stage_state = &brw->tcs.base;
>     /* BRW_NEW_TESS_PROGRAMS */
>     const struct gl_program *tcp = brw->programs[MESA_SHADER_TESS_CTRL];
> -   bool active = brw->programs[MESA_SHADER_TESS_EVAL];
>  
> -   if (active) {
> -      /* BRW_NEW_TCS_PROG_DATA */
> -      const struct brw_stage_prog_data *prog_data = brw->tcs.base.prog_data;
> +   /* BRW_NEW_TCS_PROG_DATA */
> +   const struct brw_stage_prog_data *prog_data = brw->tcs.base.prog_data;
>  
> -      gen6_upload_push_constants(brw, tcp, prog_data, stage_state);
> -   }
> +   gen6_upload_push_constants(brw, tcp, prog_data, stage_state);
>  }
>  
>  static const struct brw_tracked_state genX(tcs_push_constants) = {
> -- 
> 2.14.2
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to