diff options
author | Lionel Landwerlin <[email protected]> | 2018-10-06 19:12:34 +0100 |
---|---|---|
committer | Lionel Landwerlin <[email protected]> | 2020-05-20 14:02:27 +0300 |
commit | 2001a80d4a81f2e8194b29cca301dd1b27be9acb (patch) | |
tree | 8afa6c3e2dfb155e38cf4204f53934a4364f7d4b /src/intel/vulkan/anv_queue.c | |
parent | ceb822f9e00f57ebf7fccea4dd8acb510e28cefd (diff) |
anv: Implement VK_KHR_performance_query
This has the same kernel requirements are VK_INTEL_performance_query
v2: Fix empty queue submit (Lionel)
v3: Fix autotool build issue (Piotr Byszewski)
v4: Fix Reset & Begin/End in same command buffer, using soft-pin &
relocation on the same buffer won't work currently. This version
uses a somewhat dirty trick in anv_execbuf_add_bo (Piotr Byszewski)
v5: Fix enumeration with null pointers for either pCounters or
pCounterDescriptions (Piotr)
Fix return condition on enumeration (Lionel)
Set counter uuid using sha1 hashes (Lionel)
v6: Fix counters scope, should be COMMAND_KHR not COMMAND_BUFFER_KHR (Lionel)
v7: Rebase (Lionel)
v8: Rework checking for loaded queries (Lionel)
v9: Use new i915-perf interface
v10: Use anv_multialloc (Jason)
v11: Implement perf query passes using self modifying batches (Lionel)
Limit support to softpin/gen8
v12: Remove spurious changes (Jason)
v13: Drop relocs (Jason)
v14: Avoid overwritting .sType in
VkPerformanceCounterKHR/VkPerformanceCounterDescriptionKHR (Lionel)
v15: Don't copy the entire
VkPerformanceCounterKHR/VkPerformanceCounterDescriptionKHR (Jason)
Reuse anv_batch rather than custom packing (Jason)
v16: Fix missing MI_BB_END in reconfiguration batch
Only report the extension with kernel support (perf_version >= 3)
v17: Some cleanup of unused stuff
Signed-off-by: Lionel Landwerlin <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2775>
Diffstat (limited to 'src/intel/vulkan/anv_queue.c')
-rw-r--r-- | src/intel/vulkan/anv_queue.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c index 009675e23ea..f6e3fdd6177 100644 --- a/src/intel/vulkan/anv_queue.c +++ b/src/intel/vulkan/anv_queue.c @@ -544,7 +544,7 @@ anv_queue_submit_add_timeline_signal(struct anv_queue_submit* submit, } static struct anv_queue_submit * -anv_queue_submit_alloc(struct anv_device *device) +anv_queue_submit_alloc(struct anv_device *device, int perf_query_pass) { const VkAllocationCallbacks *alloc = &device->vk.alloc; VkSystemAllocationScope alloc_scope = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE; @@ -557,6 +557,7 @@ anv_queue_submit_alloc(struct anv_device *device) submit->alloc_scope = alloc_scope; submit->in_fence = -1; submit->out_fence = -1; + submit->perf_query_pass = perf_query_pass; return submit; } @@ -569,7 +570,7 @@ anv_queue_submit_simple_batch(struct anv_queue *queue, return VK_SUCCESS; struct anv_device *device = queue->device; - struct anv_queue_submit *submit = anv_queue_submit_alloc(device); + struct anv_queue_submit *submit = anv_queue_submit_alloc(device, -1); if (!submit) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); @@ -720,12 +721,13 @@ anv_queue_submit(struct anv_queue *queue, const uint64_t *out_values, uint32_t num_out_semaphores, struct anv_bo *wsi_signal_bo, - VkFence _fence) + VkFence _fence, + int perf_query_pass) { ANV_FROM_HANDLE(anv_fence, fence, _fence); struct anv_device *device = queue->device; UNUSED struct anv_physical_device *pdevice = device->physical; - struct anv_queue_submit *submit = anv_queue_submit_alloc(device); + struct anv_queue_submit *submit = anv_queue_submit_alloc(device, perf_query_pass); if (!submit) return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY); @@ -972,7 +974,7 @@ VkResult anv_QueueSubmit( * common case. */ result = anv_queue_submit(queue, NULL, NULL, NULL, 0, NULL, NULL, 0, - NULL, fence); + NULL, fence, -1); goto out; } @@ -990,6 +992,9 @@ VkResult anv_QueueSubmit( const VkTimelineSemaphoreSubmitInfoKHR *timeline_info = vk_find_struct_const(pSubmits[i].pNext, TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR); + const VkPerformanceQuerySubmitInfoKHR *perf_info = + vk_find_struct_const(pSubmits[i].pNext, + PERFORMANCE_QUERY_SUBMIT_INFO_KHR); const uint64_t *wait_values = timeline_info && timeline_info->waitSemaphoreValueCount ? timeline_info->pWaitSemaphoreValues : NULL; @@ -1011,7 +1016,8 @@ VkResult anv_QueueSubmit( signal_values, pSubmits[i].signalSemaphoreCount, wsi_signal_bo, - submit_fence); + submit_fence, + -1); if (result != VK_SUCCESS) goto out; @@ -1049,7 +1055,8 @@ VkResult anv_QueueSubmit( result = anv_queue_submit(queue, cmd_buffer, in_semaphores, in_values, num_in_semaphores, out_semaphores, out_values, num_out_semaphores, - wsi_signal_bo, execbuf_fence); + wsi_signal_bo, execbuf_fence, + perf_info ? perf_info->counterPassIndex : 0); if (result != VK_SUCCESS) goto out; } |