[Mesa-dev] [PATCH 09/17] st/mesa: add a second pipeline for compute

Ilia Mirkin imirkin at alum.mit.edu
Mon Jan 25 06:27:30 PST 2016


On Sun, Jan 24, 2016 at 4:09 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Compute needs a new and different validation path.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/gallium/include/state_tracker/st_api.h |  8 +++++
>  src/mesa/state_tracker/st_atom.c           | 48 ++++++++++++++++++++++++------
>  src/mesa/state_tracker/st_atom.h           |  4 ++-
>  src/mesa/state_tracker/st_cb_bitmap.c      |  2 +-
>  src/mesa/state_tracker/st_cb_clear.c       |  2 +-
>  src/mesa/state_tracker/st_cb_drawpixels.c  |  4 +--
>  src/mesa/state_tracker/st_cb_drawtex.c     |  2 +-
>  src/mesa/state_tracker/st_cb_msaa.c        |  2 +-
>  src/mesa/state_tracker/st_cb_rasterpos.c   |  2 +-
>  src/mesa/state_tracker/st_cb_readpixels.c  |  2 +-
>  src/mesa/state_tracker/st_context.c        |  6 ++++
>  src/mesa/state_tracker/st_context.h        |  1 +
>  src/mesa/state_tracker/st_draw.c           |  4 +--
>  src/mesa/state_tracker/st_draw_feedback.c  |  2 +-
>  14 files changed, 68 insertions(+), 21 deletions(-)
>
> diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h
> index 356863d..3f91d0b 100644
> --- a/src/gallium/include/state_tracker/st_api.h
> +++ b/src/gallium/include/state_tracker/st_api.h
> @@ -156,6 +156,14 @@ enum st_context_resource_type {
>  };
>
>  /**
> + * Enumeration of state tracker pipelines.
> + */
> +enum st_pipeline {
> +   ST_PIPELINE_RENDER,
> +   ST_PIPELINE_COMPUTE,
> +};
> +
> +/**
>   * Flush flags.
>   */
>  #define ST_FLUSH_FRONT                    (1 << 0)
> diff --git a/src/mesa/state_tracker/st_atom.c b/src/mesa/state_tracker/st_atom.c
> index 4b89ade..f989f47 100644
> --- a/src/mesa/state_tracker/st_atom.c
> +++ b/src/mesa/state_tracker/st_atom.c
> @@ -38,9 +38,9 @@
>
>
>  /**
> - * This is used to initialize st->atoms[].
> + * This is used to initialize st->render_atoms[].
>   */
> -static const struct st_tracked_state *atoms[] =
> +static const struct st_tracked_state *render_atoms[] =
>  {
>     &st_update_depth_stencil_alpha,
>     &st_update_clip,
> @@ -93,6 +93,15 @@ static const struct st_tracked_state *atoms[] =
>  };
>
>
> +/**
> + * This is used to initialize st->compute_atoms[].
> + */
> +static const struct st_tracked_state *compute_atoms[] =
> +{
> +   /* will be updated in the next commit */
> +};
> +
> +
>  void st_init_atoms( struct st_context *st )
>  {
>     /* no-op */
> @@ -178,20 +187,41 @@ static void check_attrib_edgeflag(struct st_context *st)
>   * Update all derived state:
>   */
>
> -void st_validate_state( struct st_context *st )
> +void st_validate_state( struct st_context *st, enum st_pipeline pipeline )
>  {
> -   struct st_state_flags *state = &st->dirty;
> +   const struct st_tracked_state **atoms;
> +   struct st_state_flags *state;
> +   GLuint num_atoms;
>     GLuint i;
>
> +   /* Get pipeline state. */
> +   switch (pipeline) {
> +    case ST_PIPELINE_RENDER:
> +      atoms     = render_atoms;
> +      num_atoms = ARRAY_SIZE(render_atoms);
> +      state     = &st->dirty;
> +      break;
> +   case ST_PIPELINE_COMPUTE:
> +      atoms     = compute_atoms;
> +      num_atoms = ARRAY_SIZE(compute_atoms);
> +      state     = &st->dirty_cp;
> +      break;
> +   default:
> +      assert(!"Invalid pipeline specified!");

Either mark this unreachable (i.e. unreachable("Invalid pipeline
specified") ) or move this above the RENDER case so that it would fall
through in opt builds and just validate the render pipeline.

  -ilia


More information about the mesa-dev mailing list