HansKristian-Work / vkd3d-proton

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

Alan Wake II - Textures are missing #1754

Closed DomiStyle closed 1 year ago

DomiStyle commented 1 year ago

As mentioned in https://github.com/HansKristian-Work/vkd3d-proton/issues/1753#issuecomment-1783597078

Textures in Alan Wake II are "missing". See screenshots for details.

20231027214931_1

20231027220156_1

For comparison from a Youtube playthrough: image

Software information

Alan Wake II, on any settings.

System information

Log files

steam-18084208946599428096.log

Log file shows game start, ingame and game exit.

RiantAnda commented 1 year ago

I have the same issue, also on AMD. Becomes very apparent with some (but not all) NPCs in Bright Falls: AW2-1 AW2-2

Blisto91 commented 1 year ago

Are you able to test if the amdvlk driver shows the same issue

Arcus92 commented 1 year ago

@Blisto91 Having the same GPU, same vkd3d-proton version with the exact same issue.

I have manually deleted the vkd3d-proton.cache between each test. But the AMD drivers cant get past this line: 437.198:06ec:07c4:info:vkd3d-proton:vkd3d_pipeline_library_disk_thread_main: Done performing async setup of stream archive.

Arcus92 commented 1 year ago

Also I don't think that the texture is 'missing'. I assume the texture is there but the shader messes with the scaling. Here you can see that there is a tiny repeating pattern on the stone wall. grafik

Blisto91 commented 1 year ago

Isn't the FBI text on the jacket fully gone though

Hadrianneue commented 1 year ago

@Blisto91 this issue is likely related to Mesh Shaders, this game has a pixel shader fallback path for GPUs without mesh shaders, you can use VKD3D_DISABLE_EXTENSIONS=VK_EXT_mesh_shader to force that pixel shader path, and those issues disappear.

Anyone with a nvidia GPU featuring Mesh Shaders can test it? its likely a RADV issue but could be something in VKD3D as well.

maltsaar commented 1 year ago

I'm on a 6950XT and have the same issue.

@Blisto91 this issue is likely related to Mesh Shaders, this game has a pixel shader fallback path for GPUs without mesh shaders, you can use VKD3D_DISABLE_EXTENSIONS=VK_EXT_mesh_shader to force that pixel shader path, and those issues disappear.

Adding this ENV unfortunately freezes my whole computer after loading a save.

Hadrianneue commented 1 year ago

@monkhaze try forcing shader model and feature level as well, e.g: VKD3D_DISABLE_EXTENSIONS=VK_EXT_mesh_shader VKD3D_FEATURE_LEVEL=12_0 VKD3D_SHADER_MODEL=6_5 %command%

also make sure to use latest vkd3d and proton/wine-ge version.

maltsaar commented 1 year ago

@monkhaze try forcing shader model and feature level as well, e.g: VKD3D_DISABLE_EXTENSIONS=VK_EXT_mesh_shader VKD3D_FEATURE_LEVEL=12_0 VKD3D_SHADER_MODEL=6_5 %command%

also make sure to use latest vkd3d and proton/wine-ge version.

Thanks for the suggestions. Unfortunately it seems to be acting the same way.

What versions I'm currently using: 2023-10-28T19:19:30,956126346+03:00

I also tried with wine-ge, proton-ge-custom but the result is the same with disabled mesh shader.

Hadrianneue commented 1 year ago

@monkhaze i'm on mesa-git, that may be the reason it works on my end, or maybe your shader cache or the part of the game where you are is triggering this specific crash, try deleting vkd3d / radv cache and load the earliest save file you can find.

This would be just for testing though, not using mesh shaders incurs at least -100% perf

Arcus92 commented 1 year ago

Same here, tested different wine version. When I disable mesh shader, the game just black-screened. I'll try mesa-git now.

Isn't the FBI text on the jacket fully gone though

If you look at the clothing, you can see a very tiny moire effect. Especially on Alan's coat. I feel like the texture is scaled down by a very large factor, repeated over and over again and maybe mashed together to a few pixels by mip-mapping.

Edit: After updating to mesa-git, the moire effect is gone and the clothing looks slightly different. Now the texture is missing for real. But disabling mesh-shaders still doesn't work.

Hadrianneue commented 1 year ago

@Arcus92 you sure you are using vkd3d-git? try adding AW2 as non-steam, use proton-experimental and set proton-experimental branch to bleeding-edge, you may need to pass %command% -epicportal if drm messages appear, as well as install vcrun2015-2022, best installed with protontricks by grabbing non-steam id with protontricks --list and installing with protontricks 'gameid' uninstaller

baryluk commented 1 year ago

Same things on AMD Radeon XT 6900 XT here, with Yesterday's and Today's Mesa from git master (self built).

GPU0:
    apiVersion         = 1.3.267
    driverVersion      = 23.99.99
    vendorID           = 0x1002
    deviceID           = 0x73bf
    deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
    deviceName         = AMD Radeon RX 6900 XT (RADV NAVI21)
    driverID           = DRIVER_ID_MESA_RADV
    driverName         = radv
    driverInfo         = Mesa 24.0.0-devel (git-4f892ecc1e)
    conformanceVersion = 1.3.0.0
    deviceUUID         = 00000000-4400-0000-0000-000000000000
    driverUUID         = 414d442d-4d45-5341-2d44-525600000000

I am using Heroic launcher, with Proton-GE-Proton8-21. No Mangohud, or other layers.

Screenshot from 2023-10-28 20-52-47 Screenshot from 2023-10-28 20-54-27

Disabling mesh sharers via env var, results in a popup:

Screenshot from 2023-10-28 21-17-00

But dismissing, it does start.

Cursor does not show in main menu, but otherwise I can start the game.

The textures looks good:

Screenshot from 2023-10-28 21-22-09 Screenshot from 2023-10-28 21-20-35

Performance is noticeably lower. Maybe 30–60% lower fps.

Also faces now render correctly (with a lot of texture detail, and bump maps, etc, where previously it was very flat and blurry, if not uniform color).

nebadon2025 commented 1 year ago

Same things on AMD Radeon XT 6900 XT here, with Yesterday's and Today's Mesa from git master (self built).

GPU0:
  apiVersion         = 1.3.267
  driverVersion      = 23.99.99
  vendorID           = 0x1002
  deviceID           = 0x73bf
  deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
  deviceName         = AMD Radeon RX 6900 XT (RADV NAVI21)
  driverID           = DRIVER_ID_MESA_RADV
  driverName         = radv
  driverInfo         = Mesa 24.0.0-devel (git-4f892ecc1e)
  conformanceVersion = 1.3.0.0
  deviceUUID         = 00000000-4400-0000-0000-000000000000
  driverUUID         = 414d442d-4d45-5341-2d44-525600000000

I am using Heroic launcher, with Proton-GE-Proton8-21. No Mangohud, or other layers.

Screenshot from 2023-10-28 20-52-47 Screenshot from 2023-10-28 20-54-27

Disabling mesh sharers via env var, results in a popup:

Screenshot from 2023-10-28 21-17-00

But dismissing, it does start.

Cursor does not show in main menu, but otherwise I can start the game.

The textures looks good:

Screenshot from 2023-10-28 21-22-09 Screenshot from 2023-10-28 21-20-35

Performance is noticeably lower. Maybe 30–60% lower fps.

Also faces now render correctly (with a lot of texture detail, and bump maps, etc, where previously it was very flat and blurry, if not uniform color).

I tried this and it fixed the texture issue, but not only was performance worse but the audio was all messed up for me as well.

baryluk commented 1 year ago

I tried this and it fixed the texture issue, but not only was performance worse but the audio was all messed up for me as well.

@nebadon2025 Yes, audio is more choppy. It usually starts fine, but after a bit of time, it gets stuttery, like audio generation is not keeping up with the game. My guess is that once you disable mesh shaders, game and driver are more CPU bound, and all these threads run at same scheduler priority (only some disk loading/saving threads run at low priority), and it is just not enough spare CPU cycles to run fast enough or something.

I found that manually changing priority of some threads to real time priority, does help with audio:

for T in /proc/$(pgrep --exact --newest AlanWake2.exe)/task/*; do
  if grep -q -F -e "winepulse_mainl" -e "winepulse_timer" -e "FAudio_AudioCli" -e "wine_xinput_hid"  "${T}/comm"; then
    printf "%s %-16s " "${T}" "$(cat "${T}/comm")"
    sudo schedtool -F -p 90 "$(echo $T | awk -F/ '{print $5;}')"
  fi
done

You can also add -e "WSI swapchain q" -e "vkd3d_fence" -e "vkd3d_queue" -e "dxvk-cs" -e "dxvk-submit" -e "vkd3d-swapchain" to the list if you want to experiment, but it actually probably makes things worse.

DRIVANnega commented 1 year ago

its running alright on 24 thread cpu on my audio setup since the video i upload on youtube didn't record any audio in game since i have no idea how to record it on linux but importantly i made video to shown a difference between with disable mesh shaders and one with nothing change ...your audio seems might be issue on difference by amount of cpu cores or difference in cpu architecture that i don't know much but i do know that anyone with less than 8 cores ...it might be reason its choppy, and you onto something with reason mesh shaders is not computing right that its not proper handle correctly by cpu cores between both videos i made before and after on cpu cores usage plus i did have to add this in env RADV_PERFTEST=ext_ms,aco,gpl,sam,nggc,ngg_streamout,rtwave64 to not crash the game

after https://youtu.be/EdtOJ8rHs9A?si=vXPPkirRP_AlY7gB

before https://youtu.be/ZZTFUPigYPE?si=ZbwoMOELSpfG8a9B

remember this is on my 7900xtx...i lost substanial fps than running on windows is 60% more fps, and thing is on linux its same fps as running with RT on low even its not rendering correctly with amd fluid frames beta drivers vs alan wake beta driver does not ihave fluid and they remove antilag+ , not cool for amd doing this and make 2 separate drivers for windows users

baryluk commented 1 year ago

@DRIVANnega This is off topic.

Please lets keep this issue about missing textures / blurry textures, when using mesh shaders. And delete unrelated comments.

DRIVANnega commented 1 year ago

i didn't see missing textures when testing when disabling vkd3d mesh shaders function, it need to be fix

i guess it shows in different setups with missing fbi letters that they find more than missing textures , even steam deck is rendering like that but at bellow 30 fps but remember, did amd been glorify overhype starfield game for exclusive launching 7800xt and 7700xt while making it complicated to get it run on nvidia cards ??? now here we are with this game when tables now turn on amd this time, the more i say it , it keeps gets funnier for every time i see it , what do you want me to say ???

TheAnnoyingFruit commented 1 year ago

So does anyone know if this is mesa radv related or vkd3d proton?

TheAnnoyingFruit commented 1 year ago

If it is a radv issue an issue should be made on their gitlab

dao-ken commented 1 year ago

Same problem on 6800xt, fixed by disabling Mesh Shader, performance became much lower. The fix works only on mesa-git

Blisto91 commented 1 year ago

So does anyone know if this is mesa radv related or vkd3d proton?

No it hasn't been looked at closer yet. The issue here was just so it didn't get lost until then.

maltsaar commented 1 year ago

Someone made a MESA issue. https://gitlab.freedesktop.org/mesa/mesa/-/issues/10060

fakhraldin commented 1 year ago

I can confirm missing textures and clay-like polygon meshes despite using freshly built mesa-git and vkd3d-proton master. PS: Also the frame times are a not quite flat but fluctuating despite using vsync on. Might be related to the main issue with mesh shaders.

baryluk commented 1 year ago

At the moment, it is unclear if this is vkd3d issue, game bug, or Mesa issue. Unfortunately I could not run with mesh shaders on AMDVLK to cross-check, due to a lack of taskShader feature in AMDVLK - as explained in https://github.com/GPUOpen-Drivers/AMDVLK/issues/341 and https://github.com/GPUOpen-Drivers/AMDVLK/issues/324

I will try to use renderdoc or something to capture some traces on Mesa.

Blisto91 commented 1 year ago

renderdoc does not support mesh shaders yet

baryluk commented 1 year ago

@Blisto91 Thanks, good to know. Also it fails to run for me anyway - in Heroic, I added /usr/bin/renderdoccmd capture as a wrapper, and it just does some weird things, and makes game complain about some data directories.

Screenshot from 2023-10-29 18-13-25

Screenshot from 2023-10-29 18-12-34

kkoniuszy commented 1 year ago

I think I got it working with a couple of unmerged MRs for mesa and vkd3d.

I built mesa with 25530, 25659 and 25890, and vkd3d-proton with #1745 and #1749. The face textures and FBI jackets appear normal now (on RX 6800 XT): Screenshot_20231029_191113

Most likely not all of these MRs are required (as discovered by @baryluk, only mesa MR 25659 is really needed). If you want to try this, it's easy to use a patched mesa just for the game without messing up the entire system: https://gist.github.com/Venemo/a9483106565df3a83fc67a411191edbd

You can apply these patches by running the following command in your mesa git repo: curl -sL https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25659.patch | git am

baryluk commented 1 year ago

@kkoniuszy Thx. Testing now. I have my own easy to use script (for Debian, and sometimes Ubuntu), that I was using for few years: https://gist.github.com/baryluk/1041204eff4cc4fad6f1508afe67b562

dao-ken commented 1 year ago

I think I got it working with a couple of unmerged MRs for mesa and vkd3d.

I built mesa with 25530, 25659 and 25890, and vkd3d-proton with #1745 and #1749. The face textures and FBI jackets appear normal now (on RX 6800 XT): Screenshot_20231029_191113

Most likely not all of these MRs are required - I just picked everything that looked like mesh shader related fixes. If you want to try this, it's easy to use a patched mesa just for the game without messing up the entire system: https://gist.github.com/Venemo/a9483106565df3a83fc67a411191edbd

You can apply these patches by running the following command in your mesa git repo: for mr in 25530 25659 25890; do curl -sL https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/$mr.patch | git am; done and the following one in your vkd3d-proton repo: for mr in 1745 1749; do curl -sL https://github.com/HansKristian-Work/vkd3d-proton/pull/$mr.patch | git am; done

Can this method be suggested as a fix for Proton-GE?

Hadrianneue commented 1 year ago

@kkoniuszy poggers, i read gfx11 and ignored thinking its rdna3, its just nir code, that works perfectly, thank you

baryluk commented 1 year ago

Applying https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25659 to current mesa-git is sufficient.

Yay!

kkoniuszy commented 1 year ago

Can this method be suggested as a fix for Proton-GE?

@dao-ken no, Proton-GE does not bundle Mesa. The issue will be fixed when 25659 gets merged and a new Mesa version with it gets released (and packaged by distro maintainers).

Applying https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25659 to current mesa-git is sufficient.

Yay!

@baryluk Thanks, I edited my previous comment.

dao-ken commented 1 year ago

It works just fine, thanks to all smart guys who have figured out so quickly and solved the problem! =)

fakhraldin commented 1 year ago

Confirmed! It works! :)

drin11 commented 1 year ago

Confirmed! It works! :)

hi do u have a tutorial video on how to apply this fix? or step by step where to start? im suffering the same issues textures takes longer to load and sometime missing, map textures too is so slow, thank u

drin11 commented 1 year ago

hi do u have a tutorial video on how to apply this fix? or step by step where to start? im suffering the same issues textures takes longer to load and sometime missing, map textures too is so slow, thank u

fakhraldin commented 1 year ago

Don't worry, i am already figuring out a way, to make the patched mesa radv package available for the linux community. I think the best way is to use it per vulkan-icd-loader and not replacing it with the system's mesa repo.

drin11 commented 1 year ago

Don't worry, i am already figuring out a way, to make the patched mesa radv package available for the linux community.

can u do it for windows too? thank u

drin11 commented 1 year ago

mesa radv

does it work for Nvidia Users?

drin11 commented 1 year ago

hi do u have a tutorial video on how to apply this fix? or step by step where to start? im suffering the same issues textures takes longer to load and sometime missing, map textures too is so slow, thank u

drin11 commented 1 year ago

It works just fine, thanks to all smart guys who have figured out so quickly and solved the problem! =)

hi do u have a tutorial video on how to apply this fix? or step by step where to start? im suffering the same issues textures takes longer to load and sometime missing, map textures too is so slow, thank u

Blisto91 commented 1 year ago

The above is about a Vulkan AMD driver on Linux. It won't do anything for Nvidia users and the game doesn't use Vulkan on Windows. If you are having issues on Windows report it to the game devs. Or Nvidia if a driver bug is suspected.

drin11 commented 1 year ago

The above is about a Vulkan AMD driver on Linux. It won't do anything for Nvidia users and the game doesn't use Vulkan on Windows. If you are having issues on Windows report it to the game devs. Or Nvidia if a driver bug is suspected.

thanks for the info bro

fakhraldin commented 1 year ago

can u do it for windows too? thank u

Sorry friend, but this is not possible. Mesa radv is a special open source linux driver for amd gpus, accessable to us. As for amd's windows driver though the only people being able to regularly adjust that driver are amd developers themselves.

does it work for Nvidia Users?

I am afraid, nvidia gpu owners have no choice but to contact nvidia's support. Nvidia's drivers for both OS, namely windows and linux are proprietary, meaning closed source. Nouveau and nvk are not a viable option at the moment. But hopefully they will be in a couple of years or sooner.

drin11 commented 1 year ago

can u do it for windows too? thank u

Sorry friend, but this is not possible. Mesa radv is a special open source linux driver for amd gpus, accessable to us. As for amd's windows driver though the only people being able to regularly adjust that driver are amd developers themselves.

does it work for Nvidia Users?

I am afraid, nvidia gpu owners have no choice but to contact nvidia's support. Nvidia's drivers for both OS, namely windows and linux are proprietary, meaning closed source. Nouveau and nvk are not a viable option at the moment. But hopefully they will be in a couple of years or sooner.

thanks for this info bro, i hope the devs fix this issues soon it really breaks the immersion,

blimp4242 commented 1 year ago

I think I got it working with a couple of unmerged MRs for mesa and vkd3d.

I built mesa with ~25530~, 25659 and ~25890~, and ~vkd3d-proton with #1745 and #1749~. The face textures and FBI jackets appear normal now (on RX 6800 XT): Screenshot_20231029_191113

Most likely not all of these MRs are required (as discovered by @baryluk, only mesa MR 25659 is really needed). If you want to try this, it's easy to use a patched mesa just for the game without messing up the entire system: https://gist.github.com/Venemo/a9483106565df3a83fc67a411191edbd

You can apply these patches by running the following command in your mesa git repo: curl -sL https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25659.patch | git am

Thanks for the help, i followed the guide and i think i compiled it correctly because running "vkmark" through the "mesa-run" script seems to work fine.

Being new to gaming on Linux i'm struggling finding a way to run the script and launching the game using the "Heroic Games Launcher", do you guys have any tip on how i could do it?

baryluk commented 1 year ago

Thanks for the help, i followed the guide and i think i compiled it correctly because running "vkmark" through the "mesa-run" script seems to work fine.

Being new to gaming on Linux i'm struggling finding a way to run the script and launching the game using the "Heroic Games Launcher", do you guys have any tip on how i could do it?

If you open game settings, you should be able to add a wrapper script:

image

It should be similar when using mesa-run.sh from Venemo

Alternatively exit Heroic launcher, and start entire Heroic launcher using mesa-run.sh. It should also work then for everything started from Heroic launcher. (environment variables are inherited by all child processes)

blimp4242 commented 1 year ago

Thanks for the help, i followed the guide and i think i compiled it correctly because running "vkmark" through the "mesa-run" script seems to work fine. Being new to gaming on Linux i'm struggling finding a way to run the script and launching the game using the "Heroic Games Launcher", do you guys have any tip on how i could do it?

If you open game settings, you should be able to add a wrapper script:

image

It should be similar when using mesa-run.sh from Venemo

Alternatively exit Heroic launcher, and start entire Heroic launcher using mesa-run.sh. It should also work then for everything started from Heroic launcher. (environment variables are inherited by all child processes)

Thank you so much, both methods seem to work, the texture issue is fixed but sadly my performance has tanked:

aw2

juampiursic commented 1 year ago

Don't worry, i am already figuring out a way, to make the patched mesa radv package available for the linux community. I think the best way is to use it per vulkan-icd-loader and not replacing it with the system's mesa repo.

Is there any way we can do this for flatpaks? In flatpak I have 23.1.9 and can't get latest mesa-git, I can get to 23.3.0 but that's installing mesa-git of flathub-beta.