mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 00:50:23 +01:00
anv: move utrace flush out of backends
The next patch is going to introduce some locking that needs to happen before the submission to the backend. Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Acked-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24744>
This commit is contained in:
parent
08e0c063cf
commit
a334fb005b
7 changed files with 38 additions and 29 deletions
|
|
@ -1287,7 +1287,8 @@ anv_queue_exec_locked(struct anv_queue *queue,
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass)
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit)
|
||||
{
|
||||
struct anv_device *device = queue->device;
|
||||
VkResult result = VK_SUCCESS;
|
||||
|
|
@ -1311,7 +1312,8 @@ anv_queue_exec_locked(struct anv_queue *queue,
|
|||
cmd_buffer_count, cmd_buffers,
|
||||
needs_companion_sync ? 0 : signal_count, signals,
|
||||
perf_query_pool,
|
||||
perf_query_pass);
|
||||
perf_query_pass,
|
||||
utrace_submit);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
|
|
@ -1328,7 +1330,8 @@ anv_queue_exec_locked(struct anv_queue *queue,
|
|||
1, &companion_sync,
|
||||
0, NULL,
|
||||
signal_count, signals,
|
||||
NULL, 0);
|
||||
NULL, 0,
|
||||
NULL);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
@ -1342,7 +1345,8 @@ can_chain_query_pools(struct anv_query_pool *p1, struct anv_query_pool *p2)
|
|||
|
||||
static VkResult
|
||||
anv_queue_submit_locked(struct anv_queue *queue,
|
||||
struct vk_queue_submit *submit)
|
||||
struct vk_queue_submit *submit,
|
||||
struct anv_utrace_submit *utrace_submit)
|
||||
{
|
||||
VkResult result;
|
||||
|
||||
|
|
@ -1363,7 +1367,8 @@ anv_queue_submit_locked(struct anv_queue *queue,
|
|||
NULL /* cmd_buffers */,
|
||||
submit->signal_count, submit->signals,
|
||||
NULL /* perf_query_pool */,
|
||||
0 /* perf_query_pass */);
|
||||
0 /* perf_query_pass */,
|
||||
utrace_submit);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
} else {
|
||||
|
|
@ -1401,7 +1406,8 @@ anv_queue_submit_locked(struct anv_queue *queue,
|
|||
next == end ? submit->signal_count : 0,
|
||||
next == end ? submit->signals : NULL,
|
||||
perf_query_pool,
|
||||
submit->perf_pass_index);
|
||||
submit->perf_pass_index,
|
||||
next == end ? utrace_submit : NULL);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
if (next < end) {
|
||||
|
|
@ -1456,10 +1462,22 @@ anv_queue_submit(struct vk_queue *vk_queue,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
/* Flush the trace points first before taking the lock as the flushing
|
||||
* might try to take that same lock.
|
||||
*/
|
||||
struct anv_utrace_submit *utrace_submit = NULL;
|
||||
result = anv_device_utrace_flush_cmd_buffers(
|
||||
queue,
|
||||
submit->command_buffer_count,
|
||||
(struct anv_cmd_buffer **)submit->command_buffers,
|
||||
&utrace_submit);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
pthread_mutex_lock(&device->mutex);
|
||||
|
||||
uint64_t start_ts = intel_ds_begin_submit(&queue->ds);
|
||||
result = anv_queue_submit_locked(queue, submit);
|
||||
result = anv_queue_submit_locked(queue, submit, utrace_submit);
|
||||
/* Take submission ID under lock */
|
||||
intel_ds_end_submit(&queue->ds, start_ts);
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ stub_queue_exec_locked(struct anv_queue *queue,
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass)
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit)
|
||||
{
|
||||
return VK_ERROR_UNKNOWN;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,7 +86,8 @@ struct anv_kmd_backend {
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass);
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit);
|
||||
VkResult (*queue_exec_trace)(struct anv_queue *queue,
|
||||
struct anv_utrace_submit *submit);
|
||||
uint32_t (*bo_alloc_flags_to_bo_flags)(struct anv_device *device,
|
||||
|
|
|
|||
|
|
@ -730,24 +730,16 @@ i915_queue_exec_locked(struct anv_queue *queue,
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass)
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit)
|
||||
{
|
||||
struct anv_device *device = queue->device;
|
||||
struct anv_utrace_submit *utrace_submit = NULL;
|
||||
struct anv_execbuf execbuf = {
|
||||
.alloc = &queue->device->vk.alloc,
|
||||
.alloc_scope = VK_SYSTEM_ALLOCATION_SCOPE_DEVICE,
|
||||
.perf_query_pass = perf_query_pass,
|
||||
};
|
||||
|
||||
/* Flush the trace points first, they need to be moved */
|
||||
VkResult result =
|
||||
anv_device_utrace_flush_cmd_buffers(queue,
|
||||
cmd_buffer_count,
|
||||
cmd_buffers,
|
||||
&utrace_submit);
|
||||
if (result != VK_SUCCESS)
|
||||
goto error;
|
||||
VkResult result;
|
||||
|
||||
if (utrace_submit && !utrace_submit->batch_bo) {
|
||||
result = anv_execbuf_add_sync(device, &execbuf,
|
||||
|
|
|
|||
|
|
@ -50,4 +50,5 @@ i915_queue_exec_locked(struct anv_queue *queue,
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass);
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit);
|
||||
|
|
|
|||
|
|
@ -266,17 +266,12 @@ xe_queue_exec_locked(struct anv_queue *queue,
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass)
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit)
|
||||
{
|
||||
struct anv_device *device = queue->device;
|
||||
struct anv_utrace_submit *utrace_submit = NULL;
|
||||
VkResult result;
|
||||
|
||||
result = anv_device_utrace_flush_cmd_buffers(queue, cmd_buffer_count,
|
||||
cmd_buffers, &utrace_submit);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
struct drm_xe_sync *xe_syncs = NULL;
|
||||
uint32_t xe_syncs_count = 0;
|
||||
result = xe_exec_process_syncs(queue, wait_count, waits,
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ xe_queue_exec_locked(struct anv_queue *queue,
|
|||
uint32_t signal_count,
|
||||
const struct vk_sync_signal *signals,
|
||||
struct anv_query_pool *perf_query_pool,
|
||||
uint32_t perf_query_pass);
|
||||
uint32_t perf_query_pass,
|
||||
struct anv_utrace_submit *utrace_submit);
|
||||
|
||||
VkResult
|
||||
xe_queue_exec_utrace_locked(struct anv_queue *queue,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue