[Mesa-dev] [PATCH v2] anv: flush pipeline before query result copies

Lionel Landwerlin lionel.g.landwerlin at intel.com
Thu Nov 29 22:12:27 UTC 2018


On 29/11/2018 16:58, Jason Ekstrand wrote:
> On Thu, Nov 29, 2018 at 10:45 AM Lionel Landwerlin 
> <lionel.g.landwerlin at intel.com <mailto:lionel.g.landwerlin at intel.com>> 
> wrote:
>
>     Pipeline barriers inserted through vkCmdPipelineBarrier() should be
>     taken into account when copying results.
>
>     In the particular bug below, the results of the
>     vkCmdCopyQueryPoolResults() command was being overwritten by the
>     preceding vkCmdCopyBuffer() with a same destination buffer. This is
>     because we copy the buffers using the 3D pipeline whereas we copy the
>     query results using the command streamer. Those work in parallel
>     unless synchronized.
>
>     v2: Unconditionally flush the pipeline before copying the results
>         (Jason)
>
>     Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com
>     <mailto:lionel.g.landwerlin at intel.com>>
>     Suggested-by: Jason Ekstrand <jason at jlekstrand.net
>     <mailto:jason at jlekstrand.net>>
>     Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108894
>     Cc: mesa-stable at lists.freedesktop.org
>     <mailto:mesa-stable at lists.freedesktop.org>
>     ---
>      src/intel/vulkan/genX_query.c | 9 ++++-----
>      1 file changed, 4 insertions(+), 5 deletions(-)
>
>     diff --git a/src/intel/vulkan/genX_query.c
>     b/src/intel/vulkan/genX_query.c
>     index ce8757f2643..f1472c0d570 100644
>     --- a/src/intel/vulkan/genX_query.c
>     +++ b/src/intel/vulkan/genX_query.c
>     @@ -729,11 +729,10 @@ void genX(CmdCopyQueryPoolResults)(
>         ANV_FROM_HANDLE(anv_query_pool, pool, queryPool);
>         ANV_FROM_HANDLE(anv_buffer, buffer, destBuffer);
>
>     -   if (flags & VK_QUERY_RESULT_WAIT_BIT) {
>     -      anv_batch_emit(&cmd_buffer->batch, GENX(PIPE_CONTROL), pc) {
>     -         pc.CommandStreamerStallEnable = true;
>     -         pc.StallAtPixelScoreboard     = true;
>     -      }
>     +   if (flags & VK_QUERY_RESULT_WAIT_BIT ||
>
>
> That bare & should have some parens.  With that,
>
> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net 
> <mailto:jason at jlekstrand.net>>


Thanks, pushed with your requested change.


-

Lionel


>     +       (cmd_buffer->state.pending_pipe_bits & ANV_PIPE_FLUSH_BITS)) {
>     +      cmd_buffer->state.pending_pipe_bits |= ANV_PIPE_CS_STALL_BIT;
>     +      genX(cmd_buffer_apply_pipe_flushes)(cmd_buffer);
>         }
>
>         struct anv_address dest_addr =
>     anv_address_add(buffer->address, destOffset);
>     -- 
>     2.20.0.rc1
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181129/019258c4/attachment.html>


More information about the mesa-dev mailing list