mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 04:29:15 +01:00
[dxvk] Find a sparse binding queue
This commit is contained in:
parent
71c9c4a5cc
commit
388288114a
@ -91,10 +91,22 @@ namespace dxvk {
|
||||
|
||||
if (transferQueue == VK_QUEUE_FAMILY_IGNORED)
|
||||
transferQueue = computeQueue;
|
||||
|
||||
|
||||
uint32_t sparseQueue = VK_QUEUE_FAMILY_IGNORED;
|
||||
|
||||
if (m_queueFamilies[graphicsQueue].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT) {
|
||||
// Prefer using the graphics queue as a sparse binding queue
|
||||
sparseQueue = graphicsQueue;
|
||||
} else {
|
||||
sparseQueue = findQueueFamily(
|
||||
VK_QUEUE_SPARSE_BINDING_BIT,
|
||||
VK_QUEUE_SPARSE_BINDING_BIT);
|
||||
}
|
||||
|
||||
DxvkAdapterQueueIndices queues;
|
||||
queues.graphics = graphicsQueue;
|
||||
queues.transfer = transferQueue;
|
||||
queues.sparse = sparseQueue;
|
||||
return queues;
|
||||
}
|
||||
|
||||
@ -465,6 +477,7 @@ namespace dxvk {
|
||||
DxvkAdapterQueueIndices queueFamilies = findQueueFamilies();
|
||||
queueFamiliySet.insert(queueFamilies.graphics);
|
||||
queueFamiliySet.insert(queueFamilies.transfer);
|
||||
queueFamiliySet.insert(queueFamilies.sparse);
|
||||
this->logQueueFamilies(queueFamilies);
|
||||
|
||||
for (uint32_t family : queueFamiliySet) {
|
||||
@ -855,7 +868,8 @@ namespace dxvk {
|
||||
void DxvkAdapter::logQueueFamilies(const DxvkAdapterQueueIndices& queues) {
|
||||
Logger::info(str::format("Queue families:",
|
||||
"\n Graphics : ", queues.graphics,
|
||||
"\n Transfer : ", queues.transfer));
|
||||
"\n Transfer : ", queues.transfer,
|
||||
"\n Sparse : ", queues.sparse != VK_QUEUE_FAMILY_IGNORED ? str::format(queues.sparse) : "n/a"));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ namespace dxvk {
|
||||
struct DxvkAdapterQueueIndices {
|
||||
uint32_t graphics;
|
||||
uint32_t transfer;
|
||||
uint32_t sparse;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -22,6 +22,7 @@ namespace dxvk {
|
||||
auto queueFamilies = m_adapter->findQueueFamilies();
|
||||
m_queues.graphics = getQueue(queueFamilies.graphics, 0);
|
||||
m_queues.transfer = getQueue(queueFamilies.transfer, 0);
|
||||
m_queues.sparse = getQueue(queueFamilies.sparse, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -337,7 +338,10 @@ namespace dxvk {
|
||||
uint32_t family,
|
||||
uint32_t index) const {
|
||||
VkQueue queue = VK_NULL_HANDLE;
|
||||
m_vkd->vkGetDeviceQueue(m_vkd->device(), family, index, &queue);
|
||||
|
||||
if (family != VK_QUEUE_FAMILY_IGNORED)
|
||||
m_vkd->vkGetDeviceQueue(m_vkd->device(), family, index, &queue);
|
||||
|
||||
return DxvkDeviceQueue { queue, family, index };
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,7 @@ namespace dxvk {
|
||||
struct DxvkDeviceQueueSet {
|
||||
DxvkDeviceQueue graphics;
|
||||
DxvkDeviceQueue transfer;
|
||||
DxvkDeviceQueue sparse;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user