doitsujin / dxvk

Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine
zlib License
13.18k stars 849 forks source link

Path of Exile - vkCreateImage and vkCreateImageView errors #147

Closed jmis closed 6 years ago

jmis commented 6 years ago

IMAGE(ERROR): object: 0x0 type: 0 location: 666 msgCode: 165676976: vkCreateImage: usage bit VK_IMAGE_USAGE_STORAGE_BIT is not supported for format VK_FORMAT_R8G8B8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL. The spec valid usage text states 'If tiling is VK_IMAGE_TILING_OPTIMAL, and VkFormatProperties::optimalTilingFeatures (as returned by vkGetPhysicalDeviceFormatProperties with the same value of format) does not include VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, usage must not contain VK_IMAGE_USAGE_STORAGE_BIT' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageCreateInfo-tiling-00984)

IMAGE(ERROR): object: 0x0 type: 0 location: 3533 msgCode: 180357100: vkCreateImageView() pCreateInfo->format VK_FORMAT_R8G8B8A8_SRGB cannot be used with an image having the VK_IMAGE_TILING_OPTIMAL and VK_IMAGE_USAGE_STORAGE_BIT flags set. The spec valid usage text states 'If image was created with VK_IMAGE_TILING_OPTIMAL and usage contains VK_IMAGE_USAGE_STORAGE_BIT, format must be supported for storage images, as specified by the VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT flag in VkFormatProperties::optimalTilingFeatures returned by vkGetPhysicalDeviceFormatProperties with the same value of format' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageViewCreateInfo-image-01014)

Software information

System information

Log files

doitsujin commented 6 years ago

That's a general bug in the swapchain code, it should check whether the image format can be used for storage images at all before creating the back buffer. Will fix that.

Don't get your hopes up though, that bug doesn't have any impact on any game on any hardware.

Glog78 commented 6 years ago

i can play poe with dxvk already. I am on an gtx 970 with wine-staging 3.3 +wic patch with vulkan.dll's from wine-staging 2.25 and d3dcompiler_43 + d3dcompiler_47 set native. Not sure if that helps you ?

Thaodan commented 6 years ago

what is wic patch?

Glog78 commented 6 years ago

the one you posted https://bugs.winehq.org/show_bug.cgi?id=42695.

jmis commented 6 years ago

@Glog78 What driver are you using?

Glog78 commented 6 years ago

https://i.imgur.com/bgu4KRC.jpg / here a screenshot Driver: 390.25.0

jmis commented 6 years ago

@Glog78 Did you ever encounter a "TextureD3d11.cpp" application error when loading into the city?

Glog78 commented 6 years ago

Not as extra message on the screen. But i can try a new character if it helps and play to the first city. Maybe its the first portal or something like this.

@jmis on my end even with a new character i can get into the first city and no problems so far

jmis commented 6 years ago

I'm guessing the error is related to wine 3.3. Maybe I can figure something out from looking at the staging patches.

Glog78 commented 6 years ago

the last commit 5b9e4c1faa41494d83a878fe621ee16f11bce2ab broke it for me too.

Update old version doesn't work for me either now. I dunno what changed since yesterday. This is really strange.

Glog78 commented 6 years ago

Update: the last git works again for me. I hope @jmis you figure out what isn't working for you. The DX11 code seems to be much more responsive than the older dx9 or dx9ex renderer. So thank you for dxvk.

jmis commented 6 years ago

@Glog78 You have a strange wine setup for DXVK. I'm using wine-vulkan 3.3 and the latest DXVK. Wine-staging lets me load the game using DX11 to OpenGL but it lacks the vulkan interface so DXVK fails. Some patch in wine-staging is fixing the issue. I have an email out to GGG support asking for more information about the error. Hopefully that will help figure it out.

doitsujin commented 6 years ago

The validation errors should be fixed in 56c826be85f107ce0c08cae2309ac669a556c0b9, please let me know if that is the case.

Glog78 commented 6 years ago

@jmis i have both setups. wine-vulkan 3.3 with lunar sdk and so on. But the sdk is blowing the size of the wineprefix. So i did compile wine-staging-git and added into the system32 and syswow64 folders the precompiled vulkan dlls from wine-staging 2.25. Both prefixes works with DXVK but i prefer the much smaller second on and this is the prefix i tested path of exile before and it works for me. Tomorow i will also test the new commits.

Glog78 commented 6 years ago

@doitsujin i tested the 06cff50453abcda2cadd0e485e6e4327704889c3

DXVK_SHADER_VALIDATE=1 DXVK_DEBUG_LAYERS=1 DXVK_LOG_LEVEL=trace DXVK_HUD=1 wine ./PathOfExile_x64.exe

....

IMAGE(ERROR / SPEC): object: 0x0 type: 0 msgNum: 165676926 - vkCreateImage: Image mip levels exceed image format maxMipLevels for format VK_FORMAT_R8G8_UNORM. The spec valid usage text states 'mipLevels must be less than or equal to VkImageFormatProperties::maxMipLevels (as returned by vkGetPhysicalDeviceImageFormatProperties with format, imageType, tiling, usage, and flags equal to those in this structure)' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageCreateInfo-extent-00959) IMAGE(ERROR): object: 0x0 type: 0 location: 769 msg_code: 165676926: Object: 0x0 | vkCreateImage: Image mip levels exceed image format maxMipLevels for format VK_FORMAT_R8G8_UNORM. The spec valid usage text states 'mipLevels must be less than or equal to VkImageFormatProperties::maxMipLevels (as returned by vkGetPhysicalDeviceImageFormatProperties with format, imageType, tiling, usage, and flags equal to those in this structure)' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkImageCreateInfo-extent-00959) err: DxvkImage::DxvkImage: Failed to create image ...

There are also shaders with unknown vertex semantic: debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: Compiling shader VS_74bda68a39ac4fb17be9fc18f861ab7a0db3003e debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: D3D11Device: No such vertex shader semantic: TEXCOORD0 debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: D3D11Device: No such vertex shader semantic: TEXCOORD0 debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: D3D11Device: No such vertex shader semantic: TEXCOORD0 debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: D3D11Device: No such vertex shader semantic: TEXCOORD0 debug: D3D11Device: No such vertex shader semantic: TANGENT0 debug: D3D11Device: No such vertex shader semantic: TEXCOORD0 debug: D3D11Device: No such vertex shader semantic: TANGENT0

I hope this helps

doitsujin commented 6 years ago

I'd need an apitrace to debug the validation issue. Although it's extremely weird that the number of mip levels appears to be limited for a given format.

There are also shaders with unknown vertex semantic:

Not a bug.

Glog78 commented 6 years ago

@doitsujin do you need one from inside of wine or is it enough to give you one from linux with wine on top ?

doitsujin commented 6 years ago

inside wine or windows, because only then apitrace can capture the D3D commands. Running the Linux version of apitrace with wine only records OpenGL commands, which is completely useless in this case.

Glog78 commented 6 years ago

cleaned all shader caches and started with:

DXVK_SHADER_VALIDATE=1 DXVK_DEBUG_LAYERS=1 DXVK_LOG_LEVEL=trace DXVK_HUD=1 wine ./apitrace/bin/apitrace.exe trace -a dxgi PathOfExile_x64.exe

in wine-vulkan (git)

https://www.dropbox.com/s/2le2uym83orjk5x/logs.7z?dl=0

Glog78 commented 6 years ago

disabling image mapping e6814332e741ac7222fe1c372fda7aed86ce657b fixes it for me again

jmis commented 6 years ago

@Glog78 Did you have any luck when trying wine-vulkan 3.3 + latest DXVK?

Glog78 commented 6 years ago

@jmis no wine-vulkan (git) doesn't work for me.

if you are on arch i can provide you my PKGBUILDS and the files i dropped into wine-staging (git).

dumpsters commented 6 years ago

Did some testing

Linux:

Using wine-vulkan-git with the WIC patch applied I also get the TextureD3d11.cpp game crash window popup when initially loading into the city, login screen works normally.

DXVK_SHADER_VALIDATE=1 DXVK_DEBUG_LAYERS=1 DXVK_LOG_LEVEL=trace DXVK_HUD=1 WINEARCH=win64 WINEPREFIX=~/.wine_vms/PoE wine 'C:\Games\Path of Exile\PathOfExile_x64.exe' logs: [same run] d3d11 log: https://pastebin.com/raw/qD85JwUM dxgi log: https://pastebin.com/raw/JL8ZxuYM

[different runs, same crash] wine output: https://pastebin.com/raw/3pCU8qgx apitrace: https://mega.nz/#!HYh1jIKI!jpwlFPLcOaZkOjEobSETtHf0XDWZXT-uMCi3IxlkyEg

Windows:

Using DXVK .dll compiled with the above setup it works pretty well, even with dynamic resolution although it stays on low quality for most of the time and doesn't improve performance that much. Loading screens seem to be a bit longer than DX11 and there is very annoying stutter/framedrops [SAME ENVIRONMENT VARS] .../installdir/PathOfExile_x64.exe --nointro --nologo --noasync logs (longer since I played for a bit): d3d11 log: https://pastebin.com/raw/4QUjmDAz dxgi log: https://pastebin.com/raw/HttaQTTH

Does anyone know if the installdir/CachedHLSLShaders or installdir/ShaderCacheD3D11 can mess with DXVK?

vamur commented 6 years ago

Path of Exile works on wine staging 3.3 + AMD + mesa git with both image tiling and without. Maybe an issue with Nvidia driver? Or Wine and Nvidia combination.

Glog78 commented 6 years ago

for me ->

works: without tiling -> wine staging git + wine staging 2.21 vulkan dlls + wic patch (CoInitialize Patch) + nvidia

doesn't work: with tiling -> wine staging 3.3 + wine staging 2.21 vulkan dlls + wic patch (CoInitialize Patch) + nvidia -> the old version had vkCreateImage Errors with and without tiling -> wine vulkan git + wic patch (CoInitialize Patch) + nvidia -> TextureD3d11.cpp

can't test because i don't have this wine setup -> wine staging git + wine vulkan patches ....

Glog78 commented 6 years ago

One more information. I updated today wine-staging (git) and since today i get the TextureD3d11.cpp error with wine-staging too. So it might actually be a commit in wine which creates this error.

GloriousEggroll commented 6 years ago

@Glog78 I was getting the same TextureD3d11.cpp error with wine-staging-git. Overwatch also has a weird render issue with current wine-staging-git. Rolling back wine-staging to this hash e8d98eb7ba2e7aaf610196b67c713f2be13a15ff (and wine mainline hash dfde1195385df5ddb11f1104a0e744596b99477f) fixes the problem. You still need the CoInitialize Patch to launch the game.

xethm55 commented 6 years ago

Attempted to run this with https://aur.archlinux.org/packages/wine-staging-vulkan-git/ and https://aur.archlinux.org/packages/dxvk-git/ following the guide from @dumpsters above. I get the following error:
err: ExtensionSet::addInstanceExtensions: Failed to query instance extensions wine: Unhandled page fault on read access to 0x00000000 at address 0x1404f622e (thread 002e), starting debugger... Unhandled exception: page fault on read access to 0x00000000 in 64-bit code (0x00000001404f622e).

Computer: Ryzen 5 1600 16 GB Ram 2GB RX560 Running amdgpu Driver Up-to-date Manjaro with kernel 4.15.8

Any ideas what I did wrong?

Full run log attached (note I don't have any WINEDEBUG explicity set) dxvk_poe.txt

xethm55 commented 6 years ago

Ok, I figured out what I did wrong. I input the registry keys wrong. Once I corrected them with the attached file I was able to get into game. However my Performance was really bad with the HUD up I was getting ~1-5FPS. Also was not able to get into the Town as I had the same error as others: TextureD3d11.cpp

vulkan.reg.txt

GloriousEggroll commented 6 years ago

@xethm55 read my reply. it tells you why the Textured3d.cpp error is happening. it's not dxvk related.

xethm55 commented 6 years ago

I rebuilt https://aur.archlinux.org/packages/wine-staging-vulkan-git/ with pinning wine-vulkan and wine-staging the the above mentioned versions. When I attempt to run with them I just get an error that VK_KHR_surface cannot be found.

The VulkanSDK test Cube.exe only runs normally after commit 32eef26a7dbbd755d20494454e3b657c48ba1bc1

GloriousEggroll commented 6 years ago

@xethm55 looks like its fixed as of 3.4 staging (rebased a few minutes ago) https://github.com/wine-staging/wine-staging/tree/v3.4

poe34

jmis commented 6 years ago

Fixed as well for me with wine-staging 3.4 + latest DVXK.

I wish we knew the root cause though.

dumpsters commented 6 years ago

I managed to load into town as well with wine-staging 3.4 but performance is abysmal, like 1~8FPS. Performance in the login screen is worse than before as well

vamur commented 6 years ago

Performance is about 30%-100% better than WineDX11 on low end AMD with wine-staging 3.4 + old DXVK with image tiling. Getting about 40-120 in various areas in Act 1, with average of 60+ on all low settings 1080p. There is however lots of initial stuttering, somewhat more than on DX11, due to shader compilation. Using code from Lutris.

DXVK_HUD=1 WINEDEBUG=-all mesa_glthread=true wine64 "/homedir/.wine/drive_c/Program Files (x86)/Grinding Gear Games/Path of Exile/PathOfExile_x64.exe" --waitforpreload --nologo --gc2

doitsujin commented 6 years ago

Can anyone please test this with the direct-image-mapping branch?

Glog78 commented 6 years ago

doitsujin direct-image-mapping branch now works for me too.

https://i.imgur.com/Q9VK7jn.jpg

Great work.

Oh yeah this is wine-staging 3.4 + sdk + dxvk + the patch needed for poe (coinitialize)

xethm55 commented 6 years ago

With wine-staging 3.4 I am able to get into the game and performance seems better than Directx9, but I am missing a lot of textures. This is on master with the command DXVK_HUD=1 WINEARCH=win64 WINEDEBUG=-all mesa_glthread=true wine PathOfExile.exe --waitforpreload --gc2

screenshot_2018-03-17_10-38-39

xethm55 commented 6 years ago

I get the same results with the direct-image-mapping branch.

doitsujin commented 6 years ago

@xethm55 please try with mesa-git. mesa 17.3 has a bunch of bugs that affect DXVK.

GloriousEggroll commented 6 years ago

PoE Renders properly on mesa-git with direct-image-mapping branch, but stutters pretty badly. fps stayed around 30-40 on low settings. I will also test with master and pull master changes into image mapping and test that way. Used --nologo --waitforpreload

0:58 and 1:18 for some stuttering: https://www.youtube.com/watch?v=2Qptidx0M_w

vamur commented 6 years ago

For stuttering it's a PoE issue - https://bugs.winehq.org/show_bug.cgi?id=34011

fps stayed around 30-40 on low settings

What about the Ledge and Climb in Act 1? Have you disabled Engine Multithreading?

Can anyone please test this with the direct-image-mapping branch?

Is there a precompiled version? Compiling mingw is a lot of hassle on arch.

GloriousEggroll commented 6 years ago

@vamur I already had glsl disabled and -gc 1. -ns makes no difference. stuttering is still there. also tried various combinations of noasync and waitforpreload

xethm55 commented 6 years ago

@vamour see https://wiki.archlinux.org/index.php/Unofficial_user_repositories#mingw-w64 There is also https://wiki.archlinux.org/index.php/Unofficial_user_repositories#mesa-git to upgrade mesa. Note: I put SigLevel = Never under the section of each user repo as they are unsigned. Note 2: The above can be dangerous and it not recommeneded.

xethm55 commented 6 years ago

I have updated to mesa-git. Runing glxinfo -B I get: glxinfo -B name of display: :0.0 display: :0 screen: 0 direct rendering: Yes Extended renderer info (GLX_MESA_query_renderer): Vendor: X.Org (0x1002) Device: Radeon RX 560 Series (POLARIS11 / DRM 3.23.0 / 4.15.8-1-MANJARO, LLVM 7.0.0) (0x67ff) Version: 18.1.0 Accelerated: yes Video memory: 2024MB Unified memory: no Preferred profile: core (0x1) Max core profile version: 4.5 Max compat profile version: 3.1 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.1 However when I run Path of Exile with DXVK HUD it still shows 17.3.6 and I have all the same graphical glitches. I have rebuilt Wine and DXVK. Cleared out the shader caches in PoE, and created a fresh production_config.ini as well. Any Ideas?

Glog78 commented 6 years ago

xethm55 i supose you are starting the 32bit executable instead of the 64bit executable and since you only upgrade to mesa-git you don't have upgraded your 32bit libs. Besides mesa-git you might want to have lib32-mesa-git most likely.

GloriousEggroll commented 6 years ago

Game's running great now. GLSL disabled, anti-aliasing and multithreading disabled in game, using launch options -gc 2 --softwareaudio:

https://www.youtube.com/watch?v=Oml17BUf760

xethm55 commented 6 years ago

I have both mesa-git and lib32-mesa-git installed. I tried it with both the 32bit and 64bit executables. Same results. I am at a loss.

Edit: If figured it out. I need to also install vulkan-radeon-git and lib32-vulkan-radeon-git. Once I did that i was able to run just fine -- except for the low FPS when loading shaders.

pingubot commented 6 years ago

@GloriousEggroll : Afaik, the glsl option should not have any impact cause itis an option for dx->opengl, which is not in use when using dxvk. In addition, could ou specifiy which version of dxvk you are using to have the game running grea now ?

GloriousEggroll commented 6 years ago

@pingubot thats what i thought about glsl, but i had it disabled before i set up dxvk anwyay. I compiled it last night. latest commit when i compiled was a8eecfbfe59e4aecc5d0332ce5c1394a53d065ea