http://bugs.winehq.org/show_bug.cgi?id=58192
Bug ID: 58192 Summary: dozen Vulkan driver fails due to missing/minimal dxcore implementation (both MacOS and Linux).. Product: Wine Version: 10.6 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: rtfss1@gmail.com Distribution: ---
Hi, in brief my request expand dxcore.dll support in Wine to a minimal dxcore implementation that allows to run Dozen via Wine.. on both Macos and Linux.. on MacOS for Dozen+D3DMetal testing on Linux for Dozen+VKD3D testing..
details: just wanting to test Dozen (Mesa Vulkan over D3D12 library) in Macos with Crossover 25.0 (bottle setup to using D3DMetal 2.1 as D3D12 driver).. for that I just download: mesa3d-25.0.4-release-msvc.7z from: https://github.com/pal1000/mesa-dist-win/releases/tag/25.0.4
and then adjust ICD loader to find the vulkan_dzn.dll driver and run vulkaninfo.exe.. I check I have all enviroment correctly as also extract lavapipe Vulkan driver from that package and it works correctly with vulkaninfo.exe
using dozen on Crossover 25.0 (setup to use D3DMetal 2.1) I see bug that is not related to D3DMetal D3D12 driver: MESA: error: Failed to retrieve D3D12GetInterface MESA: error: Failed to create DXCore adapter factory
so would fail also on Linux..
seeing Dozen source code I find in:
https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/microsoft/vulkan/dz... fails in dzn_enumerate_physical_devices_dxcore function.. code below..
that is using dxcore and fails with DXCoreCreateAdapterFactory being a stub currently: https://github.com/wine-mirror/wine/blob/master/dlls/dxcore/main.c
perhaps it's better to use as reference if wanting to implement dxcore Wine support checking it works with a minimal sample provided "Minimal DXCore application": https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/dxcore/dxcore-s...
dxcore microsoft docs: https://learn.microsoft.com/en-us/windows/win32/dxcore/dxcore-enum-adapters
dxcore seems the "future" to enumerate adapters on Windows due to enumeration possibly NPU devices also..
dozen source code where it fails:
util_dl_library *dxcore = util_dl_open(UTIL_DL_PREFIX "dxcore" UTIL_DL_EXT); if (!dxcore) { mesa_loge("Failed to load DXCore\n"); return VK_ERROR_INITIALIZATION_FAILED; }
using PFNDXCoreCreateAdapterFactory = HRESULT (APIENTRY*)(REFIID, void **); PFNDXCoreCreateAdapterFactory create_func = (PFNDXCoreCreateAdapterFactory)util_dl_get_proc_address(dxcore, "DXCoreCreateAdapterFactory"); if (!create_func) { mesa_loge("Failed to load DXCoreCreateAdapterFactory\n"); return VK_ERROR_INITIALIZATION_FAILED; }
IDXCoreAdapterFactory *factory; if (FAILED(create_func(IID_PPV_ARGS(&factory)))) { mesa_loge("Failed to create DXCore adapter factory\n"); return VK_ERROR_INITIALIZATION_FAILED; }