Skip to content

Commit 2afea19

Browse files
Merge branch 'master' into master-juice
2 parents 799ad5b + 04eb452 commit 2afea19

File tree

137 files changed

+41235
-4820
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+41235
-4820
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ Name of the game, settings used etc.
1919
- VKD3D-Proton version:
2020

2121
### Log files
22-
Proton or Wine logs.
22+
Please attach Proton or Wine logs as a text file:
23+
- When using Proton, set the Steam launch options for your game to `PROTON_LOG=1 %command%` and attach the corresponding `steam-xxxxx.log` file in your home directory.
24+
- When using regular Wine, use `wine game.exe > game.log 2>&1` and attach the resulting `game.log` file.

.github/workflows/test-build-windows.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@ jobs:
1616
- name: Setup widl and glslangValidator
1717
shell: pwsh
1818
run: |
19-
choco install strawberryperl vulkan-sdk -y
19+
choco install strawberryperl curl -y
20+
curl "https://raw.githubusercontent.com/HansKristian-Work/vkd3d-proton-ci/main/glslangValidator.exe" -o "C:\Strawberry\c\bin\glslangValidator.exe"
2021
Write-Output "C:\Strawberry\c\bin" | Out-File -FilePath "${Env:GITHUB_PATH}" -Append
21-
Write-Output "$([System.Environment]::GetEnvironmentVariable('VULKAN_SDK', 'Machine'))\Bin" `
22-
| Out-File -FilePath "${Env:GITHUB_PATH}" -Append
2322
2423
- name: Setup Meson
2524
shell: pwsh

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ build
22
build.*
33
vkd3d-proton-*.tar.zst
44
vkd3d-proton-*/
5-
5+
/profiles/vulkan
6+
/profiles/profile-test

.gitmodules

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[submodule "subprojects/dxil-spirv"]
22
path = subprojects/dxil-spirv
33
url = https://github.com/HansKristian-Work/dxil-spirv
4-
[submodule "subprojects/Vulkan-Headers"]
5-
path = subprojects/Vulkan-Headers
4+
[submodule "khronos/Vulkan-Headers"]
5+
path = khronos/Vulkan-Headers
66
url = https://github.com/KhronosGroup/Vulkan-Headers
7-
[submodule "subprojects/SPIRV-Headers"]
8-
path = subprojects/SPIRV-Headers
7+
[submodule "khronos/SPIRV-Headers"]
8+
path = khronos/SPIRV-Headers
99
url = https://github.com/KhronosGroup/SPIRV-Headers

CHANGELOG.md

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,244 @@
11
# Change Log
22

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+
3242
## 2.8
4243

5244
This release rolls up some significant new developments before the holidays.

0 commit comments

Comments
 (0)