HansKristian-Work / vkd3d-proton

Fork of VKD3D. Development branches for Proton's Direct3D 12 implementation.
GNU Lesser General Public License v2.1
1.89k stars 197 forks source link

Palworld: Black screen on modern NVIDIA GPUs #2121

Closed Zeabyte closed 1 month ago

Zeabyte commented 1 month ago

Software information

Game: Palworld Launch arguments: -dx12

System information

Log files

log level: warn vkd3d.log

When starting the DX12 Version of Palworld on my Nvidia GPU, all I will get is a black screen. The game itself - apart from rendering - seems to be working, as I can right click and get a Wine web context menu. (Palworld starts with a "What's new" embedded html popup).

I have attached a vkd3d log that repeatedly shows the following error, until I quit the application: 0210:err:dxgi_vk_swap_chain_recreate_swapchain_in_present_task: Failed to create swapchain, vr -3.

From ProtonDB I could gather that this is most likely an NVIDIA-only issue.

doitsujin commented 1 month ago

VK_ERROR_INITIALIZATION_FAILED on swap chain creation really sounds like a massive driver issue, do any other D3D12 games work for you at all?

I remember some people running into this problem well over a year ago but I do not remember what the solution to that was.

Zeabyte commented 1 month ago

Thanks so much for looking into this.

Weirdly enough I have zero problems with any D3D12 games that I can think of. I can perfectly play Deep Rock Galactic, Cyberpunk 2077, Apex Legends and Forza Horizon 4. Even Star Wars Outlaws is working fine-ish.

I should add that this runs in Steam Flatpak on Wayland. Though, a few months ago I had tested it in non-sandboxed steam with the same result.

doitsujin commented 1 month ago

Don't know then, only thing that would come to mind is perhaps setting VKD3D_DISABLE_EXTENSIONS=VK_NV_low_latency2 (or PROTON_HIDE_NVIDIA_GPU=1 PROTON_DISABLE_NVAPI=1 as a more nuclear option) since there's a non-zero chance something is preventing some driver module from loading, but that would still smell like a setup issue or anti-cheat memes with the nvidia driver or something.

Zeabyte commented 1 month ago

Sadly those env vars produced the same result. I think that this is - as often - the typical NVIDIA bug that will be hidden inside the proprietary drivers for years to come. Still, thank you for your invaluable work!

shelterx commented 1 month ago

There are some suggestions on protondb you can try. Like this one, PROTON_ENABLE_NGX_UPDATER=0 %xommand% More here: https://www.reddit.com/r/linuxquestions/comments/19d4lyj/comment/kpp1kp2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

But the general consensus seems to be that it doesn't work with Nvidia (but used to?).

(I don't have the game so I can't test it)

runar-work commented 1 month ago

I haven't been able to reproduce this issue here for some reason. I've tested with RTX 3070 on 6.10.9-arch1-1, 560.35.03 and combinations of x11 and Wayland, Proton GE and Experimental, flatpak and system packages.

Zeabyte commented 1 month ago

There are some suggestions on protondb you can try. Like this one, PROTON_ENABLE_NGX_UPDATER=0 %xommand% More here: https://www.reddit.com/r/linuxquestions/comments/19d4lyj/comment/kpp1kp2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

But the general consensus seems to be that it doesn't work with Nvidia (but used to?).

(I don't have the game so I can't test it)

Thanks, but I have already tested anything you can find on ProtonDB or Reddit to no avail.

Zeabyte commented 1 month ago

I haven't been able to reproduce this issue here for some reason. I've tested with RTX 3070 on 6.10.9-arch1-1, 560.35.03 and combinations of x11 and Wayland, Proton GE and Experimental, flatpak and system packages.

Interesting. What else could be the culprit?

runar-work commented 1 month ago

Can you add your Proton log as well? It might have some more info in it.

The only other thing I can think of is if you have an iGPU. It did launch on my Raphael iGPU with flatpak if I didn't force the Nvidia driver via VK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.json when launching steam, though the game also launched fine on the iGPU. I have had other games give me that same swapchain error when launching on the iGPU in the past, though.

Zeabyte commented 1 month ago

Can you add your Proton log as well? It might have some more info in it.

The only other thing I can think of is if you have an iGPU. It did launch on my Raphael iGPU with flatpak if I didn't force the Nvidia driver via VK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.json when launching steam, though the game also launched fine on the iGPU. I have had other games give me that same swapchain error when launching on the iGPU in the past, though.

Running with VK_DRIVER_FILES will not even open a window. I do have an integrated GPU, but I have never ever had any problem with that fact. I have attached the Proton logs. steam-1623730.log

runar-work commented 1 month ago

Did you add the option before launching Steam or after? I also get the same failure to launch a window if I try to use that inside Steam as a launch option, but it works for me if I do something like VK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.json flatpak run com.valvesoftware.Steam. On my system I need a separate package for that file (nvidia-utils), but I don't know how that works on Fedora.

Zeabyte commented 1 month ago

Did you add the option before launching Steam or after? I also get the same failure to launch a window if I try to use that inside Steam as a launch option, but it works for me if I do something like VK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.json flatpak run com.valvesoftware.Steam. On my system I need a separate package for that file (nvidia-utils), but I don't know how that works on Fedora.

I think you might have found the problem here. I have just found out with nvtop that my iGPU spikes to 100% when launching the game while the dGPU seems to have the usual Desktop workload.

I have tried VK_DRIVER_FILES=/usr/share/vulkan/icd.d/nvidia_icd.x86_64.json flatpak run com.valvesoftware.Steam on Fedora, but the game still seems to use the iGPU. Is there any other way to force the use of my dGPU?

Blisto91 commented 1 month ago

You can try DXVK_FILTER_DEVICE_NAME="4070"

Zeabyte commented 1 month ago

You can try DXVK_FILTER_DEVICE_NAME="4070"

I cannot believe it... I have tried everything from icd to NVIDIA Prime and forgot that env var. You are awesome! Everything works correctly now and I have learnt so much! Thanks to everyone in this thread. You are all awesome!