mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
zink: detect sparse-only binding queue
still prefer binding on the gfx queue when available, but store a separate sparse binding queue if necessary Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17066>
This commit is contained in:
parent
d1456a6b0a
commit
0f9bc1ebe3
2 changed files with 19 additions and 3 deletions
|
|
@ -1371,14 +1371,22 @@ update_queue_props(struct zink_screen *screen)
|
|||
VkQueueFamilyProperties *props = malloc(sizeof(*props) * num_queues);
|
||||
VKSCR(GetPhysicalDeviceQueueFamilyProperties)(screen->pdev, &num_queues, props);
|
||||
|
||||
bool found_gfx = false;
|
||||
uint32_t sparse_only = UINT32_MAX;
|
||||
screen->sparse_queue = UINT32_MAX;
|
||||
for (uint32_t i = 0; i < num_queues; i++) {
|
||||
if (props[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
|
||||
if (!found_gfx && (props[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)) {
|
||||
screen->gfx_queue = i;
|
||||
screen->max_queues = props[i].queueCount;
|
||||
screen->timestamp_valid_bits = props[i].timestampValidBits;
|
||||
break;
|
||||
}
|
||||
found_gfx = true;
|
||||
if (props[i].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT)
|
||||
screen->sparse_queue = i;
|
||||
} else if (props[i].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT)
|
||||
sparse_only = i;
|
||||
}
|
||||
if (screen->sparse_queue == UINT32_MAX)
|
||||
screen->sparse_queue = sparse_only;
|
||||
free(props);
|
||||
}
|
||||
|
||||
|
|
@ -1387,6 +1395,12 @@ init_queue(struct zink_screen *screen)
|
|||
{
|
||||
simple_mtx_init(&screen->queue_lock, mtx_plain);
|
||||
VKSCR(GetDeviceQueue)(screen->dev, screen->gfx_queue, 0, &screen->queue);
|
||||
if (screen->sparse_queue != UINT32_MAX) {
|
||||
if (screen->sparse_queue != screen->gfx_queue)
|
||||
VKSCR(GetDeviceQueue)(screen->dev, screen->sparse_queue, 0, &screen->queue_sparse);
|
||||
else
|
||||
screen->queue_sparse = screen->queue;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -156,10 +156,12 @@ struct zink_screen {
|
|||
bool faked_e5sparse; //drivers may not expose R9G9B9E5 but cts requires it
|
||||
|
||||
uint32_t gfx_queue;
|
||||
uint32_t sparse_queue;
|
||||
uint32_t max_queues;
|
||||
uint32_t timestamp_valid_bits;
|
||||
VkDevice dev;
|
||||
VkQueue queue; //gfx+compute
|
||||
VkQueue queue_sparse;
|
||||
simple_mtx_t queue_lock;
|
||||
VkDebugUtilsMessengerEXT debugUtilsCallbackHandle;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue