[Mesa-dev] [PATCH] i965: Upload invariant state once at the start of the batch on Gen4-5.
Jason Ekstrand
jason at jlekstrand.net
Fri Nov 17 00:42:58 UTC 2017
Sounds like a plan.
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
On Thu, Nov 16, 2017 at 12:37 AM, Kenneth Graunke <kenneth at whitecape.org>
wrote:
> We want to emit invariant state at the start of a render batch. In the
> past, this more or less happened: a new batch flagged BRW_NEW_CONTEXT
> (because we don't have hardware contexts), which triggered the
> brw_invariant_state atom. So, it would be emitted before any 3D
> drawing. (Technically, there might be some BLT commands in the batch
> because Gen4-5 have a single combined render/BLT ring, but that should
> be harmless).
>
> With the advent of BLORP, this broke. The first item in a batch might
> be a BLORP operation, which bypasses the normal draw upload path. So,
> we need to ensure invariant state happens first. To do that, we just
> upload it when creating a new batch. On Gen6+ we'd need to worry about
> whether it's a RENDER or BLT batch, but because we have a combined ring,
> this approach should work fine on Gen4-5.
>
> Seems to fix GPU hangs when playing hardware accelerated video with
> mpv -hwdec=vaapi on Ironlake.
>
> Cc: mesa-stable at lists.freedesktop.org
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103529
> ---
> src/mesa/drivers/dri/i965/brw_misc_state.c | 9 ---------
> src/mesa/drivers/dri/i965/brw_state.h | 1 -
> src/mesa/drivers/dri/i965/genX_state_upload.c | 2 --
> src/mesa/drivers/dri/i965/intel_batchbuffer.c | 4 +++-
> 4 files changed, 3 insertions(+), 13 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c
> b/src/mesa/drivers/dri/i965/brw_misc_state.c
> index fd96485d574..94d5c9783db 100644
> --- a/src/mesa/drivers/dri/i965/brw_misc_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
> @@ -560,15 +560,6 @@ brw_upload_invariant_state(struct brw_context *brw)
> ADVANCE_BATCH();
> }
>
> -const struct brw_tracked_state brw_invariant_state = {
> - .dirty = {
> - .mesa = 0,
> - .brw = BRW_NEW_BLORP |
> - BRW_NEW_CONTEXT,
> - },
> - .emit = brw_upload_invariant_state
> -};
> -
> /**
> * Define the base addresses which some state is referenced from.
> *
> diff --git a/src/mesa/drivers/dri/i965/brw_state.h
> b/src/mesa/drivers/dri/i965/brw_state.h
> index cf13eca3438..ad508950f78 100644
> --- a/src/mesa/drivers/dri/i965/brw_state.h
> +++ b/src/mesa/drivers/dri/i965/brw_state.h
> @@ -51,7 +51,6 @@ 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;
> extern const struct brw_tracked_state brw_binding_table_pointers;
> extern const struct brw_tracked_state brw_depthbuffer;
> extern const struct brw_tracked_state brw_recalculate_urb_fence;
> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c
> b/src/mesa/drivers/dri/i965/genX_state_upload.c
> index d4b0de850c9..112f48181b0 100644
> --- a/src/mesa/drivers/dri/i965/genX_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> @@ -5366,8 +5366,6 @@ genX(init_atoms)(struct brw_context *brw)
>
> /* Command packets:
> */
> - &brw_invariant_state,
> -
> &brw_binding_table_pointers,
> &genX(blend_constant_color),
>
> diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> index bbe13f34cef..3412b1d0a5f 100644
> --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
> @@ -601,8 +601,10 @@ brw_new_batch(struct brw_context *brw)
> * would otherwise be stored in the context (which for all intents and
> * purposes means everything).
> */
> - if (brw->hw_ctx == 0)
> + if (brw->hw_ctx == 0) {
> brw->ctx.NewDriverState |= BRW_NEW_CONTEXT;
> + brw_upload_invariant_state(brw);
> + }
>
> brw->ctx.NewDriverState |= BRW_NEW_BATCH;
>
> --
> 2.15.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171116/afc6234d/attachment-0001.html>
More information about the mesa-dev
mailing list