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:
Yiwei Zhang 2023-03-02 17:13:55 -08:00 committed by Marge Bot
parent 1cb42a629f
commit 0a3f612ab3
3 changed files with 24 additions and 12 deletions

View file

@ -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;

View file

@ -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 *

View file

@ -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);
}
}