venus: drop device, family, index, flags tracking from vn_queue

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25262>
This commit is contained in:
Yiwei Zhang 2023-09-11 00:31:27 -07:00 committed by Marge Bot
parent f5c706e438
commit 3166b14bd8
4 changed files with 42 additions and 47 deletions

View file

@ -24,7 +24,7 @@
static void
vn_queue_fini(struct vn_queue *queue)
{
VkDevice dev_handle = vn_device_to_handle(queue->device);
VkDevice dev_handle = vk_device_to_handle(queue->base.base.base.device);
if (queue->wait_fence != VK_NULL_HANDLE) {
vn_DestroyFence(dev_handle, queue->wait_fence, NULL);
@ -76,11 +76,6 @@ vn_queue_init(struct vn_device *dev,
vn_async_vkGetDeviceQueue2(dev->instance, vn_device_to_handle(dev),
&device_queue_info, &queue_handle);
queue->device = dev;
queue->family = queue_info->queueFamilyIndex;
queue->index = queue_index;
queue->flags = queue_info->flags;
return VK_SUCCESS;
}

View file

@ -201,6 +201,10 @@ static VkResult
vn_queue_submission_fix_batch_semaphores(struct vn_queue_submission *submit,
uint32_t batch_index)
{
struct vk_queue *queue_vk = vk_queue_from_handle(submit->queue_handle);
VkDevice dev_handle = vk_device_to_handle(queue_vk->base.device);
struct vn_device *dev = vn_device_from_handle(dev_handle);
uint32_t wait_count = vn_get_wait_semaphore_count(submit, batch_index);
uint32_t signal_count = vn_get_signal_semaphore_count(submit, batch_index);
@ -212,8 +216,6 @@ vn_queue_submission_fix_batch_semaphores(struct vn_queue_submission *submit,
if (payload->type != VN_SYNC_TYPE_IMPORTED_SYNC_FD)
continue;
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
struct vn_device *dev = queue->device;
if (!vn_semaphore_wait_external(dev, sem))
return VK_ERROR_DEVICE_LOST;
@ -224,8 +226,8 @@ vn_queue_submission_fix_batch_semaphores(struct vn_queue_submission *submit,
.semaphore = sem_handle,
.resourceId = 0,
};
vn_async_vkImportSemaphoreResourceMESA(
dev->instance, vn_device_to_handle(dev), &res_info);
vn_async_vkImportSemaphoreResourceMESA(dev->instance, dev_handle,
&res_info);
}
bool batch_has_sem_feedback = false;
@ -283,7 +285,7 @@ static VkResult
vn_queue_submission_alloc_storage(struct vn_queue_submission *submit)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
const VkAllocationCallbacks *alloc = &queue->device->base.base.alloc;
const VkAllocationCallbacks *alloc = &queue->base.base.base.device->alloc;
size_t batch_size = 0;
size_t cmd_size = 0;
size_t alloc_size = 0;
@ -395,7 +397,8 @@ vn_set_sem_feedback_cmd(struct vn_queue *queue,
VkCommandBuffer *cmd_handle)
{
VkResult result;
struct vn_device *dev = queue->device;
struct vk_queue *queue_vk = &queue->base.base;
struct vn_device *dev = (void *)queue_vk->base.device;
const VkAllocationCallbacks *alloc = &dev->base.base.alloc;
struct vn_feedback_src *free_feedback_src = NULL;
@ -432,8 +435,8 @@ vn_set_sem_feedback_cmd(struct vn_queue *queue,
vn_feedback_set_counter(free_feedback_src->src_slot, counter);
for (uint32_t i = 0; i < queue->device->queue_family_count; i++) {
if (queue->device->queue_families[i] == queue->family) {
for (uint32_t i = 0; i < dev->queue_family_count; i++) {
if (dev->queue_families[i] == queue_vk->queue_family_index) {
*cmd_handle = free_feedback_src->commands[i];
return VK_SUCCESS;
}
@ -541,10 +544,13 @@ vn_queue_submission_add_semaphore_feedback(
static const VkCommandBuffer *
vn_get_fence_feedback_cmd(struct vn_queue *queue, struct vn_fence *fence)
{
struct vk_queue *queue_vk = &queue->base.base;
struct vn_device *dev = (void *)queue_vk->base.device;
assert(fence->feedback.slot);
for (uint32_t i = 0; i < queue->device->queue_family_count; i++) {
if (queue->device->queue_families[i] == queue->family)
for (uint32_t i = 0; i < dev->queue_family_count; i++) {
if (dev->queue_families[i] == queue_vk->queue_family_index)
return &fence->feedback.commands[i];
}
@ -714,9 +720,8 @@ vn_queue_sem_recycle_src_feedback(VkDevice dev_handle, VkSemaphore sem_handle)
static void
vn_queue_recycle_src_feedback(struct vn_queue_submission *submit)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
struct vn_device *dev = queue->device;
VkDevice dev_handle = vn_device_to_handle(dev);
struct vk_queue *queue_vk = vk_queue_from_handle(submit->queue_handle);
VkDevice dev_handle = vk_device_to_handle(queue_vk->base.device);
for (uint32_t batch_index = 0; batch_index < submit->batch_count;
batch_index++) {
@ -743,7 +748,7 @@ static void
vn_queue_submission_cleanup(struct vn_queue_submission *submit)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
const VkAllocationCallbacks *alloc = &queue->device->base.base.alloc;
const VkAllocationCallbacks *alloc = &queue->base.base.base.device->alloc;
/* TODO clean up pending src feedbacks on failure? */
if (submit->has_feedback_semaphore)
@ -776,14 +781,14 @@ vn_queue_submission_prepare_submit(struct vn_queue_submission *submit)
static void
vn_queue_wsi_present(struct vn_queue_submission *submit)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
struct vn_device *dev = queue->device;
struct vn_instance *instance = queue->device->instance;
struct vk_queue *queue_vk = vk_queue_from_handle(submit->queue_handle);
struct vn_device *dev = (void *)queue_vk->base.device;
struct vn_instance *instance = dev->instance;
if (!submit->wsi_mem)
return;
if (dev->instance->renderer->info.has_implicit_fencing) {
if (instance->renderer->info.has_implicit_fencing) {
struct vn_renderer_submit_batch batch = {
.ring_idx = submit->external_payload.ring_idx,
};
@ -821,7 +826,7 @@ static VkResult
vn_queue_submit(struct vn_queue_submission *submit)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
struct vn_device *dev = queue->device;
struct vn_device *dev = (void *)queue->base.base.base.device;
struct vn_instance *instance = dev->instance;
VkResult result;
@ -838,7 +843,7 @@ vn_queue_submit(struct vn_queue_submission *submit)
*/
result = vn_queue_submission_prepare_submit(submit);
if (result != VK_SUCCESS)
return vn_error(dev->instance, result);
return vn_error(instance, result);
/* skip no-op submit */
if (!submit->batch_count && submit->fence_handle == VK_NULL_HANDLE)
@ -857,7 +862,7 @@ vn_queue_submit(struct vn_queue_submission *submit)
if (result != VK_SUCCESS) {
vn_queue_submission_cleanup(submit);
return vn_error(dev->instance, result);
return vn_error(instance, result);
}
} else {
struct vn_instance_submit_command instance_submit;
@ -872,7 +877,7 @@ vn_queue_submit(struct vn_queue_submission *submit)
}
if (!instance_submit.ring_seqno_valid) {
vn_queue_submission_cleanup(submit);
return vn_error(dev->instance, VK_ERROR_DEVICE_LOST);
return vn_error(instance, VK_ERROR_DEVICE_LOST);
}
submit->external_payload.ring_seqno_valid = true;
submit->external_payload.ring_seqno = instance_submit.ring_seqno;
@ -952,7 +957,7 @@ static VkResult
vn_queue_bind_sparse_submit(struct vn_queue_submission *submit)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
struct vn_device *dev = queue->device;
struct vn_device *dev = (void *)queue->base.base.base.device;
struct vn_instance *instance = dev->instance;
VkResult result;
@ -961,7 +966,7 @@ vn_queue_bind_sparse_submit(struct vn_queue_submission *submit)
instance, submit->queue_handle, submit->batch_count,
submit->sparse_batches, submit->fence_handle);
if (result != VK_SUCCESS)
return vn_error(dev->instance, result);
return vn_error(instance, result);
} else {
struct vn_instance_submit_command instance_submit;
vn_submit_vkQueueBindSparse(instance, 0, submit->queue_handle,
@ -969,7 +974,7 @@ vn_queue_bind_sparse_submit(struct vn_queue_submission *submit)
submit->fence_handle, &instance_submit);
if (!instance_submit.ring_seqno_valid)
return vn_error(dev->instance, VK_ERROR_DEVICE_LOST);
return vn_error(instance, VK_ERROR_DEVICE_LOST);
}
return VK_SUCCESS;
@ -980,7 +985,7 @@ vn_queue_bind_sparse_submit_batch(struct vn_queue_submission *submit,
uint32_t batch_index)
{
struct vn_queue *queue = vn_queue_from_handle(submit->queue_handle);
VkDevice dev_handle = vn_device_to_handle(queue->device);
VkDevice dev_handle = vk_device_to_handle(queue->base.base.base.device);
const VkBindSparseInfo *sparse_info = &submit->sparse_batches[batch_index];
const VkSemaphore *signal_sem = sparse_info->pSignalSemaphores;
uint32_t signal_sem_count = sparse_info->signalSemaphoreCount;
@ -1171,7 +1176,8 @@ vn_QueueWaitIdle(VkQueue _queue)
{
VN_TRACE_FUNC();
struct vn_queue *queue = vn_queue_from_handle(_queue);
VkDevice dev_handle = vn_device_to_handle(queue->device);
VkDevice dev_handle = vk_device_to_handle(queue->base.base.base.device);
struct vn_device *dev = vn_device_from_handle(dev_handle);
VkResult result;
/* lazily create queue wait fence for queue idle waiting */
@ -1194,7 +1200,7 @@ vn_QueueWaitIdle(VkQueue _queue)
vn_WaitForFences(dev_handle, 1, &queue->wait_fence, true, UINT64_MAX);
vn_ResetFences(dev_handle, 1, &queue->wait_fence);
return vn_result(queue->device->instance, result);
return vn_result(dev->instance, result);
}
/* fence commands */

View file

@ -18,11 +18,6 @@
struct vn_queue {
struct vn_queue_base base;
struct vn_device *device;
uint32_t family;
uint32_t index;
uint32_t flags;
/* only used if renderer supports multiple timelines */
uint32_t ring_idx;

View file

@ -267,24 +267,23 @@ VkResult
vn_QueuePresentKHR(VkQueue _queue, const VkPresentInfoKHR *pPresentInfo)
{
VN_TRACE_FUNC();
struct vn_queue *queue = vn_queue_from_handle(_queue);
struct vk_queue *queue_vk = vk_queue_from_handle(_queue);
struct vn_device *dev = (void *)queue_vk->base.device;
VkResult result =
wsi_common_queue_present(&queue->device->physical_device->wsi_device,
vn_device_to_handle(queue->device), _queue,
queue->family, pPresentInfo);
VkResult result = wsi_common_queue_present(
&dev->physical_device->wsi_device, vn_device_to_handle(dev), _queue,
queue_vk->queue_family_index, pPresentInfo);
if (VN_DEBUG(WSI) && result != VK_SUCCESS) {
for (uint32_t i = 0; i < pPresentInfo->swapchainCount; i++) {
const VkResult r =
pPresentInfo->pResults ? pPresentInfo->pResults[i] : result;
vn_log(queue->device->instance,
"swapchain %p: presented image %d: %s",
vn_log(dev->instance, "swapchain %p: presented image %d: %s",
VN_WSI_PTR(pPresentInfo->pSwapchains[i]),
pPresentInfo->pImageIndices[i], vk_Result_to_str(r));
}
}
return vn_result(queue->device->instance, result);
return vn_result(dev->instance, result);
}
VkResult