FEX Release FEX-2601
As the developers awaken from their holiday induced hiberation, another release is upon us in the new year! Let's see what we managed to implement before hibernation snuck up on us.
Update thunks for Vulkan 1.4.337
This update is fairly important as Proton and Mesa have started using some new extensions that we didn't previously support. So if your system had a new driver with these extensions then dxvk/vkd3d-proton would assert out. With these updated it is no longer a problem and thunking is working again as normal!
Fix a couple rare hangs on Wine mutex handling
FEX has a custom mutex implementation that has "writer" priority that was implemented a few months ago. We needed to implement this to help reduce stuttering in our code cache implementation. When implementing it we actually had two bugs in the implementation for Wine that went unnoticed until now. Our implementation is fairly smart and will spin on the mutex using ARM's highly efficient "Wait-For-Event" instruction for 1/10th of a millisecond before deferring to the kernel mutex implementation. Because we block the mutex for such a small amount of time, it was /highly/ unlikely to hit the kernel implementation. When we did defer to the kernel (Or Wine's implementation anyway) we had a bug in our anti-stampeding behaviour which would cause reader threads to never wake up. Then additionally we had a bug in the calling API for the "RtlWaitOnAddress" function declaration where it was only waiting on a 32-bit address. Causing the process to never wake up and usually crash.
