[d3d9] Add queue families to interop GetDeviceCreateInfo

This commit is contained in:
Jeff 2024-11-29 05:33:39 -08:00
parent 91e5e18141
commit b0bb217659
No known key found for this signature in database
GPG key ID: 8B2B6A1CF435D14B
3 changed files with 25 additions and 5 deletions

View file

@ -5,6 +5,15 @@
using D3D9VkQueueLockCallback = void(bool);
/**
* \brief Device queue info
*/
struct D3D9VkQueueFamilies {
uint32_t graphics;
uint32_t transfer;
uint32_t sparse;
};
/**
* \brief Device import info
*/
@ -55,10 +64,12 @@ ID3D9VkInteropInterface : public IUnknown {
*
* \param [in] Adapter Adapter ordinal
* \param [out] pCreateInfo The Vulkan device create info
* \param [out] pQueueFamilies The required queue families
*/
virtual HRESULT STDMETHODCALLTYPE GetDeviceCreateInfo(
UINT Adapter,
VkDeviceCreateInfo* pCreateInfo) = 0;
VkDeviceCreateInfo* pCreateInfo,
D3D9VkQueueFamilies* pQueueFamilies) = 0;
/**
* \brief Create a D3D9 device for an existing Vulkan device

View file

@ -53,8 +53,9 @@ namespace dxvk {
HRESULT STDMETHODCALLTYPE D3D9VkInteropInterface::GetDeviceCreateInfo(
UINT Adapter,
VkDeviceCreateInfo* pCreateInfo) {
if (unlikely(pCreateInfo == nullptr))
VkDeviceCreateInfo* pCreateInfo,
D3D9VkQueueFamilies* pQueueFamilies) {
if (unlikely(pCreateInfo == nullptr && pQueueFamilies == nullptr))
return D3DERR_INVALIDCALL;
auto* adapter = m_interface->GetAdapter(Adapter);
@ -68,7 +69,14 @@ namespace dxvk {
if (!dxvkAdapter->getDeviceCreateInfo(m_interface->GetInstance(), D3D9DeviceEx::GetDeviceFeatures(dxvkAdapter), false, createInfo))
return D3DERR_INVALIDCALL;
*pCreateInfo = createInfo.info;
if (pCreateInfo != nullptr)
*pCreateInfo = createInfo.info;
if (pQueueFamilies != nullptr) {
pQueueFamilies->graphics = createInfo.queueFamilies.graphics;
pQueueFamilies->transfer = createInfo.queueFamilies.transfer;
pQueueFamilies->sparse = createInfo.queueFamilies.sparse;
}
return D3D_OK;
}

View file

@ -36,7 +36,8 @@ namespace dxvk {
HRESULT STDMETHODCALLTYPE GetDeviceCreateInfo(
UINT Adapter,
VkDeviceCreateInfo* pCreateInfo);
VkDeviceCreateInfo* pCreateInfo,
D3D9VkQueueFamilies* pQueueFamilies);
HRESULT STDMETHODCALLTYPE ImportDevice(
UINT Adapter,