lavapipe: add host query reset
authorDave Airlie <airlied@redhat.com>
Sun, 14 Mar 2021 22:10:36 +0000 (08:10 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 15 Mar 2021 20:50:37 +0000 (06:50 +1000)
This just resets the queries on the host size.

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9594>

docs/features.txt
src/gallium/frontends/lavapipe/lvp_device.c
src/gallium/frontends/lavapipe/lvp_query.c

index de421cb..0747e5b 100644 (file)
@@ -466,7 +466,7 @@ Vulkan 1.2 -- all DONE: anv
   VK_KHR_uniform_buffer_standard_layout                 DONE (anv, lvp, radv)
   VK_KHR_vulkan_memory_model                            DONE (anv, radv)
   VK_EXT_descriptor_indexing                            DONE (anv/gen9+, radv)
-  VK_EXT_host_query_reset                               DONE (anv, radv, tu)
+  VK_EXT_host_query_reset                               DONE (anv, lvp, radv, tu)
   VK_EXT_sampler_filter_minmax                          DONE (anv/gen9+, lvp, radv, tu)
   VK_EXT_scalar_block_layout                            DONE (anv, lvp, radv/gfx7+)
   VK_EXT_separate_stencil_usage                         DONE (anv)
index 8457ac1..6c17d20 100644 (file)
@@ -120,6 +120,7 @@ static const struct vk_device_extension_table lvp_device_extensions_supported =
    .EXT_calibrated_timestamps             = true,
    .EXT_conditional_rendering             = true,
    .EXT_extended_dynamic_state            = true,
+   .EXT_host_query_reset                  = true,
    .EXT_index_type_uint8                  = true,
    .EXT_post_depth_coverage               = true,
    .EXT_private_data                      = true,
@@ -518,6 +519,12 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFeatures2(
          features->scalarBlockLayout = true;
          break;
       }
+      case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT: {
+         VkPhysicalDeviceHostQueryResetFeaturesEXT *features =
+            (VkPhysicalDeviceHostQueryResetFeaturesEXT *)ext;
+         features->hostQueryReset = true;
+         break;
+      }
       default:
          break;
       }
index 7bf4346..b0bd1f2 100644 (file)
@@ -193,3 +193,22 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_GetQueryPoolResults(
    }
    return vk_result;
 }
+
+VKAPI_ATTR void VKAPI_CALL lvp_ResetQueryPool(
+   VkDevice                                    _device,
+   VkQueryPool                                 queryPool,
+   uint32_t                                    firstQuery,
+   uint32_t                                    queryCount)
+{
+   LVP_FROM_HANDLE(lvp_device, device, _device);
+   LVP_FROM_HANDLE(lvp_query_pool, pool, queryPool);
+
+   for (uint32_t i = 0; i < queryCount; i++) {
+      uint32_t idx = i + firstQuery;
+
+      if (pool->queries[idx]) {
+         device->queue.ctx->destroy_query(device->queue.ctx, pool->queries[idx]);
+         pool->queries[idx] = NULL;
+      }
+   }
+}