|
1 | 1 | # Change Log
|
2 | 2 |
|
| 3 | +## 2.11 |
| 4 | + |
| 5 | +This release rolls up a bunch of features, perf improvements and bug fixes / workarounds as usual. |
| 6 | + |
| 7 | +### Features |
| 8 | + |
| 9 | +#### DXR enabled by default |
| 10 | + |
| 11 | +`VKD3D_CONFIG=dxr` is default now, and no longer needed. |
| 12 | +There are some special cases where DXR is not enabled by default. The only such current example is |
| 13 | +"Hellblade: Senua's Sacrifice" on Deck which force-enables DXR if it is supported, even on Deck. |
| 14 | +New semantics are: |
| 15 | + |
| 16 | +- `dxr`: Force-enable DXR, even when it is considered unsafe |
| 17 | +- `nodxr`: Disable DXR |
| 18 | +- `dxr11`: Removed. `dxr` already implied DXR 1.1 anyway |
| 19 | + |
| 20 | +#### Sampler feedback |
| 21 | + |
| 22 | +This feature was the last feature required for FL 12.2 and is implemented through emulation. |
| 23 | +As demonstrated in the [implementation docs](https://github.com/HansKristian-Work/vkd3d-proton/blob/master/docs/sampler_feedback.md), all |
| 24 | +native implementations of this feature are fundamentally broken in some way. |
| 25 | +There's also no known game that ships requiring this feature, so we just consider this a checkbox feature. |
| 26 | + |
| 27 | +#### DX Ultimate (FL 12.2) now exposed by default |
| 28 | + |
| 29 | +On RDNA2+ and Turing+ we can finally expose the DX Ultimate feature set! |
| 30 | + |
| 31 | +#### Misc |
| 32 | + |
| 33 | +- Implement a bunch of missing "Vulkan-on-D3D12" features |
| 34 | + - IndependentFrontAndBackStencilRefMaskSupported |
| 35 | + - TriangleFanSupported |
| 36 | + - DynamicIndexBufferStripCutSupported |
| 37 | + - DynamicDepthBiasSupported |
| 38 | + - NonNormalizedCoordinateSamplersSupported |
| 39 | + - MismatchingOutputDimensionsSupported |
| 40 | + - PointSamplingAddressesNeverRoundUp |
| 41 | + - RasterizerDesc2Supported |
| 42 | + - Explicit line rasterization mode |
| 43 | + - NarrowQuadrilateralLinesSupported |
| 44 | + - AnisoFilterWithPointMipSupported |
| 45 | +- Implement missing MSAD instruction in DXIL, allowing FSR3 to run |
| 46 | +- Implement some esoteric DXR features |
| 47 | + - Implement support for multiple mismatching global root signatures in DXR |
| 48 | + - Fixes crash in Battlefield V |
| 49 | + - Implement support for LOCAL_ON_EXTERNAL dependencies in DXR |
| 50 | + - Fixes DXR in Warhammer: Darktide |
| 51 | +- Implement support for ExecuteIndirect + Mesh shaders with state changes |
| 52 | + - Currently unused by games |
| 53 | + |
| 54 | +### Performance |
| 55 | + |
| 56 | +- Improve performance of NV_device_generated_commands and NV_device_generated_commands_compute by |
| 57 | + reordering and batching command preprocessing |
| 58 | + - We have observed 15% FPS gains in Halo Infinite on RADV |
| 59 | + - 1-2% in Starfield in some test locations |
| 60 | + - Needs pending Mesa work to land to take advantage of this improvement |
| 61 | +- Tune memory allocation patterns for DGC preprocess buffers |
| 62 | + - Avoids a lot of allocation churn |
| 63 | + - Greatly reduces CPU overhead on NV |
| 64 | + |
| 65 | +### Workarounds |
| 66 | + |
| 67 | +- Work around RADV bug causing GPU hang in RE4: Separate Ways DLC |
| 68 | +- Work around RADV bug causing GPU hang in Lords of the Fallen |
| 69 | +- Work around Witcher 3 bug causing broken shadows and GPU hangs when enabling DXR |
| 70 | +- Work around Cyberpunk 2077 bug when RT is enabled, where game would cause spurious GPU hangs due to accessing descriptor heap out of bounds |
| 71 | +- Work around Windjammers 2 bug causing random crashes on startup |
| 72 | +- Add support for VK_EXT_image_compression_control to allow for more fine-grained workarounds for broken games running on RADV |
| 73 | +- Enable NV_device_generated_commands_compute on latest NV beta drivers |
| 74 | + - 545.x drivers are still disabled until a fix can be confirmed on shipping drivers |
| 75 | +- Remove CURB_MEMORY_PSO_CACHE workaround on Mesa 23.2+ |
| 76 | + - Should reduce overhead in PSO creation |
| 77 | + |
| 78 | +### Fixes |
| 79 | + |
| 80 | +- Misc dxil-spirv changes to fix various bugs in game shaders as usual |
| 81 | +- Fix Jurassic World Evolution 2 crashing when enabling DXR |
| 82 | +- Fix some deprecation warnings in Meson build system |
| 83 | + - Some submodule locations moved, which may cause minor disruption |
| 84 | + |
| 85 | +## 2.10 |
| 86 | + |
| 87 | +This release rolls up a ton of bug fixes, game and driver workarounds, and other improvements. |
| 88 | + |
| 89 | +### Features |
| 90 | + |
| 91 | +#### DirectStorage MetaCommands |
| 92 | + |
| 93 | +We can now make use of `NV_memory_decompression` to implement |
| 94 | +GPU accelerated GDeflate compression in DirectStorage. |
| 95 | +This is demonstrated to work in Ratchet & Clank: Rift Apart. |
| 96 | + |
| 97 | +We also worked around an NV driver bug when using the fallback GDeflate shader. |
| 98 | +The fallback works on RADV. |
| 99 | + |
| 100 | +#### Enhanced Barriers |
| 101 | + |
| 102 | +NOTE: This isn't all that well tested because there are no games shipping with this yet to our knowledge. |
| 103 | + |
| 104 | +#### Device generated commands for compute |
| 105 | + |
| 106 | +With `NV_device_generated_commands_compute` we can efficiently implement |
| 107 | +Starfield's use of ExecuteIndirect which hammers multi-dispatch COMPUTE + root parameter changes. |
| 108 | +Previously, we would rely on a very slow workaround. |
| 109 | + |
| 110 | +NOTE: This feature is currently only enabled on RADV due to driver issues. |
| 111 | + |
| 112 | +#### Misc |
| 113 | + |
| 114 | +- Support Root Signature version 1.2 |
| 115 | +- Implement Shader Model 6.7 |
| 116 | + - Includes all SM 6.7 features like AdvancedTextureOps, WaveOpsIncludeHelperLanes |
| 117 | + - Caveat: Technically not Vulkan spec compliant implementation, but works fine on at least NV and RADV. Currently implemented as an opt-in option for now in case some game relies on it to work |
| 118 | +- Implement CreateSampler2 |
| 119 | +- Expose inverted viewport / height feature |
| 120 | +- Implement RelaxedFormatCasting feature from Enhanced Barriers |
| 121 | +- Implement support for adjacency topologies |
| 122 | +- Support A8_UNORM format properly by using `VK_KHR_maintenance5`, allowing A8_UNORM UAVs to work correctly |
| 123 | +- Handle range checked index buffers correctly with `VK_KHR_maintenance5` |
| 124 | + |
| 125 | +#### New extension use |
| 126 | + |
| 127 | +- VK_EXT_dynamic_rendering_unused_attachments |
| 128 | +- VK_KHR_maintenance5 |
| 129 | +- VK_NV_device_generated_commands_compute |
| 130 | + |
| 131 | +### Performance |
| 132 | + |
| 133 | +- Batch acceleration structure builds. Massively improves build performance on at least RADV. |
| 134 | +- Massively improve ExecuteIndirect performance when using COMPUTE + root parameter changes when `VK_NV_device_generated_commands_compute` is enabled. |
| 135 | + |
| 136 | +### Fixes |
| 137 | + |
| 138 | +- Fix root signature creation from DXIL library target (DXR) blobs |
| 139 | +- Fix some dual source blending PSOs scenarios. Fixes Star Wars Battlefront II |
| 140 | +- Implement wave operations in pixel shaders more strictly according to D3D12 rules |
| 141 | +- Fix spurious hangs in Ashes of Singularity when using shared fences and wait-before-signal |
| 142 | +- Fix PSO caching bug in mesh shaders. Fixes mesh shaders in Unreal Engine 5 |
| 143 | +- Fix udiv remainder in DXBC, which fixed some Xenia bugs |
| 144 | +- Fix query heap tracking bug that was exposed by NV Streamline |
| 145 | +- Various DXIL -> SPIR-V fixes as usual |
| 146 | +- Rewrote descriptor set layouts to be more robust against application bugs |
| 147 | + - Motivated by Armored Core VI bug (see below) |
| 148 | + - Native D3D12 drivers are also robust against these application bugs :( |
| 149 | + |
| 150 | +### Workarounds |
| 151 | + |
| 152 | +- Workaround bad ReBAR performance in Age of Wonders 4 |
| 153 | +- Remove workaround for `KHR_present_wait` on NV 535+ drivers |
| 154 | +- Workaround Starfield memory corruption issue where it does not correctly query for 4 KiB alignment |
| 155 | +- Disable ReBAR usage on Halo Infinite to workaround very poor CPU performance |
| 156 | +- Workaround Street Fighter 6 bug causing spurious GPU hangs |
| 157 | + - Also appears to have worked around GPU hangs in Resident Evil 2 |
| 158 | +- Workaround Armored Core VI bug causing GPU hang on Balteus fight in chapter 1 |
| 159 | +- Workaround "firefly" glitches in Resident Evil 4 caused by dubious min16float usage |
| 160 | +- Workaround "firefly" glitches in Monster Hunter Rise caused by dubious shader requiring particular precise math |
| 161 | +- Workaround Unreal Engine 5 breaking if mesh shaders are exposed, but not barycentrics |
| 162 | +- Workaround NV driver bug with TIMESTAMP query heaps that could cause spurious GPU hangs |
| 163 | +- Workaround broken CFG code generation in Xenia's DXBC emitter |
| 164 | + |
| 165 | +## 2.9 |
| 166 | + |
| 167 | +This release rolls up various development happening over the last months. |
| 168 | + |
| 169 | +### d3d12core.dll split |
| 170 | + |
| 171 | +Some games started assuming that the DLLs were laid out similar to AgilitySDK, where |
| 172 | +d3d12.dll is just a loader, and d3d12core.dll contains the real implementation. |
| 173 | +vkd3d-proton now implements this split as well. It is possible that various scripts must be updated |
| 174 | +to accomodate both DLLs now. Once d3d12.dll is installed in a prefix, |
| 175 | +only d3d12core.dll needs to be updated, as d3d12.dll is just a trivial shim either way. |
| 176 | + |
| 177 | +### Performance improvements |
| 178 | + |
| 179 | +- Greatly reduce system memory requirements on the first run of an application. |
| 180 | + SPIR-V code was held in memory "just in case" it had to be recompiled later, but this is no longer the case. |
| 181 | +- Use `VK_EXT_graphics_pipeline_libraries` to avoid shader compilation stutter in some extreme edge cases. |
| 182 | +- Improve performance with certain bad occlusion query patterns in e.g. Elden Ring. |
| 183 | +- Improve CPU performance of `VK_EXT_descriptor_buffer` even further with vendor-specific "ultra-fast" paths. |
| 184 | + - Our microbenchmark for single descriptor copies are now significantly faster than native D3D12 drivers on both RADV and NVIDIA. |
| 185 | + - Intel performance numbers are TBD, but we expect a win there as well. |
| 186 | +- Improve VRAM oversubscription behavior when |
| 187 | + `VK_EXT_pageable_device_local_memory` is supported. (NVIDIA contribution, thanks!) |
| 188 | + This allows us to implement `Evict` and `MakeResident` APIs in a useful way. |
| 189 | + `VK_EXT_memory_priority` is also used for static priorities as a fallback. |
| 190 | + |
| 191 | +### Features |
| 192 | + |
| 193 | +- Add `VK_EXT_image_sliced_view_of_3d` to support sliced 3D UAVs. |
| 194 | +- Improve DXR 1.1 support with `VK_EXT_pipeline_library_group_handles`. |
| 195 | +- Implement `VK_EXT_fragment_shader_interlock`. Completes FL 12.1. |
| 196 | +- Move to Vulkan 1.3 as minimum version. |
| 197 | +- D3D11on12 interoperability interfaces are now supported. |
| 198 | + It is compatible with DXVK 2.2, which actually implements 11on12. |
| 199 | + |
| 200 | +### Legacy swapchain removal |
| 201 | + |
| 202 | +The old swapchain implementation is now gone. |
| 203 | +DXVK 2.1 is required as we now share common code. |
| 204 | +This means that there is no fallback for pre-2.1 DXVK versions or Wine DXGI anymore. |
| 205 | + |
| 206 | +#### Native Linux swapchain support |
| 207 | + |
| 208 | +The new swapchain can support Linux native surfaces. |
| 209 | +The demo applications in `demos/` with functional swapchain now builds on Linux as well. |
| 210 | + |
| 211 | +### Driver workarounds |
| 212 | + |
| 213 | +- `KHR_present_wait` is currently disabled on NVIDIA drivers due to a bug that would occur on some PRIME setups. |
| 214 | + This is supposed to be fixed in the latest beta drivers, and this workaround will eventually be removed |
| 215 | + when we have a confirmed major version that fixes the issue. |
| 216 | +- Workaround RADV bug causing memory bloat in shader caches. Can save several 100s of MBs of memory, |
| 217 | + which is important on certain memory hungry titles to avoid instability. |
| 218 | +- Workaround NVIDIA bug with concurrent queue submissions using timeline semaphores. |
| 219 | + Fixed a bunch of inexplicable `Xid 109 CTX_SWITCH_TIMEOUT` errors in many different games. |
| 220 | + |
| 221 | +### Bugfixes and game workarounds |
| 222 | + |
| 223 | +Various bugfixes for games as usual. Listing individual games is becoming impractical at this point, |
| 224 | +and it's best to refer to other sources for compatibility information with specific games. |
| 225 | +As usual, a bunch of fixes in dxil-spirv to fix shader bugs. |
| 226 | + |
| 227 | +### Misc |
| 228 | + |
| 229 | +- On Wine, use `winevulkan.dll` rather than `vulkan-1.dll` if available. |
| 230 | + Works around some games that hook Vulkan despite using D3D12. |
| 231 | +- Improve compatibility with games relying on certain AgilitySDK details. |
| 232 | +- Improve build system compatibility with different `widl` versions. |
| 233 | +- `VKD3D_CONFIG=dxr` now enables DXR 1.1 as well. `dxr11` is kept for compat. |
| 234 | +- Fix HDR Metadata MinLuminance value. |
| 235 | +- Add `VKD3D_LIMIT_TESS_FACTORS` to work around excessive tessellation. Enabled for Wo Long. |
| 236 | +- (Developers) Improve debugging support with more detailed breadcrumb information. |
| 237 | +- (Developers) Insert more actionable information in captures and logs. |
| 238 | +- (Developers) Log directly to Wine when available. Makes `PROTON_LOG=1` more reliable. |
| 239 | +- (Developers) Set thread names on Win32 build as well. |
| 240 | +- (Developers) Use native Linux calling convention instead of `ms_abi`. |
| 241 | + |
3 | 242 | ## 2.8
|
4 | 243 |
|
5 | 244 | This release rolls up some significant new developments before the holidays.
|
|
0 commit comments