mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 08:20:12 +01:00
venus: let vn_instance_submit_command track ring seqno
Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21716>
This commit is contained in:
parent
1cb42a629f
commit
0a3f612ab3
3 changed files with 24 additions and 12 deletions
|
|
@ -599,16 +599,20 @@ vn_instance_submit_command(struct vn_instance *instance,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
uint32_t ring_seqno;
|
||||
VkResult result = vn_instance_ring_submit_locked(
|
||||
instance, &submit->command, submit->reply_shmem, &ring_seqno);
|
||||
submit->ring_seqno_valid =
|
||||
VK_SUCCESS == vn_instance_ring_submit_locked(instance, &submit->command,
|
||||
submit->reply_shmem,
|
||||
&submit->ring_seqno);
|
||||
|
||||
mtx_unlock(&instance->ring.mutex);
|
||||
|
||||
submit->reply = VN_CS_DECODER_INITIALIZER(reply_ptr, submit->reply_size);
|
||||
if (submit->reply_size) {
|
||||
submit->reply =
|
||||
VN_CS_DECODER_INITIALIZER(reply_ptr, submit->reply_size);
|
||||
|
||||
if (submit->reply_size && result == VK_SUCCESS)
|
||||
vn_ring_wait(&instance->ring.ring, ring_seqno);
|
||||
if (submit->ring_seqno_valid)
|
||||
vn_ring_wait(&instance->ring.ring, submit->ring_seqno);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -123,6 +123,9 @@ struct vn_instance_submit_command {
|
|||
/* when reply_size is non-zero, NULL can be returned on errors */
|
||||
struct vn_renderer_shmem *reply_shmem;
|
||||
struct vn_cs_decoder reply;
|
||||
|
||||
bool ring_seqno_valid;
|
||||
uint32_t ring_seqno;
|
||||
};
|
||||
|
||||
static inline struct vn_cs_encoder *
|
||||
|
|
|
|||
|
|
@ -847,14 +847,19 @@ vn_queue_submit(struct vn_queue_submission *submit)
|
|||
return vn_error(dev->instance, result);
|
||||
}
|
||||
} else {
|
||||
struct vn_instance_submit_command instance_submit;
|
||||
if (submit->batch_type == VK_STRUCTURE_TYPE_SUBMIT_INFO_2) {
|
||||
vn_async_vkQueueSubmit2(instance, submit->queue_handle,
|
||||
submit->batch_count, submit->submit_batches2,
|
||||
submit->fence_handle);
|
||||
vn_submit_vkQueueSubmit2(
|
||||
instance, 0, submit->queue_handle, submit->batch_count,
|
||||
submit->submit_batches2, submit->fence_handle, &instance_submit);
|
||||
} else {
|
||||
vn_async_vkQueueSubmit(instance, submit->queue_handle,
|
||||
submit->batch_count, submit->submit_batches,
|
||||
submit->fence_handle);
|
||||
vn_submit_vkQueueSubmit(instance, 0, submit->queue_handle,
|
||||
submit->batch_count, submit->submit_batches,
|
||||
submit->fence_handle, &instance_submit);
|
||||
}
|
||||
if (!instance_submit.ring_seqno_valid) {
|
||||
vn_queue_submission_cleanup(submit);
|
||||
return vn_error(dev->instance, VK_ERROR_DEVICE_LOST);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue