mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-14 22: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)
|
if (transferQueue == VK_QUEUE_FAMILY_IGNORED)
|
||||||
transferQueue = computeQueue;
|
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;
|
DxvkAdapterQueueIndices queues;
|
||||||
queues.graphics = graphicsQueue;
|
queues.graphics = graphicsQueue;
|
||||||
queues.transfer = transferQueue;
|
queues.transfer = transferQueue;
|
||||||
|
queues.sparse = sparseQueue;
|
||||||
return queues;
|
return queues;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,6 +477,7 @@ namespace dxvk {
|
|||||||
DxvkAdapterQueueIndices queueFamilies = findQueueFamilies();
|
DxvkAdapterQueueIndices queueFamilies = findQueueFamilies();
|
||||||
queueFamiliySet.insert(queueFamilies.graphics);
|
queueFamiliySet.insert(queueFamilies.graphics);
|
||||||
queueFamiliySet.insert(queueFamilies.transfer);
|
queueFamiliySet.insert(queueFamilies.transfer);
|
||||||
|
queueFamiliySet.insert(queueFamilies.sparse);
|
||||||
this->logQueueFamilies(queueFamilies);
|
this->logQueueFamilies(queueFamilies);
|
||||||
|
|
||||||
for (uint32_t family : queueFamiliySet) {
|
for (uint32_t family : queueFamiliySet) {
|
||||||
@ -855,7 +868,8 @@ namespace dxvk {
|
|||||||
void DxvkAdapter::logQueueFamilies(const DxvkAdapterQueueIndices& queues) {
|
void DxvkAdapter::logQueueFamilies(const DxvkAdapterQueueIndices& queues) {
|
||||||
Logger::info(str::format("Queue families:",
|
Logger::info(str::format("Queue families:",
|
||||||
"\n Graphics : ", queues.graphics,
|
"\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 {
|
struct DxvkAdapterQueueIndices {
|
||||||
uint32_t graphics;
|
uint32_t graphics;
|
||||||
uint32_t transfer;
|
uint32_t transfer;
|
||||||
|
uint32_t sparse;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,6 +22,7 @@ namespace dxvk {
|
|||||||
auto queueFamilies = m_adapter->findQueueFamilies();
|
auto queueFamilies = m_adapter->findQueueFamilies();
|
||||||
m_queues.graphics = getQueue(queueFamilies.graphics, 0);
|
m_queues.graphics = getQueue(queueFamilies.graphics, 0);
|
||||||
m_queues.transfer = getQueue(queueFamilies.transfer, 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 family,
|
||||||
uint32_t index) const {
|
uint32_t index) const {
|
||||||
VkQueue queue = VK_NULL_HANDLE;
|
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 };
|
return DxvkDeviceQueue { queue, family, index };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,7 @@ namespace dxvk {
|
|||||||
struct DxvkDeviceQueueSet {
|
struct DxvkDeviceQueueSet {
|
||||||
DxvkDeviceQueue graphics;
|
DxvkDeviceQueue graphics;
|
||||||
DxvkDeviceQueue transfer;
|
DxvkDeviceQueue transfer;
|
||||||
|
DxvkDeviceQueue sparse;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user