-
Notifications
You must be signed in to change notification settings - Fork 885
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
Graphics Pipeline Library #2798
Comments
Yes, it does. The implementation is pretty much done, and it can be used on Nvidia's Vulkan developer drivers (515.49.10). The code to fast-link can be found here, the rest is a bit more complicated but it starts with the D3D9/D3D11 front-ends calling
The whole process of obtaining a new pipeline is done by this code. TL;DR:
It can cause a few hitches, but tessellation pipelines are rare, even in games that use a lot of tessellation. Not the end of the world.
I have considered this, it's not impossible, but we'd need to compile the combined pre-rasterization library at draw time anyway, so there will always be some hitching since ~half the work is still being done at the last possible moment. It might be less bad than compiling a monolithic pipeline. Might try to implement this in the future, for the initial implementation this was just not a priority since it adds a bunch of extra complexity.
This is not possible. Pre-rasterization pipelines need all participating stages (i,e, vertex, or vertex + tess control + tess eval, or vertex + geo, or all of them at once), we simply don't get enough info from the D3D app to do this. |
I have also been following this feature closely because I have a handful of games that are unplayable on Proton due to shader compile stuttering so I still have to dual boot to play them. I can at least answer the driver question... as of now you still need the vulkan beta driver. I already tried the new stable 515.65.01 driver thinking it would have the new extension, but it didn't so I went back to 515.49.10 vulkan beta. As far as I can tell, the graphics pipeline library is only in dxvk master and not in any released versions, so it's not included in any valve-released versions of proton. In theory it should be available in the latest version of proton-ge-custom which uses dxvk master, however when I tried that it broke all the games I wanted to play. So for now I'm waiting on an official dxvk release that includes the feature and then an official proton release that includes that version of dxvk, or a release of proton-ge-custom that doesn't break my games. Installing dxvk-master and using it with lutris might work but I have not tried it yet. |
I'm closing this as I think the questions have been answered. If you have more questions, just reopen the issue and ask. |
Perhaps doesn't warrant a dedicated report: I've noticed that Assassin’s Creed Odyssey still exhibits some notable shader compile stutter when traversing settlements/cities vs. native D3D11. Side note: Game's performance also has regressed for me with Proton 7.0 and Experimental, which is not related to the DXVK version used. 6.3-8 with DXVK git-master yields better performance (but still the aforementioned shader compile stutter, despite Nvidia Vulkan dev driver 516.49.14). |
Shader compilation stutter can still happen if the game loads shaders at draw time or uses specific features like tessellation. |
Upstream DXVK has implemented the GraphicsPipelineLibrary (GPL) back in August, which takes over dxvk-async's job: https://www.khronos.org/blog/reducing-draw-time-hitching-with-vk-ext-graphics-pipeline-library doitsujin/dxvk#2798 Driver support for Nvidia was added in version 515.49.10: https://developer.nvidia.com/vulkan-driver Driver support for AMD/RADV was added in August 2022 and is an ongoing WIP: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17542 Per the above, it can be exposed for testing on AMD/RADV via: RADV_PERFTEST=gpl dxvk-async now causes problems with the dxvk-cache, which is not something new users may know how to clear: Sporif/dxvk-async#55 In light of the above, in addition to the current rebase still not working properly, I am removing the dxvk-async patch from Proton-GE. RIP dxvk-async 2018-2023
Hi, I've been following the Graphics Pipeline Library developments with great curiosity, and am amazed at the insanely high quality of work you're doing. @doitsujin You're an absolute genius!
But even though I've spent hours reading commits relating to the new library, some things are unclear to me and I've given up trying to understand them myself.
I have a few questions:
ID3D11Device::CreateVertexShader
orID3D11Device::CreatePixelShader
, does DXVK now directly convert that to the Vulkan Graphics Pipeline Library, compiling those DirectX shader "lego pieces" during loading screens, for quick fast-linking later? If true, then we'd get similar loading screens on Linux as on Windows, and won't need a shader cache anymore. I am super excited about that possibility.I also have two optimization ideas for the 3rd point (tesselation and geometry shaders) and wonder what your thoughts are:
Lastly, if you need real-world testing of the new code paths, I'd be willing to help out. I just need to figure out which exact NVIDIA driver I need. It's a bit of a mess. https://developer.nvidia.com/vulkan-driver has a "beta driver v515.49.10" from July 20th, but they've also done a general, public "Latest Production Branch Version: 515.65.01" from from August 2nd. I'm unsure if the 515.65.01 driver already contains the required Graphics Pipeline Library support, or if I need to install beta v515.49.10... I assume that if anyone in the world knows which driver is correct, it would be you. :)
With best regards,
Johnny
The text was updated successfully, but these errors were encountered: