With the Vulkan 1.1.88 spec update including the new VK_EXT_transform_feedback extension, DXVK can finally support Stream Output, which has been a big issue for a number of games (see #135).
All of the following are required in order for Stream Output to work. If any of these requirements are not met, you will see log messages indicating that Stream Output support is not present.
Please make sure that your setup is working correctly before reporting bugs.
Note: Proton 3.16 already includes the required patches for Wine and DXVK, so you will only need to update your Vulkan driver in order to use it with Proton.
DXVK enables Stream Output support starting with release v0.90.
You will need a driver which implements the VK_EXT_transform_feedback extension:
Wine 3.18 and earlier versions need to be patched in order to expose the extension to DXVK:
https://source.winehq.org/patches/data/152604
Note: Current development builds no longer require this patch. On Arch Linux, you may use wine-tkg-git.

Witcher 3: Geralt fighting the previously problematic Sirerens, with Hairworks enabled.
That's GREAT news!!!
Wow! I think the time to ditch the Windows partition has come. But I'll wait for the final version of Wine and Nvidia drivers with support, anyone know the ETA for those?
Wine should hopefully come with updated winevulkan in the next release (3.19, probably in two weeks). Not sure when official (non-beta) drivers will land, might still take a while.
That's great!
(The link in the release notes ([...], see this issue for details) is incorrect and leads to the release page with # 695 appended. )
Fixed the link, thanks for the heads-up.
@doitsujin Brilliant work, THANK YOU!!! and to everyone involved into making this happen.
If anyone needs, I have uploaded a pre-patched version of Wine 3.18 with the Stream Output.
Wine 3.18 Source: https://drive.google.com/file/d/1SPFB71dZCejKVLxwIrkGaBQiyStPd9eb
Pre-compiled Build with StreamOutput (using Debian 9.5): https://drive.google.com/file/d/1Eoaydn1XbwK0UWpn8swZ7DKcdrF1Ybxy
I haven't tried Witcher 3 yet however here's 2 screenshots of Vikings: Wolves of Midgard with DXVK, the main character and all enemies didn't render at all previously.


Oooooooooooohh, boy!
Huge thanks for this !!!
Can't wait to get home and try it on the Witcher.
I suppose https://github.com/doitsujin/dxvk/blob/8630ee235a7a97c0ad87af2703b3c06bfd8e475e/src/util/config/config.cpp#L45 isn't needed anymore or am I missing something?
Nvidia: Use the Vulkan beta version 396.54.09.
How about those on 410.XX already? Either downgrade to the 396 beta or wait for one to be released for 410.xx?
@MinIsMin The option is still used for users who don't have a driver/wine version with Transform Feedback support.
@C0rn3j The 396 beta driver is currently the only one which implements the extension. But it also has performance improvements which have not yet landed in the main branch, so it might be worth checking out either way (unless you have a Turing GPU).
Rotfiends working in TW3:

Giana Sisters : Twisted Dreams crashes with RADV driver with transform feedback enabled (required by the game). Previous versions of DXVK (0.80 and 0.81 tested) work, but with broken output. The feature is working correctly on my system since I can successfully run Witcher 3 with correctly rendered rotfiends and hairworks.
Here's the error:
SPIR-V parsing FAILED:
In file ../mesa-9999/src/compiler/spirv/vtn_variables.c:1952
base_val->value_type == vtn_value_type_pointer
1244 bytes into the SPIR-V binary
Might be a bug in my shader compiler, I'll have to take a look at it.
Very nice to see this done!

Hurrah! Hurrah! HURRAH! News of the year. :) THANK YOU!
@doitsujin Brilliant work, THANK YOU!!! and to everyone involved into making this happen.
If anyone needs, I have uploaded a pre-patched version of Wine 3.18 with the Stream Output.
Wine 3.18 Source: https://drive.google.com/file/d/1SPFB71dZCejKVLxwIrkGaBQiyStPd9eb
Pre-compiled Build with StreamOutput (using Debian 9.5): https://drive.google.com/file/d/1Eoaydn1XbwK0UWpn8swZ7DKcdrF1Ybxy
I haven't tried Witcher 3 yet however here's 2 screenshots of Vikings: Wolves of Midgard with DXVK, the main character and all enemies didn't render at all previously.
Sorry but your game is on linux for what try this game with dxvk ?
@liberodark Because it's a test case for Stream Output? Please don't start any off-topic Linux Native vs Wine discussions.
I'm quite glad to hear that it works as expected for the most part.
I feel confused everytime someone talk about technical stuff, so I need to ask some questions if you excuse me:
1- How to apply a patch to Wine manually?
2- What Mesa version that support VK_EXT_transform_feedback extension?
3- Does esync-staging-ppa-3.18 in Lutris have this patch?
1- Like any other patch. Google has all the answers for that.
2- Devel, with some added patches that aren't yet merged in master.
3- Yes.
@liberodark
Sorry but your game is on linux for what try this game with dxvk ?
Just to keep to keep it short - the Linux version is not available on GOG.
@ahmed-elsayed2017
I feel confused everytime someone talk about technical stuff, so I need to ask some questions if you excuse me:
1- How to apply a patch to Wine manually?
You really need to be a bit trusted with source code and compiling. Not the easiest task at first, you will need to invest some time, but if you have fun with it, you will feel better after that ;)
Sorry but your game is on linux for what try this game with dxvk ?
Also, because GOG users have no access to Linux version, it's Steam only. GOG sells only Windows version, and Kalypso don't want to release Linux version there without explaining the reason. So Wine+dxvk is a reasonable use case.
THIS is just awesome! Thank you @doitsujin and everyone who helped to make this possible!
Stream Output seems to be working properly with the GOG version of The Witcher 3 on an AMD RX580 8GB, Kubuntu 18.04 x64 (KDE Plasma 5.13).
Manually built Wine prefix with:
I tested on Skellige (lot of sirens and ekhidnas).
The game also seems to be faster by ~5-10% but that may be because I have updated from an older DXVK version (0.42).
I installed mesa-git 18.3 from AUR (it took 9 hours to compile), and it updated mesa+vulkan-radeon+vulkan-intel, then I updated vulkan-icd-loader to the latest version I found 1.1.85+2969+5abee6173-1, then I installed esync-staging-ppa-3.18 that contains the latest patches, but DXVK_HUD shows Vulkan version 1.0.68! What did I do wrong?!
Don't know, please post your full DXVK logs.
Also, there's no way that compiling mesa-git takes 9 hours, except maybe if you did it on a first-gen Raspberry Pi. Any modern desktop CPU can do it in a few minutes, so I'm not sure what exactly you compiled there.
And please ignore the Vulkan version. It means absolutely nothing, and you don't need to update the ICD loader.
witcher3_d3d11.log
witcher3_dxgi.log
I went to the sea looking for Sirens, but it is still invisible for me.
You haven't said your graphics stack, but AUR mesa-git doesn't have any of the patches added. They haven't been pulled to master yet, you have to add a prepare() section to the PKGBUILD that applies the relevant patches.
I don't know how to do that. I will wait for the next update from Mesa that contains these patches.
@doitsujin I asked about the time it took me to compile Mesa-git on Manjaro forum, and someone there told me: "Sounds about right.", so I guess it is ok.
@ahmed-elsayed2017 modify your /etc/makepkg.conf file to have your system use all your CPU during build by adding a -j
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j12"
Not sure what the hell the Manjaro package is doing then, my local Mesa build completes in 101 seconds on my Ryzen 2700X.
But yeah, if you don't want to mess around with patches, better wait for them to get merged into the master branch. I think some of them are already in (updated Vulkan headers etc.), which makes applying them manually even harder.
@maugre
What is the right value for my CPU?
I use Intel core I5 4200M

@ahmed-elsayed2017

I think some of them are already in (updated Vulkan headers etc.), which makes applying them manually even harder.
Just apply patches 2-15 for radv for now, skip the first one.
@C0rn3j
It doesn't give accurate answer but I will try j8 and see how much CPU usage will be during compiling.
@ahmed-elsayed2017 By the way, you don't want to enable too many concurrent make jobs if you do not have enough memory, keep that in mind. It may hit swap hard, especially on llvm compilation.
EDIT: There's an AUR package someone else made here: https://aur.archlinux.org/packages/mesa-transform-feedback-git/
It's no different than the text below besides it doing it all automatically.
I don't know how helpful I'm really being doing this (as if you can't edit the file yourself, you probably shouldn't trust an idiot on the internet giving you a random file with the ability to break your PC...), but for Arch Linux users using RADV here's the mesa PKGBUILD I used: PKGBUILD
You need to download it and save it to a folder, you also need the patch files 2-15 from here saved in the same folder and you need the LICENSE file from the AUR also saved in that folder.
Open a terminal/console in the folder and run makepkg -i
This will either work for you, or it won't. I shan't help you debug it if it doesn't, or if your PC explodes. You've been warned...
@ahmed-elsayed2017 https://ark.intel.com/products/76348/Intel-Core-i5-4200M-Processor-3M-Cache-up-to-3-10-GHz-
# of Cores 2
# of Threads 4
Looks like its a dual-core w/hyperthreading. So, you should be using -j4 or -j5 (if plenty of ram, go for -j5).
@doitsujin I also see J贸zef Kucia has added a patch to wine:
https://source.winehq.org/patches/data/152604
winevulkan: Update vk.xml to 1.1.88.
This seems to implement the winevulkan-transform-feedback.patch (+ more) i think.
I replaced the custom patch in the original post with a link to the official wine patch.
@ahmed-elsayed2017 https://ark.intel.com/products/76348/Intel-Core-i5-4200M-Processor-3M-Cache-up-to-3-10-GHz-
# of Cores 2 # of Threads 4Looks like its a dual-core w/hyperthreading. So, you should be using -j4 or -j5 (if plenty of ram, go for -j5).
I used -j8 to compile lib32-mesa-git and it took 4.5 hours (half the time was before). Cpu usage didn't exceed 30%. I will try -j12 next time to see if it will increase cpu usage and being stable at the same time.
@ahmed-elsayed2017 the "-j" option sets how many threads you use. It is not really beneficial to use "too many", or else one would just pop "-j100" and compile very fast...
You can easily try different settings, but afaik you will only loose time compiling with too many threads. Discussion about having "thread +1" vs "threads" - ie. for YOU "-j4" vs "-j5" is up to debate, and kind of non-conclusive :)
To check how many cores your Linux install have found, you can do:
lscpu
The output for ME with a i7-8700K 6cores+6threads is:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
Here you see i have 12 cpu's, listed as 2 threads per core, and 6 cores per socket.. with 1 socket, and that is correct based on my model.
I use "-j12" when i compile... but have not benchmarked if i could earn a millisec or two from doing "-j13" :)
Wine has landed Vulkan patches with VK_EXT_transform_feedback upstream, so no need to patch it manually anymore, just build Wine master. It should be available in Wine 3.19 release and on.
Does this work with winelib versions or no? It might be unrelated, but when I use a winelib build(which at this point is 6 commits ahead of the release), the victory screens in Overwatch are blacked out. Works fine using the normal release. Admittedly this could be a result of one of the 6 commits to master since the .90 release but I figured I would mention this.
If there's a regression, please bisect it. I haven't heard any complaints about Overwatch with 0.90 though.
For ArchLinux there is now an extended version of the mesa-git makepkg which includes the RADV patches.
@Sukid I cant get World of Warcraft to launch at all with a winelib build. Tested building winelib with dxvk-0.81, dxvk-0.90 and 629587bedd92ef645afc7818445960530179599d
Possibly totally unrelated, but given they both are Blizzard games...
@SveSop this thread is for discussion of stream output support in DXVK
The Vulkan-Headers and Vulkan-Loader repos are not yet updated to 1.1.88. How do you compile dxvk-0.90 with transform feedback support?
You don't have to compile DXVK yourself, just use release build 0.90. You'll need to compile Wine though.
Compiling dxvk yourself doesn't need vulkan dev package at 1.1.88.
The only thing you need to compile yourself will be your graphics drivers. Try pulling down the mesa3d repo, apply the patches provided by the OP, build the drivers, then you can verify the header is there with vulkaninfo | grep VK_EXT_t and you should see the transform feedback extension. Unless you link your new drivers to /usr/lib youll have to prefix vulkaninfo with the LD_LIBRARY_PATH, LIBGL_DRIVERS_PATH, and EGL_DRIVERS_PATH environment variables.
OR
you can just wait a while for the patches to be merged and distributed
Unless you link your new drivers to /usr/lib youll have to prefix vulkaninfo with the LD_LIBRARY_PATH, LIBGL_DRIVERS_PATH, and EGL_DRIVERS_PATH environment variables.
You can use Vulkan ICD file for that. I.e. for custom mesa, I'm using something like:
VK_ICD_FILENAMES=/opt/mesa-master/x86_64/radeon_icd.x86_64.json vulkaninfo
For OpenGL you need other variables like above indeed.
Oh. That's way more badass. Seems like the default for ubuntu 18 is /usr/local/share/vulkan/icd.d
The more you know.
@minionprocyk /usr/local/share/vulkan/icd.d doesn't even exist on Ubuntu by default.
/usr/local is for stuff installed via make install, it's common thing for all build systems to put it there by default. Being Ubuntu or not has nothing to do with it.
@mati865 Sorry I thought it was obvious this was from a build since we're talking about compiling graphics drivers.
Being Ubuntu or not has nothing to do with it.
good to know. I'm not very savy with differences across distros so I generally state the distro I work with.
thx for reply and have bugs on mores unity games kill to collect and necropolis !
If you have any idea to fix that on proton or this bug is only or proton ?
Best Regards
@doitsujin Do you know if Mesa is going to release VK_EXT_transform_feedback patches in the next stable release 18.2.4?
Not until tests are complete and passing.
https://patchwork.freedesktop.org/series/50969/
This series adds support for the new VK_EXT_transform_feedback extension.
As far as I know, everything works but it's still all a bit experimental as
we don't have very good tests yet. CTS tests are in-progress and we hope
to have decent testing soon. We likely won't be landing them in master
until we get better testing as the testing is currently really sketchy.
I hope they'll merge it in time before 18.3 though.
18.2.x releases are no feature updates anyway, so no.
Not until tests are complete and passing.
https://patchwork.freedesktop.org/series/50969/
This series adds support for the new VK_EXT_transform_feedback extension.
As far as I know, everything works but it's still all a bit experimental as
we don't have very good tests yet. CTS tests are in-progress and we hope
to have decent testing soon. We likely won't be landing them in master
until we get better testing as the testing is currently really sketchy.I hope they'll merge it in time before 18.3 though.
I hope that too, because it doesn't work well right now on my AMD card


Update: RADV just landed Transform Feedback support in mesa-git. No more manual patching required!
Great! So it will be available in 18.3.
Just got around to installing the 396.54.09 driver.
This patch also fixes non-rendering characters in Furi, awesome!
I play quake champions and have just discovered that not only am I using the wrong NVIDIA driver version (410.73) but I am also using the wrong Vulkan driver (1.1.82) version but since moving to Wine 3.19 staging Quake champions now works perfectly without any crashes with Sorlag or any maps that were known to cause problems.
I can only assume that the game needs to be told that the extension is available without actually using it? Either way it will keep me playing until the NVIDIA drivers are updated officially :D
@7oxicshadow Not entirely sure how nVidia does its versioning, but i guess 410.73 have vulkan 1.1.82, while the 396.54.09 has 1.1.85... However, from the LunarG site, the needed VK_EXT_transform_feedback for stream output came with 1.1.88?
You can check the apiversion with: vulkaninfo | grep -i apiversion, and if you have the extension: vulkaninfo | grep -i vulkaninfo | grep -i apiversion
With 396.54.09 it reads:
apiVersion = 0x401055 (1.1.85)
VK_EXT_transform_feedback : extension revision 1
Guess the extension is kinda "retro-fitted" to work with the latest vulkan beta-driver from nVidia, since it in theory should be apiVersion 1.1.88 ?
Just ignore the Vulkan version, it doesn't mean much. The extension had been in development for several months anyway.
@SveSop where you had:
You can check the apiversion with: vulkaninfo | grep -i apiversion, and if you have the extension: vulkaninfo | grep -i vulkaninfo | grep -i apiversion
Did you mean:
vulkaninfo | grep -i apiversion && vulkaninfo | grep -i VK_EXT_transform_feedback
Yeah, double grep "vulkaninfo" thingy was a typo :) Thx for clearing that up @enrique556
FYI. Found this on nVidia forums, hope it's useful:
https://devtalk.nvidia.com/default/topic/1044231/linux/which-driver-to-use-long-short/post/5297592/#5297592
Interesting note from the changelog for 410.x driver:
Removed support for the VK_NV_glsl_shader Vulkan extension.
This extension was added before the Vulkan ecosystem had mature
SPIR-V compilers and tools. Now that the SPIR-V compilers and
tools have advanced, Vulkan developers are encouraged to use SPIR-V
instead of GLSL.
Perhaps something to plan for @doitsujin ? I see references to this in various places...
I see references to this in various places..
Where? I never used that extension.
Possibly not USED for anything, so it could probably just stay quietly in /include/vulkan/vulkan_core.h
#define VK_NV_glsl_shader 1
#define VK_NV_GLSL_SHADER_SPEC_VERSION 1
#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader"
And i see now its vulkan include files, and not "your" files i guess :)
Yeah, those will disappear when I update the headers the next time.
How do I get the right nvidia driver version on arch? I can't find it in the repos.
415.18.02 can be installed via aur/nvidia-vulkan or aur/nvidia-vulkan-dkms (you need linux-headers for this one assuming you use vanilla kernel)
Although 396.54.09 is seemingly the 'best' version to use with DXVK for reasons listed right below. I guess you could go through AUR and manually downgrade the PKGBUILDs if you insist on having that one?
https://www.phoronix.com/scan.php?page=news_item&px=NVIDIA-415.18.02-Linux-Released
415.18.02 is known to break all Unity Engine games on Wine, so if you have any of those, it's better to stay away from it. I'm not going to recommend it until this issue is sorted out.
I hope they don't make any new games with Unity Engine because all Unity games that I tried so far have problems with controllers and I have to use steam to config controllers to act as mouse and keyboard.
If you mean via WINE then you may have some luck with https://github.com/kozec/dumbxinputemu and sc-controller. A bit OT though.
I tried SC controller yesterday, and it isn't good with mouse emulation at all.
Games that don't work well with controllers work well with mouse+keyboard emulation. That is why Dumb xinput Emulator wont fix these games.
@ahmed-elsayed2017 Found this little snippit on the changelog for 4.19.6 kernel:
commit fb87a92b43961c89bf4a115d8a700885d8959cb1
Author: Rodrigo Rivas Costa <[email protected]>
Date: Sun Oct 14 19:36:43 2018 +0200
HID: steam: remove input device when a hid client is running.
commit 385a4886778f6d6e61eff1d4d295af332d7130e1 upstream.
Previously, when a HID client such as the Steam Client was running, this
driver disabled its input device to avoid doubling the input events.
While it worked mostly fine, some games got confused by the idle gamepad,
and switched to two player mode, or asked the user to choose which gamepad
to use. Other games just crashed, probably a bug in Unity [1].
With this commit, when a HID client starts, the input device is removed;
when the HID client ends the input device is recreated.
[1]: https://github.com/ValveSoftware/steam-for-linux/issues/5645
Signed-off-by: Rodrigo Rivas Costa <[email protected]>
Signed-off-by: Jiri Kosina <[email protected]>
Cc: Pierre-Loup Griffais <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Possibly something interesting?
I use Kernel 4.19.4. I didn't get this kernel update yet.
@doitsujin
Looks like 415.18.04 has a fix for Unity games crashing. Might be worth it to update the wiki if true (don't have an Nvidia system I can test on right now).
https://www.phoronix.com/scan.php?page=news_item&px=NVIDIA-415.18.04-Linux-Driver
@C0rn3j Thanks, I'm aware of it and will test it later, will update the wiki if it runs well.
Status update:
@doitsujin Your post says 418.22 but I believe it's supposed to be 415.22.
Right, thanks.
Most helpful comment
Update: RADV just landed Transform Feedback support in mesa-git. No more manual patching required!