Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WoW under Wine support and performance #6

Closed
snoopcatt opened this issue Sep 30, 2018 · 28 comments
Closed

WoW under Wine support and performance #6

snoopcatt opened this issue Sep 30, 2018 · 28 comments

Comments

@snoopcatt
Copy link

snoopcatt commented Sep 30, 2018

Hello, dear felixdoerre!
In your README.md you said that you have to "locally patch wine to correct load libGL.so
Can you, please, explain, how to do it? Thank you!

Now my game launch log looks like this:


ann@westfalia:~/.wine/drive_c/Program Files (x86)/World of Warcraft$ env ENABLE_PRIMUS_LAYER=1 DXVK_HUD="fps" LD_PRELOAD="libpthread.so.0 libGL.so.1" WINEDEBUG=-all STAGING_SHARED_MEMORY=1 STAGING_WRITECOPY=1 nice -20 optirun wine64 WoW
info:  Game: WoW.exe
info:  DXVK: v0.80
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7d891420: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
PrimusVK: 0x7d891420: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7d891420: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
PrimusVK: 0x7d891420: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7d891420 --> 0x7d891420
info:  GeForce MX150:
info:    Driver: 396.54.0
info:    Vulkan: 1.1.70
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11782 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_11_0
info:  D3D11CoreCreateDevice: Using feature level D3D_FEATURE_LEVEL_11_0
info:  Enabled device extensions:
info:    VK_EXT_shader_viewport_index_layer
info:    VK_EXT_vertex_attribute_divisor
info:    VK_KHR_dedicated_allocation
info:    VK_KHR_descriptor_update_template
info:    VK_KHR_get_memory_requirements2
info:    VK_KHR_image_format_list
info:    VK_KHR_maintenance1
info:    VK_KHR_maintenance2
info:    VK_KHR_sampler_mirror_clamp_to_edge
info:    VK_KHR_shader_draw_parameters
info:    VK_KHR_swapchain
PrimusVK: in function: creating device
PrimusVK: Extension: 3
PrimusVK: Extension: 48
PrimusVK: Extension: 48
PrimusVK: spawning secondary device creation
PrimusVK: After reset:0
PrimusVK: Thread running
PrimusVK: getting rendering suff: 0x7d891420
PrimusVK: fetching dispatch for 0x7dd98240
PrimusVK: GetDeviceProcAddr is: 0x7f6d1de5d360
PrimusVK: Create Swapchain KHR is: 0x7f6d1de6e470
PrimusVK: CreateDevice done
PrimusVK: Gpus: 2
PrimusVK: phys[1]: 0x7f6cf4000bb0
PrimusVK: render queues: 1
PrimusVK:  flags: 7
PrimusVK: Creating Graphics: 0, 
PrimusVK: in function: creating device
PrimusVK: Extension: 3
PrimusVK: Extension: 48
PrimusVK: Extension: 48
info:  DXVK: Read 0 valid state cache entries
PrimusVK: spawning secondary device creation
PrimusVK: fetching dispatch for 0x7f6cf4002ca0
PrimusVK: GetDeviceProcAddr is: 0x7f6d1de5d360
PrimusVK: Create Swapchain KHR is: 0x7f6d1de6e470
PrimusVK: CreateDevice done
info:  PrimusVK: Create Graphics FINISHED!: 0
PrimusVK: Display: 0x7f6cf4002ca0
DPrimusVK: storing as reference to: 0x7dd98240
XVK: Using 4 compiler threads
info:  Game: WoW.exe
info:  DXVK: v0.80
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Error, only one instance allowed

err:   DxvkInstance::createInstance: Failed to create Vulkan instance
ACCESS_VIOLATION : error 132: ERROR #132 (0x85100084) Fatal exception!
 The instruction at "0x0000000003703f88" referenced memory at "0x0000000003703f88".
The memory could not be "executed".
@snoopcatt
Copy link
Author

Got it working by commenting return near

PrimusVK: Error, only one instance allowed

But something wrong with performance: 10 FPS in WoW through primus_vk, 20 FPS with vulkan/intel, 60 FPS via nvidia-xrun/vulkan

Same look in vulkansmoke:

199 presents in 5.0151 seconds (FPS: 39.6801) <- ENABLE_PRIMUS_LAYER=1 optirun vulkan-smoketest

1119 presents in 5.00325 seconds (FPS: 223.655) <- vulkan-smoketest # with Intel card

@felixdoerre
Copy link
Owner

Hi, thanks for testing and providing feedback! That vulkan-smoketest runs with approx 40 fps is not surprising. On my hardware this seems to be the copying-bottleneck caused by the methods I use for copying the image.

WoW seems to create two Vulkan (i.e. DX) instances. I looked at the code and saw, that it does not correctly free the state on VkDestroy instance. That is now corrected in the current master, so primus-vk could start WoW without removing the error-check (could you try that?). The global book-keeping variables can't cope with two instances valid at the same time.

The trick for wine mentioned in README.md is obsolete as of 74e49ce. Additionally the LD_PRELOAD that you use should also workaround this issue, so no real need to investigate there further.

As to why the frame rate for WoW is lower than 30/40 FPS:
Maybe WoW does some work in the main loop where VkQueuePresent is called.
As I was initially lazy and didn't try to do the frame copying asyncronously, that could be impacting your performance negatively.
You could verify that this is indeed the issue by checking how much time is spent in the memcpy-calls:
Adjust the preprocessor macros and look on the printed times.

// #define TRACE_PROFILING(x)
#define TRACE_PROFILING(x) std::cout << "PrimusVK: " << x << "\n";                                                                                                                                                                          

Can you post a few of those numbers?

@snoopcatt
Copy link
Author

First of all thank you for your reply

I've tested primus_vk from master branch with WoW — it's still does not run properly with same error message so I still have to comment out the indicated check
Here is debug log: https://pastebin.com/RyQTWxdQ

Trace profiling:

PrimusVK: Own time for present: 0.0349327 seconds
PrimusVK: Time for plain memcpy: 0.0306487 seconds
PrimusVK: Own time for present: 0.0363317 seconds
PrimusVK: Time for plain memcpy: 0.0288422 seconds
PrimusVK: Own time for present: 0.0342495 seconds
PrimusVK: Time for plain memcpy: 0.0307415 seconds
PrimusVK: Own time for present: 0.0362049 seconds
PrimusVK: Time for plain memcpy: 0.0286413 seconds
PrimusVK: Own time for present: 0.0340272 seconds
PrimusVK: Time for plain memcpy: 0.0293967 seconds
PrimusVK: Own time for present: 0.0398764 seconds
PrimusVK: Time for plain memcpy: 0.0289601 seconds
PrimusVK: Own time for present: 0.0390836 seconds
PrimusVK: Time for plain memcpy: 0.0295552 seconds
PrimusVK: Own time for present: 0.0400204 seconds
PrimusVK: Time for plain memcpy: 0.0309611 seconds
PrimusVK: Own time for present: 0.0416277 seconds
PrimusVK: Time for plain memcpy: 0.0288503 seconds
PrimusVK: Own time for present: 0.0393236 seconds
PrimusVK: Time for plain memcpy: 0.0291247 seconds
PrimusVK: Own time for present: 0.0393958 seconds
PrimusVK: Time for plain memcpy: 0.0285057 seconds
PrimusVK: Own time for present: 0.0387202 seconds
PrimusVK: Time for plain memcpy: 0.0326211 seconds
PrimusVK: Own time for present: 0.0431448 seconds
PrimusVK: Time for plain memcpy: 0.0299144 seconds
PrimusVK: Own time for present: 0.0402408 seconds


Framerate in WoW now stable 18 FPS even in high or minimal gfx preset.

@felixdoerre felixdoerre changed the title Wine support WoW under Wine support and performance. Oct 1, 2018
@felixdoerre felixdoerre changed the title WoW under Wine support and performance. WoW under Wine support and performance Oct 1, 2018
@felixdoerre
Copy link
Owner

ok, so it takes approx 40ms to present the frame (including 30ms for copying it from the nvidia-gpu)

18FPS are 55ms per frame, so there are 15ms per frame where the control flow is not in VkQueuePresent. That means that implementing parallelism here could benefit you 15ms per frame giving you a framerate of 25 FPS (however the game-code might also wait upon VkQueuePresent ). If the additional overhead that is spent despite copying in VkQueuePresent is reduced this can go up to 33FPS (or 22FPS if parallelism is not implemented). The remaining time is spent in copying. (Or waiting for the memory to be mapped, or whatever blocks here)

The pasted debug log indicates that the VkInstance was 4 times created and destroyed and then created two times without being destroyed in between. So it seems that the game really uses two VkInstances at the same time. So for now you'll need to continue to comment out the error-check and I'll keep in mind to try to support multiple VkInstances at the same time.

So WoW would clearly benefit from running the image-copy in a separate thread. I will try to find time and implement this, so we can test, if that can really bring the theoretical performance improvement.

Generally I am not sure how to get the copy-overhead down (and thereby reach frame rates > 30FPS). I described to vague approaches in issues #1 and #2, but i am not sure what they individually will benefit, and what performance gain is theoretically possible there. So I will need time to experiment there.

I've seen that the image copy times are highly dependent on the image size. What's your resolution? FullHD or more?

That the 18 FPS are stable even in high or minimal settings clearly show that it's the copying that takes its time. So I'm sorry that I don't have a quick solution for you.

I'll try to implement parallelism next as I have a strategy for that and it's likely to yield improvements. I'll notify you here when I have code ready for you to try out.

@snoopcatt
Copy link
Author

Resolution is approx. 1600x1050

So I'm sorry that I don't have a quick solution for you.

Absolutely no problem!
Game is playable with optirun without dxvk, with vulkan it just can use higher gfx preset on my system ☺

By the way thank you for your great work!

@felixdoerre
Copy link
Owner

Hi, I just pushed a few commits to master that could improve the framerate. Could you update (comment out the return near Error, only one instance allowed) and try again?

@snoopcatt
Copy link
Author

Hello!
Just checked performance with new version from master branch, framerate improved noticeably — now it is stable 27 FPS.

@felixdoerre
Copy link
Owner

Great. So I guess that makes your games playable?
I just pushed another few commits to master that should address the "multiple instance" issue.
The code should work cleanly now, for games that require multiple VkInstance objects.
So there is no need to comment out the return anymore (in fact the return/error check is removed now)
Can you update to master and check if that works with WoW?

@snoopcatt
Copy link
Author

Yes, now it works with WoW without any modifications.
27 FPS is playable, but still worse than optirun WoW without DXVK (that way do 50 FPS at FHD/Low settings) and much worse than nvidia-xrun (60fps+ at FHD/Medium thu)

By the way thank you for your job, at least now we can launch vulkan applications on the optimus laptops and maybe in future performance will be the same as with nvidia-xrun:)

@felixdoerre
Copy link
Owner

I think it will be tricky to get far over that framerate as that time is mostly spent in copying. However I would expect, that a graphics setting, that causes the game to run with approx. 27 FPS with nvidia-xrun will also yield approx. 27 FPS with primus_vk.

So generally speaking I would expect the performance to be similar to nvidia-xrun when the graphics settings of the game are so high that the framerate is around 30FPS.

Could you try that?

To get framerate higher that 30FPS I am dependent on functionality that vulkan offers, but yes 😄 maybe/hopefully I stumble across features, that allow primus_vk providing higher framerates. However there is still much experimenting to do.

@felixdoerre
Copy link
Owner

I've got another thing to try out for you: I have pushed a few commits to master that allow PrimusVK to use mulitple threads for copying image data. This is deactivated by default and can be activated by setting the environment variable PRIMUS_VK_MULTITHREADING to "1".
This will increase the CPU that primus_vk is consuming. However it allows you to get framerates significantly higher than 30 FPS.
Can you try that on WoW and provide feedback if it improves things?

@appetterson
Copy link

I tested this in GTAV and got pretty impressive frame rates (40-50) but also some of the worst screen tearing I've ever seen. Great progress though. :)

@felixdoerre
Copy link
Owner

felixdoerre commented Oct 10, 2018

I seem to have missed one part of a required synchronization point. Strangely I cannot observer the screen tearing with any application I am testing with. So the problem could be solved now. Could you please update to current master and retry?

@appetterson
Copy link

The tearing is solved now but the framerate has dropped significantly. Most of the time the framerate stays steady at 28-30 fps but occasionally drops as low as 18. Still an improvement over the single threaded version though!

@felixdoerre
Copy link
Owner

felixdoerre commented Oct 13, 2018

Hi, I think we need another round of profiling, to see what exactly makes the framerate drop. I just added a different kind of profiling-output. Could you update, enable that profiling (i.e. comment in #define TRACE_PROFILING_EVENT(idx, evt)) and then upload a few frames of that output? It probably would be best, if I had a variant where the correct waiting is enabled, and a variant from before, where the framerate was better (i.e. comment out line 950 workItem.fence->await(); )

Thanks for debugging this issue with me.

@appetterson
Copy link

Something about my system must have changed because I can no longer get GTA running at all. I'll try to figure it out when I have some time and I'll grab those logs for you. Thanks!

@snoopcatt
Copy link
Author

Hello!

Just tested WoW with latest code from master with PRIMUS_VK_MULTITHREADING=1 and got 60FPS at High settings in World of Warcraft.

Wow!

@snoopcatt
Copy link
Author

Tested a bit more, yes, now it's playable, but with frame drops to 20-30 FPS sometimes.
Don't know why and when it happens, just a fact.

@snoopcatt
Copy link
Author

Hello again!
After updating to WoW 8.1, primus_vk with DXVK stopped work and shows only black screen.

annelion@westfalia:~/World of Warcraft$ WINEDEBUG=-all WINEESYNC=1 ENABLE_PBA=1 ENABLE_PRIMUS_LAYER=1 primusrun wine _retail_/Wow.exe -launcherlogin -uid wow_ruru -d3d11
/usr/bin/primusrun: line 41: warning: command substitution: ignored null byte in input
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7c7f87b0: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7c7f87b0: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_11_0
info:  D3D11CoreCreateDevice: Using feature level D3D_FEATURE_LEVEL_11_0
info:  Enabled device extensions:
info:    VK_EXT_shader_viewport_index_layer
info:    VK_KHR_dedicated_allocation
info:    VK_KHR_descriptor_update_template
info:    VK_KHR_get_memory_requirements2
info:    VK_KHR_image_format_list
info:    VK_KHR_maintenance1
info:    VK_KHR_maintenance2
info:    VK_KHR_sampler_mirror_clamp_to_edge
info:    VK_KHR_shader_draw_parameters
info:    VK_KHR_swapchain
PrimusVK: in function: creating device
PrimusVK: Extension: 3
PrimusVK: Extension: 48
PrimusVK: Extension: 48
PrimusVK: spawning secondary device creation
PrimusVK: After reset:0
PrimusVK: Thread running
PrimusVK: getting rendering suff: 0x7c7f87b0
PrimusVK: fetching dispatch for 0x7cba3620
PrimusVK: GetDeviceProcAddr is: 0x7fd9f60b0360
PrimusVK: Create Swapchain KHR is: 0x7fd9f60c1470
PrimusVK: CreateDevice done
PrimusVK: Gpus: 2
PrimusVK: phys[1]: 0x7c749370
PrimusVK: render queues: 1
PrimusVK:  flags: 7
PrimusVK: in function: creating device
PrimusVK: Extension: 3
PrimusVK: Extension: 48
PrimusVK: Extension: 48
PrimusVK: spawning secondary device creation
PrimusVK: fetching dispatch for 0x7fd9d8004cd0
PrimusVK: GetDeviceProcAddr is: 0x7fd9f60b0360
PrimusVK: Create Swapchain KHR is: 0x7fd9f60c1470
PrimusVK: CreateDevice done
PrimusVK: Create Graphics FINISHED!: 0
PrimusVK: Display: 0x7fd9d8004cd0
PrimusVK: storing as reference to: 0x7cba3620
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7cf590f0: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7cf590f0: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7d11ba80: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7d11ba80: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
PrimusVK: in function: creating device
PrimusVK: Extension: 3
PrimusVK: Extension: 48
PrimusVK: Extension: 48
PrimusVK: spawning secondary device creation
PrimusVK: fetching dispatch for 0x7d3cfb70
PrimusVK: GetDeviceProcAddr is: 0x7fd9f60b0360
PrimusVK: Create Swapchain KHR is: 0x7fd9f60c1470
PrimusVK: CreateDevice done
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7d3dbaa0: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7d3dbaa0: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7dab6590: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7dab6590: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7de38af0: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7de38af0: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_11_0
info:  D3D11CoreCreateDevice: Using feature level D3D_FEATURE_LEVEL_11_0
info:  Enabled device extensions:
info:    VK_EXT_shader_viewport_index_layer
info:    VK_KHR_dedicated_allocation
info:    VK_KHR_descriptor_update_template
info:    VK_KHR_get_memory_requirements2
info:    VK_KHR_image_format_list
info:    VK_KHR_maintenance1
info:    VK_KHR_maintenance2
info:    VK_KHR_sampler_mirror_clamp_to_edge
info:    VK_KHR_shader_draw_parameters
info:    VK_KHR_swapchain
PrimusVK: in function: creating device
PrimusVK: Extension: 3
PrimusVK: Extension: 48
PrimusVK: Extension: 48
PrimusVK: spawning secondary device creation
PrimusVK: fetching dispatch for 0x7e01d4d0
PrimusVK: GetDeviceProcAddr is: 0x7fd9f60b0360
PrimusVK: Create Swapchain KHR is: 0x7fd9f60c1470
PrimusVK: CreateDevice done
PrimusVK: Support: 0x7de38af0, 1
warn:  DXGI: MakeWindowAssociation: Ignoring flags
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7e657a90: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7e657a90: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7e940410: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7e940410: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  Game: Wow.exe
info:  DXVK: v0.70
warn:  OpenVR: Failed to locate module
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
PrimusVK: CreateInstance
PrimusVK: Getting devices
PrimusVK: 0x7ebf45c0: 
PrimusVK: got render!
PrimusVK: Device: GeForce MX150
PrimusVK:   Type: 2
PrimusVK: 0x7ebf45c0: 
PrimusVK: got display!
PrimusVK: Device: Intel(R) UHD Graphics 620 (Kabylake GT2)
PrimusVK:   Type: 1
info:  GeForce MX150:
info:    Driver: 390.87.0
info:    Vulkan: 1.0.65
info:    Memory Heap[0]: 
info:      Size: 2048 MiB
info:      Flags: 0x1
info:      Memory Type[7]: Property Flags = 0x1
info:      Memory Type[8]: Property Flags = 0x1
info:    Memory Heap[1]: 
info:      Size: 11953 MiB
info:      Flags: 0x0
info:      Memory Type[0]: Property Flags = 0x0
info:      Memory Type[1]: Property Flags = 0x0
info:      Memory Type[2]: Property Flags = 0x0
info:      Memory Type[3]: Property Flags = 0x0
info:      Memory Type[4]: Property Flags = 0x0
info:      Memory Type[5]: Property Flags = 0x0
info:      Memory Type[6]: Property Flags = 0x0
info:      Memory Type[9]: Property Flags = 0x6
info:      Memory Type[10]: Property Flags = 0xe
info:  DxgiVkPresenter: Recreating swap chain: 
  Format:       VK_FORMAT_B8G8R8A8_UNORM
  Present mode: VK_PRESENT_MODE_IMMEDIATE_KHR
  Buffer size:  1913x1063
PrimusVK: joining secondary device creation
PrimusVK: When startup hangs here, you have probably hit the initialization deadlock
PrimusVK: joining succeeded. Luckily initialization deadlock did not occur.
PrimusVK: Application requested 2 images.
PrimusVK: Creating Swapchain for size: 1913x1063
PrimusVK: MinImageCount: 3
PrimusVK: fetching device for: 0x7e01d4d0
PrimusVK: found: 0x7fd9d8004cd0
PrimusVK: FamilyIndexCount: 0
PrimusVK: Dev: 0x7fd9d8004cd0
PrimusVK: Swapchainfunc: 0x7fd9f60c1470


@leonmaxx
Copy link

This log looks similar to my WoT issue. Can you please when it shows black screen type in terminal:
ps xa | grep Wow.exe
If it'll have [defunct] word in output, or even empty output, that it's same issue as mine (silent crash of main application).

@snoopcatt
Copy link
Author

No, it does not show [defunct], but window does not responding.

@snoopcatt
Copy link
Author

fixed by forcing windows version to Win7

@leonmaxx
Copy link

Happy you, doesn't work for me.

@felixdoerre
Copy link
Owner

Is there anything left, that primus_vk can do here, or can we close the issue?

@Arucard1983
Copy link

Once I patch the source code to build the 32-bit of this wonderful software to play Assassin's Creed III on Steam with DXVK, I also notice that the framerate only improve with the following variable:
PRIMUS_VK_MULTITHREADING=1

On 64-bit programs, there's no need to use such workaround, and even can degrade framerate instead.
I suggest to add a mpvkrun script to use the multithreading flag:
#!/bin/sh PRIMUS_VK_MULTITHREADING=1 ENABLE_PRIMUS_LAYER=1 exec primusrun "$@"

Along the standard pvkrun to workaround the two default settings.

@felixdoerre
Copy link
Owner

PRIMUS_VK_MULTITHREADING=1 is the default since a while now: https://github.com/felixdoerre/primus_vk/blob/master/primus_vk.cpp#L418 So there is no need to for it to be included in the starter. Also primus_vk should easily be buildable for 32-bit by setting CXXFLAGS=-m32 in the make file. If that needed any other patches, please let me know.

@ellogwen
Copy link

Thank you for this software @felixdoerre
Using with the latest 8.1.5 WoW patches and ge-protonified-nofshack-4.9-x86_64 runs fine, but only with DXVK 1.0.1 and not 1.2.1

@felixdoerre
Copy link
Owner

I think anything for this issue is done for now. So I'll close it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants