[Mesa-dev] [PATCH] i965: Setup pull constant state for compute programs

Iago Toral itoral at igalia.com
Thu Oct 29 02:06:08 PDT 2015


On Thu, 2015-10-29 at 00:49 -0700, Jordan Justen wrote:
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_context.h      |  2 +-
>  src/mesa/drivers/dri/i965/brw_state.h        |  1 +
>  src/mesa/drivers/dri/i965/brw_state_upload.c |  2 ++
>  src/mesa/drivers/dri/i965/gen7_cs_state.c    | 32 ++++++++++++++++++++++++++++
>  4 files changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> index 18c361e..887b57b 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -1177,7 +1177,7 @@ struct brw_context
>  
>     int num_atoms[BRW_NUM_PIPELINES];
>     const struct brw_tracked_state render_atoms[60];
> -   const struct brw_tracked_state compute_atoms[8];
> +   const struct brw_tracked_state compute_atoms[9];
>  
>     /* If (INTEL_DEBUG & DEBUG_BATCH) */
>     struct {
> diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h
> index dc2b941..2c7c2f3 100644
> --- a/src/mesa/drivers/dri/i965/brw_state.h
> +++ b/src/mesa/drivers/dri/i965/brw_state.h
> @@ -49,6 +49,7 @@ extern const struct brw_tracked_state brw_clip_unit;
>  extern const struct brw_tracked_state brw_vs_pull_constants;
>  extern const struct brw_tracked_state brw_gs_pull_constants;
>  extern const struct brw_tracked_state brw_wm_pull_constants;
> +extern const struct brw_tracked_state brw_cs_pull_constants;
>  extern const struct brw_tracked_state brw_constant_buffer;
>  extern const struct brw_tracked_state brw_curbe_offsets;
>  extern const struct brw_tracked_state brw_invariant_state;
> diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c
> index 79b8301..0344b8a 100644
> --- a/src/mesa/drivers/dri/i965/brw_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
> @@ -259,6 +259,7 @@ static const struct brw_tracked_state *gen7_compute_atoms[] =
>     &brw_state_base_address,
>     &brw_cs_image_surfaces,
>     &gen7_cs_push_constants,
> +   &brw_cs_pull_constants,
>     &brw_cs_ubo_surfaces,
>     &brw_cs_abo_surfaces,
>     &brw_texture_surfaces,
> @@ -353,6 +354,7 @@ static const struct brw_tracked_state *gen8_compute_atoms[] =
>     &gen8_state_base_address,
>     &brw_cs_image_surfaces,
>     &gen7_cs_push_constants,
> +   &brw_cs_pull_constants,
>     &brw_cs_ubo_surfaces,
>     &brw_cs_abo_surfaces,
>     &brw_texture_surfaces,
> diff --git a/src/mesa/drivers/dri/i965/gen7_cs_state.c b/src/mesa/drivers/dri/i965/gen7_cs_state.c
> index 6aeb0cb..da1d05f 100644
> --- a/src/mesa/drivers/dri/i965/gen7_cs_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_cs_state.c
> @@ -29,6 +29,7 @@
>  #include "brw_shader.h"
>  #include "intel_mipmap_tree.h"
>  #include "intel_batchbuffer.h"
> +#include "intel_buffer_objects.h"

I think you don't need this include. Other than that:

Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>

>  #include "brw_state.h"
>  
>  static unsigned
> @@ -285,3 +286,34 @@ const struct brw_tracked_state gen7_cs_push_constants = {
>     },
>     .emit = gen7_upload_cs_push_constants,
>  };
> +
> +/**
> + * Creates a new CS constant buffer reflecting the current CS program's
> + * constants, if needed by the CS program.
> + */
> +static void
> +brw_upload_cs_pull_constants(struct brw_context *brw)
> +{
> +   struct brw_stage_state *stage_state = &brw->cs.base;
> +
> +   /* BRW_NEW_COMPUTE_PROGRAM */
> +   struct brw_compute_program *cp =
> +      (struct brw_compute_program *) brw->compute_program;
> +
> +   /* BRW_NEW_CS_PROG_DATA */
> +   const struct brw_stage_prog_data *prog_data = &brw->cs.prog_data->base;
> +
> +   /* _NEW_PROGRAM_CONSTANTS */
> +   brw_upload_pull_constants(brw, BRW_NEW_SURFACES, &cp->program.Base,
> +                             stage_state, prog_data, true);
> +}
> +
> +const struct brw_tracked_state brw_cs_pull_constants = {
> +   .dirty = {
> +      .mesa = _NEW_PROGRAM_CONSTANTS,
> +      .brw = BRW_NEW_BATCH |
> +             BRW_NEW_COMPUTE_PROGRAM |
> +             BRW_NEW_CS_PROG_DATA,
> +   },
> +   .emit = brw_upload_cs_pull_constants,
> +};




More information about the mesa-dev mailing list