mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
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:
parent
f5c706e438
commit
3166b14bd8
4 changed files with 42 additions and 47 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue