anv: enable blorp query reset for performance queries

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Felix DeGrood <felix.j.degrood@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22480>
This commit is contained in:
Lionel Landwerlin
2023-04-13 21:29:36 +03:00
parent 20c330e95d
commit a787728906
2 changed files with 25 additions and 19 deletions

View File

@@ -4153,6 +4153,14 @@ struct anv_query_pool {
uint32_t slots;
struct anv_bo * bo;
/** Location for the KHR_performance_query small batch updating
* ANV_PERF_QUERY_OFFSET_REG
*/
uint32_t khr_perf_preambles_offset;
/** Size of each small batch */
uint32_t khr_perf_preamble_stride;
/* KHR perf queries : */
uint32_t pass_size;
uint32_t data_offset;
@@ -4166,7 +4174,8 @@ struct anv_query_pool {
static inline uint32_t khr_perf_query_preamble_offset(const struct anv_query_pool *pool,
uint32_t pass)
{
return pool->pass_size * pass + 8;
return pool->khr_perf_preambles_offset +
pool->khr_perf_preamble_stride * pass;
}
struct anv_vid_mem {

View File

@@ -156,7 +156,7 @@ VkResult genX(CreateQueryPool)(
perf_query_info->counterIndexCount);
vk_multialloc_add(&ma, &pass_query, struct intel_perf_query_info *,
n_passes);
uint64s_per_slot = 4 /* availability + small batch */;
uint64s_per_slot = 1 /* availability */;
/* Align to the requirement of the layout */
uint64s_per_slot = align(uint64s_per_slot,
DIV_ROUND_UP(layout->alignment, sizeof(uint64_t)));
@@ -222,6 +222,16 @@ VkResult genX(CreateQueryPool)(
}
uint64_t size = pool->slots * (uint64_t)pool->stride;
/* For KHR_performance_query we need some space in the buffer for a small
* batch updating ANV_PERF_QUERY_OFFSET_REG.
*/
if (pool->type == VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR) {
pool->khr_perf_preamble_stride = 32;
pool->khr_perf_preambles_offset = size;
size += pool->n_passes * pool->khr_perf_preamble_stride;
}
result = anv_device_alloc_bo(device, "query-pool", size,
ANV_BO_ALLOC_MAPPED |
ANV_BO_ALLOC_SNOOPED,
@@ -277,36 +287,24 @@ void genX(DestroyQueryPool)(
* --------------------------------------------
* | availability (8b) | | |
* |-------------------------------| | |
* | Small batch loading | | |
* | ANV_PERF_QUERY_OFFSET_REG | | |
* | (24b) | | Pass 0 |
* |-------------------------------| | |
* | some padding (see | | |
* | query_field_layout:alignment) | | |
* | query_field_layout:alignment) | | Pass 0 |
* |-------------------------------| | |
* | query data | | |
* | (2 * query_field_layout:size) | | |
* |-------------------------------|-- | Query 0
* | availability (8b) | | |
* |-------------------------------| | |
* | Small batch loading | | |
* | ANV_PERF_QUERY_OFFSET_REG | | |
* | (24b) | | Pass 1 |
* |-------------------------------| | |
* | some padding (see | | |
* | query_field_layout:alignment) | | |
* | query_field_layout:alignment) | | Pass 1 |
* |-------------------------------| | |
* | query data | | |
* | (2 * query_field_layout:size) | | |
* |-------------------------------|-----------
* | availability (8b) | | |
* |-------------------------------| | |
* | Small batch loading | | |
* | ANV_PERF_QUERY_OFFSET_REG | | |
* | (24b) | | Pass 0 |
* |-------------------------------| | |
* | some padding (see | | |
* | query_field_layout:alignment) | | |
* | query_field_layout:alignment) | | Pass 0 |
* |-------------------------------| | |
* | query data | | |
* | (2 * query_field_layout:size) | | |
@@ -787,8 +785,7 @@ void genX(CmdResetQueryPool)(
/* Temporarily disable on MTL until we understand why some tests hang.
*/
if (queryCount >= pdevice->instance->query_clear_with_blorp_threshold &&
!intel_device_info_is_mtl(cmd_buffer->device->info) &&
pool->type != VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR) {
!intel_device_info_is_mtl(cmd_buffer->device->info)) {
anv_cmd_buffer_fill_area(cmd_buffer,
anv_query_address(pool, firstQuery),
queryCount * pool->stride,