radv: fix resetting the pool for timestamp queries
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 4 Oct 2018 08:37:09 +0000 (10:37 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 4 Oct 2018 08:56:25 +0000 (10:56 +0200)
Since the driver no longer uses the availability bit for
timestamp queries it shouldn't reset it. Instead, it should
reset the query values to UINT32_MAX. This fixes VM faults.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108164
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Tested-by: Józef Kucia <joseph.kucia@gmail.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_query.c

index d607d24cfc6b361826e80bc0190bd0f89f0f32f9..41af16ba768ba025c961e659150c52f38ac2ab6c 100644 (file)
@@ -1088,20 +1088,18 @@ void radv_CmdResetQueryPool(
 {
        RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
        RADV_FROM_HANDLE(radv_query_pool, pool, queryPool);
+       uint32_t value = pool->type == VK_QUERY_TYPE_TIMESTAMP
+                        ? TIMESTAMP_NOT_READY : 0;
        uint32_t flush_bits = 0;
 
        flush_bits |= radv_fill_buffer(cmd_buffer, pool->bo,
                                       firstQuery * pool->stride,
-                                      queryCount * pool->stride, 0);
-
-       if (pool->type == VK_QUERY_TYPE_TIMESTAMP ||
-           pool->type == VK_QUERY_TYPE_PIPELINE_STATISTICS) {
-               uint32_t value = pool->type == VK_QUERY_TYPE_TIMESTAMP
-                                ? TIMESTAMP_NOT_READY : 0;
+                                      queryCount * pool->stride, value);
 
+       if (pool->type == VK_QUERY_TYPE_PIPELINE_STATISTICS) {
                flush_bits |= radv_fill_buffer(cmd_buffer, pool->bo,
                                               pool->availability_offset + firstQuery * 4,
-                                              queryCount * 4, value);
+                                              queryCount * 4, 0);
        }
 
        if (flush_bits) {