[Mesa-dev] [PATCH v3 2/3] i965: Ensure FS execution in presence of atomic buffers
Francisco Jerez
currojerez at riseup.net
Mon Dec 21 09:24:09 PST 2015
Iago Toral Quiroga <itoral at igalia.com> writes:
> On Haswell we need to set the UAV_ONLY WM state bit when there are no colour
> or depth buffer writes and on all hardware we should set the early
> depth/stencil control field to PSEXEC unless early fragment tests are enabled
> to make sure that the fragment shader is executed regardless of whether
> per-fragment tests pass or not as the spec requires.
>
> So far we have been doing this for images only, but we should apply the same
> treatment to all side effectful scenarios. Suggested by Curro.
I think it would be useful to clarify here that this is not strictly
required for compliance with the original ARB_shader_atomic_counters
extension, it's only necessary to get the execution semantics specified
in GL4.2+ right.
> ---
> src/mesa/drivers/dri/i965/gen7_wm_state.c | 9 +++++----
> src/mesa/drivers/dri/i965/gen8_ps_state.c | 2 +-
> 2 files changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/gen7_wm_state.c b/src/mesa/drivers/dri/i965/gen7_wm_state.c
> index a6d1028..74a2cf3 100644
> --- a/src/mesa/drivers/dri/i965/gen7_wm_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_wm_state.c
> @@ -78,9 +78,10 @@ upload_wm_state(struct brw_context *brw)
> }
>
> /* _NEW_BUFFERS | _NEW_COLOR */
> + bool active_fs_has_side_effects =
If you mark this const and change the commit message as suggested above
the series is:
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> + _mesa_active_fragment_shader_has_side_effects(&brw->ctx);
> if (brw_color_buffer_write_enabled(brw) || writes_depth ||
> - _mesa_active_fragment_shader_has_side_effects(&brw->ctx) ||
> - dw1 & GEN7_WM_KILL_ENABLE) {
> + active_fs_has_side_effects || dw1 & GEN7_WM_KILL_ENABLE) {
> dw1 |= GEN7_WM_DISPATCH_ENABLE;
> }
> if (multisampled_fbo) {
> @@ -106,7 +107,7 @@ upload_wm_state(struct brw_context *brw)
> /* BRW_NEW_FS_PROG_DATA */
> if (prog_data->early_fragment_tests)
> dw1 |= GEN7_WM_EARLY_DS_CONTROL_PREPS;
> - else if (prog_data->base.nr_image_params)
> + else if (active_fs_has_side_effects)
> dw1 |= GEN7_WM_EARLY_DS_CONTROL_PSEXEC;
>
> /* The "UAV access enable" bits are unnecessary on HSW because they only
> @@ -119,7 +120,7 @@ upload_wm_state(struct brw_context *brw)
> */
> if (brw->is_haswell &&
> !(brw_color_buffer_write_enabled(brw) || writes_depth) &&
> - prog_data->base.nr_image_params)
> + active_fs_has_side_effects)
> dw2 |= HSW_WM_UAV_ONLY;
>
> BEGIN_BATCH(3);
> diff --git a/src/mesa/drivers/dri/i965/gen8_ps_state.c b/src/mesa/drivers/dri/i965/gen8_ps_state.c
> index 3cc8c68..74cdcef 100644
> --- a/src/mesa/drivers/dri/i965/gen8_ps_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_ps_state.c
> @@ -156,7 +156,7 @@ upload_wm_state(struct brw_context *brw)
> /* BRW_NEW_FS_PROG_DATA */
> if (brw->wm.prog_data->early_fragment_tests)
> dw1 |= GEN7_WM_EARLY_DS_CONTROL_PREPS;
> - else if (brw->wm.prog_data->base.nr_image_params)
> + else if (_mesa_active_fragment_shader_has_side_effects(&brw->ctx))
> dw1 |= GEN7_WM_EARLY_DS_CONTROL_PSEXEC;
>
> BEGIN_BATCH(2);
> --
> 1.9.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151221/c11c37d0/attachment-0001.sig>
More information about the mesa-dev
mailing list