Skip to content

Commit

Permalink
[dxvk] Allow using transfer and sparse queues when importing device
Browse files Browse the repository at this point in the history
  • Loading branch information
AlpyneDreams committed Nov 29, 2024
1 parent 65053c4 commit afc24dd
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
8 changes: 7 additions & 1 deletion src/dxvk/dxvk_adapter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -678,11 +678,17 @@ namespace dxvk {
// Create device loader
Rc<vk::DeviceFn> vkd = new vk::DeviceFn(m_vki, false, args.device);

// We only support one queue when importing devices, and no sparse.
// By default, we only use one queue when importing devices, and no sparse.
DxvkDeviceQueueSet queues = { };
queues.graphics = { args.queue, args.queueFamily };
queues.transfer = queues.graphics;

if (args.transferQueue != VK_NULL_HANDLE && args.transferQueueFamily != VK_QUEUE_FAMILY_IGNORED)
queues.transfer = { args.transferQueue, args.transferQueueFamily };

if (args.sparseQueue != VK_NULL_HANDLE && args.sparseQueueFamily != VK_QUEUE_FAMILY_IGNORED)
queues.sparse = { args.sparseQueue, args.sparseQueueFamily };

return new DxvkDevice(instance, this, vkd, enabledFeatures, queues, args.queueCallback);
}

Expand Down
20 changes: 13 additions & 7 deletions src/dxvk/dxvk_adapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,19 @@ namespace dxvk {
* \brief Device import info
*/
struct DxvkDeviceImportInfo {
VkDevice device;
VkQueue queue;
uint32_t queueFamily;
uint32_t extensionCount;
const char** extensionNames;
const VkPhysicalDeviceFeatures2* features;
DxvkQueueCallback queueCallback;
VkDevice device;
VkQueue queue;
uint32_t queueFamily;
uint32_t extensionCount;
const char** extensionNames;
const VkPhysicalDeviceFeatures2* features;
DxvkQueueCallback queueCallback;

// Optional additional queues
VkQueue transferQueue = VK_NULL_HANDLE;
uint32_t transferQueueFamily = VK_QUEUE_FAMILY_IGNORED;
VkQueue sparseQueue = VK_NULL_HANDLE;
uint32_t sparseQueueFamily = VK_QUEUE_FAMILY_IGNORED;
};

/**
Expand Down

0 comments on commit afc24dd

Please sign in to comment.