[Mesa-dev] [PATCH 02/51] i965: Order write of query availablity with earlier writes
Francisco Jerez
currojerez at riseup.net
Tue Mar 7 02:26:39 UTC 2017
Chris Wilson <chris at chris-wilson.co.uk> writes:
> Currently we signal the availabilty of the query result using an
> unordered pipe-control write. As it is unordered, it may be executed
> before the write of the query result itself - and so an observer may
> read the query result too early. Fix this by requesting that the write
> of the availablity flag is ordered after earlier pipe control writes.
>
> Testcase: piglit/arb_query_buffer_object-qbo/*async*
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> src/mesa/drivers/dri/i965/gen6_queryobj.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/gen6_queryobj.c b/src/mesa/drivers/dri/i965/gen6_queryobj.c
> index bbd3c44fb0..f6b90f77ea 100644
> --- a/src/mesa/drivers/dri/i965/gen6_queryobj.c
> +++ b/src/mesa/drivers/dri/i965/gen6_queryobj.c
> @@ -60,8 +60,16 @@ set_query_availability(struct brw_context *brw, struct brw_query_object *query,
> */
> if (brw->ctx.Extensions.ARB_query_buffer_object &&
> brw_is_query_pipelined(query)) {
> - brw_emit_pipe_control_write(brw,
> - PIPE_CONTROL_WRITE_IMMEDIATE,
> + unsigned flags = PIPE_CONTROL_WRITE_IMMEDIATE;
> +
> + if (available)
> + /* Order available *after* the query results */
> + flags |= PIPE_CONTROL_FLUSH_ENABLE;
> + else
> + /* Make it unavailable *before* any pipelined reads */
> + flags |= PIPE_CONTROL_CS_STALL;
AFAIUI this may not actually guarantee that the immediate write will
have landed in memory by the time the CS reaches a subsequent pipeline
read, it only guarantees that the sync operation will have completed by
that time, but not necessarily the post-sync operation used here to
update the availability flag. I believe we want a separate PIPE_CONTROL
command with CS Stall+Pipe Control Flush set, probably somewhere close
to the pipelined read of the availability flag.
> +
> + brw_emit_pipe_control_write(brw, flags,
> query->bo, 2 * sizeof(uint64_t),
> available, 0);
> }
> --
> 2.11.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170306/7187f744/attachment.sig>
More information about the mesa-dev
mailing list