[Mesa-dev] [PATCH 2/2] i965: Implement compute sampler state atom.

Lofstedt, Marta marta.lofstedt at intel.com
Tue Jan 19 04:16:47 PST 2016


Reviewed-by: Marta Lofstedt <marta.lofstedt at intel.com>

> -----Original Message-----
> From: Francisco Jerez [mailto:currojerez at riseup.net]
> Sent: Monday, January 18, 2016 9:37 PM
> To: mesa-dev at lists.freedesktop.org
> Cc: Lofstedt, Marta; Justen, Jordan L
> Subject: [PATCH 2/2] i965: Implement compute sampler state atom.
> 
> Fixes a number of GLES31 CTS failures and hangs on various hardware:
> 
>  ES31-CTS.texture_gather.plain-gather-depth-2d
>  ES31-CTS.texture_gather.plain-gather-depth-2darray
>  ES31-CTS.texture_gather.plain-gather-depth-cube
>  ES31-CTS.texture_gather.offset-gather-depth-2d
>  ES31-CTS.texture_gather.offset-gather-depth-2darray
>  ES31-
> CTS.layout_binding.sampler2D_layout_binding_texture_ComputeShader
>  ES31-
> CTS.layout_binding.sampler2DArray_layout_binding_texture_ComputeShad
> er
>  ES31-CTS.explicit_uniform_location.uniform-loc-types-samplers
>  ES31-CTS.compute_shader.resources-texture
> 
> Some of them were actually passing by luck on some generations even
> though we weren't uploading sampler state tables explicitly for the compute
> stage, most likely because they relied on the cached sampler state left from
> previous rendering to be close enough.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92589
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93312
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93325
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93407
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93725
> Reported-by: Marta Lofstedt <marta.lofstedt at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_context.h       |  2 +-
>  src/mesa/drivers/dri/i965/brw_sampler_state.c | 20
> ++++++++++++++++++++
>  src/mesa/drivers/dri/i965/brw_state.h         |  1 +
>  src/mesa/drivers/dri/i965/brw_state_upload.c  |  2 ++
>  4 files changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h
> b/src/mesa/drivers/dri/i965/brw_context.h
> index b80db00..2a29dfe 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -1264,7 +1264,7 @@ struct brw_context
> 
>     int num_atoms[BRW_NUM_PIPELINES];
>     const struct brw_tracked_state render_atoms[76];
> -   const struct brw_tracked_state compute_atoms[10];
> +   const struct brw_tracked_state compute_atoms[11];
> 
>     /* If (INTEL_DEBUG & DEBUG_BATCH) */
>     struct {
> diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c
> b/src/mesa/drivers/dri/i965/brw_sampler_state.c
> index 24798a5..c20a028 100644
> --- a/src/mesa/drivers/dri/i965/brw_sampler_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_sampler_state.c
> @@ -693,3 +693,23 @@ const struct brw_tracked_state brw_tes_samplers =
> {
>     },
>     .emit = brw_upload_tes_samplers,
>  };
> +
> +static void
> +brw_upload_cs_samplers(struct brw_context *brw) {
> +   /* BRW_NEW_COMPUTE_PROGRAM */
> +   struct gl_program *cs = (struct gl_program *) brw->compute_program;
> +   if (!cs)
> +      return;
> +
> +   brw_upload_sampler_state_table(brw, cs, &brw->cs.base); }
> +
> +const struct brw_tracked_state brw_cs_samplers = {
> +   .dirty = {
> +      .mesa = _NEW_TEXTURE,
> +      .brw = BRW_NEW_BATCH |
> +             BRW_NEW_COMPUTE_PROGRAM,
> +   },
> +   .emit = brw_upload_cs_samplers,
> +};
> diff --git a/src/mesa/drivers/dri/i965/brw_state.h
> b/src/mesa/drivers/dri/i965/brw_state.h
> index 7d61b7c..f44ccd6 100644
> --- a/src/mesa/drivers/dri/i965/brw_state.h
> +++ b/src/mesa/drivers/dri/i965/brw_state.h
> @@ -75,6 +75,7 @@ extern const struct brw_tracked_state
> brw_vs_samplers;  extern const struct brw_tracked_state
> brw_tcs_samplers;  extern const struct brw_tracked_state
> brw_tes_samplers;  extern const struct brw_tracked_state
> brw_gs_samplers;
> +extern const struct brw_tracked_state brw_cs_samplers;
>  extern const struct brw_tracked_state brw_vs_ubo_surfaces;  extern const
> struct brw_tracked_state brw_vs_abo_surfaces;  extern const struct
> brw_tracked_state brw_vs_image_surfaces; diff --git
> a/src/mesa/drivers/dri/i965/brw_state_upload.c
> b/src/mesa/drivers/dri/i965/brw_state_upload.c
> index 876e130..ee75ca8 100644
> --- a/src/mesa/drivers/dri/i965/brw_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
> @@ -282,6 +282,7 @@ static const struct brw_tracked_state
> *gen7_compute_atoms[] =
>     &brw_cs_abo_surfaces,
>     &brw_texture_surfaces,
>     &brw_cs_work_groups_surface,
> +   &brw_cs_samplers,
>     &brw_cs_state,
>  };
> 
> @@ -396,6 +397,7 @@ static const struct brw_tracked_state
> *gen8_compute_atoms[] =
>     &brw_cs_abo_surfaces,
>     &brw_texture_surfaces,
>     &brw_cs_work_groups_surface,
> +   &brw_cs_samplers,
>     &brw_cs_state,
>  };
> 
> --
> 2.7.0



More information about the mesa-dev mailing list