https://bugs.winehq.org/show_bug.cgi?id=51662
Bug ID: 51662 Summary: Wine was built without libvkd3d-shader support. Product: Wine Version: 6.0.1 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: nagle@animats.com Distribution: ---
Attempting to run a test program that uses Vulkan. The program is "cube.exe" from WGPU; it's just a basic test to see if Vulkan graphics work.
Set the renderer=vulkan registry key under Direct3d with wine regedit per release notes.
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #1 from John Nagle nagle@animats.com --- Created attachment 70536 --> https://bugs.winehq.org/attachment.cgi?id=70536 Error message and backtrace from Wine crash
Ubuntu 20.04 LTS
Attempting to test WGPU cross-compiling under Wine. This is the simplest WGPU program with graphical output,and is a standard example provided with WGPU. It was cross-compiled on Linux using Rust, with target x86_64-pc-windows-gnu.
https://bugs.winehq.org/show_bug.cgi?id=51662
Sveinar Søpler cybermax@dexter.no changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |cybermax@dexter.no
--- Comment #2 from Sveinar Søpler cybermax@dexter.no --- Ubuntu 20.04 (and 21.04) only have the libvkd3d-1.1 distro package. This means it is built pre- libvkd3d-shader.
If you want wine with "full" vkd3d support - from vkd3d-1.2, you need to either install libvkd3d from a PPA and build yourself, or wait for distro packages being updated (not very likely for 20.04/21.04 tbh)
From WineHQ build services:
[ 39s] [358/694] installing libvkd3d-dev-1.1-4 [ 225s] configure: vkd3d 64-bit development files not found (or too old), Direct3D 12 won't be supported.
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #3 from John Nagle nagle@animats.com --- It fails with executable Wine 6.0.1, downloaded from Wine's repository. I'm not building Wine from source. There's nothing later than that other than a development release.
"Ubuntu 20.04 (and 21.04) only have the libvkd3d-1.1 distro package. This means it is built pre- libvkd3d-shader."
This isn't a shader level problem. This is a GPU memory allocation problem. It doesn't need the latest shaders.
The WGPU developers write, at
https://github.com/gfx-rs/wgpu/issues/1854#issuecomment-904087026
"Also the log has this:
fixme:d3d12_device_CheckFeatureSupport: Unhandled feature 0x12. Using NVIDIA GeForce GTX 470 (Dx12) fixme:vkd3d_select_memory_type: Custom heaps not supported yet.
So it looks like vkd3d doesn't like some of the feature support queries and the fact we are using custom heaps. This is clearly a bug in vkd3d, not wgpu."
So, Wine people, here's the WGPU bug report. WGPU people, here's the Wine bug report: https://bugs.winehq.org/show_bug.cgi?id=51662 There's no code here by me. You guys work it out.
https://bugs.winehq.org/show_bug.cgi?id=51662
Zebediah Figura z.figura12@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |z.figura12@gmail.com
--- Comment #4 from Zebediah Figura z.figura12@gmail.com --- I'm rather confused; are you reporting a bug for a Direct3D 11 application or a Direct3D 12 application? Comment 0 suggests the former, in which case you're indeed running into limitations based on an old build of libvkd3d, but then in comment 3 you say the latter.
Can you please give exact reproduction instructions?
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #5 from John Nagle nagle@animats.com --- Repro steps
Install current Rust on Ubuntu Linux (20.04 LTS used). Install current Wine (6.0.1) or use Wine 5 that ships with 20.04 LTS. Install Rust target for x86_64-pc-windows-gnu Build WGPU examples for that target, debug mode. wine cube.exe
I'm rather confused; are you reporting a bug for a Direct3D 11 application or a Direct3D 12 application?
I'm not sure what mode was selected. WGPU speaks Direct3D 11, and 12, Vulkan, and OpenGL, selected at run time. (Plus WebGL and Metal if built for other targets.) The intent is that WGPU handles the compatibility issues for the user. There's some negotiation at startup. That negotiation may have have gone badly.
See https://github.com/gfx-rs/wgpu, "Supported platforms".
Here's a compiled version of "cube.exe" (named wgpu-cube.exe because of a name conflict.) Can you get that to run under any version of Wine?
http://www.animats.com/sl/misc/wgpu-cube.zip
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #6 from Zebediah Figura z.figura12@gmail.com --- (In reply to John Nagle from comment #5)
Here's a compiled version of "cube.exe" (named wgpu-cube.exe because of a name conflict.) Can you get that to run under any version of Wine?
It doesn't run in d3d12 or Vulkan mode (mostly because I don't have a working Vulkan driver, though presumably the errors mentioned in comment 3 would apply here as well). On the other hand, if I set WGPU_BACKEND=dx11 or disable d3d12.dll and vulkan-1.dll, I get an error "No suitable GPU adapters found on the system!", which also appears if I set WGPU_BACKEND=dx11 on Windows.
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #7 from John Nagle nagle@animats.com --- That makes sense. WGPU can use DX12 or Vulkan, but neither works yet in Wine. WGPU doesn't yet support DX11 or OpenGL, both of which Wine supports. So there's no overlap and no option works. I think.
How far away is Wine support for either DX12 or Vulkan?
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #8 from Zebediah Figura z.figura12@gmail.com --- (In reply to John Nagle from comment #7)
That makes sense. WGPU can use DX12 or Vulkan, but neither works yet in Wine. WGPU doesn't yet support DX11 or OpenGL, both of which Wine supports. So there's no overlap and no option works. I think.
How far away is Wine support for either DX12 or Vulkan?
Both d3d12 and Vulkan are supported in Wine. The latter is relatively quite complete since we just delegate down to the host driver. The former has more missing features, but actually in the git version both D3D12_FEATURE_D3D12_OPTIONS2 and custom heaps are supported. In fact, I tested using a different computer that supports Vulkan and has vkd3d git installed, and both the d3d12 and Vulkan backends work.
What I don't understand is how you're getting wined3d messages, from comments 0 and 1. What exactly did you do to trigger that?
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #9 from John Nagle nagle@animats.com ---
What exactly did you do to trigger that?
wine cube.exe
So, environment issues:
$ wine --version wine-6.0.1
$ which wine /usr/bin/wine
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.2 LTS Release: 20.04 Codename: focal
Software and updates/Other software (repositories)
https://dl.winehq.org/wine-builds/ubuntu focal main $ apt list --installed | grep wine
fonts-wine/focal,focal,now 5.0-3ubuntu1 all [installed,automatic] libwine-development/focal,now 5.5-3ubuntu1 amd64 [installed,automatic] wine-stable-amd64/focal,now 6.0.1~focal-1 amd64 [installed,automatic] wine-stable-i386/focal,now 6.0.1~focal-1 i386 [installed,automatic] wine-stable/focal,now 6.0.1~focal-1 amd64 [installed,automatic] winehq-stable/focal,now 6.0.1~focal-1 amd64 [installed] winetricks/focal,focal,now 0.0+20200412-1 all [installed]
As far as I can tell, I have the latest stable version of Wine installed.
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #10 from Zebediah Figura z.figura12@gmail.com --- Right, but as far as I can tell the d3d11 backend of that cube sample simply doesn't work. I.e. it doesn't work on Windows either, and in Wine I don't even see it getting as far as making any d3d11 calls.
https://bugs.winehq.org/show_bug.cgi?id=51662
John Nagle nagle@animats.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |nagle@animats.com
--- Comment #11 from John Nagle nagle@animats.com --- Created attachment 70544 --> https://bugs.winehq.org/attachment.cgi?id=70544 Successful run of program which supposedly does not run under Windows
Running on Windows 7 Pro, AMD_64.
Downloaded and unzipped the executable from the animats.com web site where I put it because it's too big to upload to this board.
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #12 from John Nagle nagle@animats.com --- Confirmation of the problem from the WGPU devs. See
https://github.com/gfx-rs/wgpu/issues/1854
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #13 from Zebediah Figura z.figura12@gmail.com --- (In reply to John Nagle from comment #11)
Created attachment 70544 [details] Successful run of program which supposedly does not run under Windows
Yes, it runs under Windows, but not, as I said, using the d3d11 backend. I.e. if you set WGPU_BACKEND=dx11 before running, it gives the same "no suitable GPU adapters found" error as I get on Linux.
https://bugs.winehq.org/show_bug.cgi?id=51662
--- Comment #14 from Sveinar Søpler cybermax@dexter.no --- (In reply to John Nagle from comment #12)
Confirmation of the problem from the WGPU devs. See
As a recap to my/our findings on that issue, i would conclude the follwing:
I think this is a WONTFIX/NOTOURBUG type of issue, since WineHQ dev's cant really push distro's to provide newer systemlibs (vkd3d).
For now on Ubuntu: 1. You need libvkd3d_1.2 from a Ubuntu PPA 2. You need to build wine-devel-6.1 or newer with the above library to get D3D12 support (Or you need to download unsupported pre-compiled non-system .deb's from elsewhere.) 3. You need to run "winetricks d3dcompiler_47" (to install Microsoft d3dcompiler) on the prefix to get the rust/wgpu samples to work.
I can do some more verification for this if needed, but I think that my conclusion is that this is a "distro problem" and not a "winebug", since it does seem to work if you do the above 3 steps.
Sounds reasonable?
PS. I will have a chat with the ubuntu package maintainer about this, since a similar issue with a different system library was partially solved with the switch to libFAudio back when... just to make wine-devel be built with D3D12 libs perhaps. TBD on that tho - no promise or anything :)