On 12/5/18 11:15 AM, Alex Smith wrote:
Thanks. Though this fixes the 100% repro hang, I think your first patch
is still needed as well to handle getting 0xffffffff in the low 32 bits.
Yeah, it's still needed. Though I think it should be enough to wait on
the high 32bits as suggested by Bas.
On Wed, 5 Dec 2018 at 10:04, Samuel Pitoiset <samuel.pitoi...@gmail.com
<mailto:samuel.pitoi...@gmail.com>> wrote:
Yes, this is correct, indeed.
The issue wasn't present because we used EOP events before removing the
availability bit.
Btw, just noticed that we should reset pending_reset_query directly in
si_emit_cache_flush() to reduce the number of stalls. I will send a
patch.
Also note that fill CP DMA operations are currently always sync'ed,
while CP DMA copies are not. I plan to change this at some point.
Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com
<mailto:samuel.pitoi...@gmail.com>>
On 12/5/18 10:52 AM, Alex Smith wrote:
> As done for vkCmdBeginQuery() already. Prevents timestamps from being
> overwritten by previous vkCmdResetQueryPool() calls if the shader
path
> was used to do the reset.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108925
> Fixes: a41e2e9cf5 ("radv: allow to use a compute shader for
resetting the query pool")
> Signed-off-by: Alex Smith <asm...@feralinteractive.com
<mailto:asm...@feralinteractive.com>>
> ---
> src/amd/vulkan/radv_query.c | 30 +++++++++++++++++++-----------
> 1 file changed, 19 insertions(+), 11 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_query.c
b/src/amd/vulkan/radv_query.c
> index 550abe307a..e226bcef6a 100644
> --- a/src/amd/vulkan/radv_query.c
> +++ b/src/amd/vulkan/radv_query.c
> @@ -1436,6 +1436,22 @@ static unsigned
event_type_for_stream(unsigned stream)
> }
> }
>
> +static void emit_query_flush(struct radv_cmd_buffer *cmd_buffer,
> + struct radv_query_pool *pool)
> +{
> + if (cmd_buffer->pending_reset_query) {
> + if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
> + /* Only need to flush caches if the query
pool size is
> + * large enough to be resetted using the
compute shader
> + * path. Small pools don't need any cache
flushes
> + * because we use a CP dma clear.
> + */
> + si_emit_cache_flush(cmd_buffer);
> + cmd_buffer->pending_reset_query = false;
> + }
> + }
> +}
> +
> static void emit_begin_query(struct radv_cmd_buffer *cmd_buffer,
> uint64_t va,
> VkQueryType query_type,
> @@ -1582,17 +1598,7 @@ void radv_CmdBeginQueryIndexedEXT(
>
> radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
>
> - if (cmd_buffer->pending_reset_query) {
> - if (pool->size >= RADV_BUFFER_OPS_CS_THRESHOLD) {
> - /* Only need to flush caches if the query
pool size is
> - * large enough to be resetted using the
compute shader
> - * path. Small pools don't need any cache
flushes
> - * because we use a CP dma clear.
> - */
> - si_emit_cache_flush(cmd_buffer);
> - cmd_buffer->pending_reset_query = false;
> - }
> - }
> + emit_query_flush(cmd_buffer, pool);
>
> va += pool->stride * query;
>
> @@ -1669,6 +1675,8 @@ void radv_CmdWriteTimestamp(
>
> radv_cs_add_buffer(cmd_buffer->device->ws, cs, pool->bo);
>
> + emit_query_flush(cmd_buffer, pool);
> +
> int num_queries = 1;
> if (cmd_buffer->state.subpass &&
cmd_buffer->state.subpass->view_mask)
> num_queries =
util_bitcount(cmd_buffer->state.subpass->view_mask);
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev