Commit Graph

467 Commits

Author SHA1 Message Date
Samuel Pitoiset c4f37d3981 [util] Enable d3d11.invariantPosition for Star Wars Jedi: Fallen Order
Seems to resolve https://gitlab.freedesktop.org/mesa/mesa/-/issues/2706#note_538316

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
2020-06-18 13:40:24 +02:00
Rhys Perry cd0a21dda5 [util] Enable d3d11.invariantPosition for Terminator: Resistance
Seems to resolve https://gitlab.freedesktop.org/mesa/mesa/-/issues/2608
2020-06-12 17:58:30 +02:00
Rhys Perry 0a486bd975 [util] Enable d3d11.invariantPosition for Borderlands 3
Seems to resolve https://gitlab.freedesktop.org/mesa/mesa/-/issues/2608
2020-06-12 17:58:30 +02:00
Philip Rebohle 51bd84368c
[util] Disable relaxed barrier option for RE7
Introduces lighting glitches in some places.
2020-06-11 22:06:53 +02:00
Samuel Pitoiset 86c53bb9e6 [util] Set enableRtOutputNaNFixup for Stars End
To fix output NaNs that introduce glitches with RADV.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
2020-06-09 16:08:16 +02:00
Joshua Ashton 86e8315416 [d3d9] Revert Nekopara hacks 2020-06-05 23:15:10 +01:00
Joshua Ashton 326f6c26cb [util] Enable forceSamplerTypeSpecConstants for all of the games in the Spellforce 2 seires 2020-06-05 02:36:17 +01:00
Joshua Ashton b658cae509 [util] Enable uploadAllManagedSubresources for Nekopara titles 2020-06-05 02:35:03 +01:00
Joshua Ashton f92d60496c [util] Enable forceSamplerTypeSpecConstants for SpellForce 2: Faith in Destiny
The game binds a 2D texture to a 3D (volume) sampler which causes the readback to be 0 0 0 0 on native, whereas we can workaround it and see the intended texture and cool refracty effect that would have rendered on older real hardware 👏

Closes #1645
2020-05-27 17:14:20 +01:00
DadSchoorse 84bb768a32 [util] Enable d3d9.invariantPosition for Halo/Hale CE
Fixes #1550
2020-05-17 23:41:42 +02:00
Christian Sturm 97cd91885d [util] Enable constant buffer range check for Secret World Legends 2020-04-18 21:53:21 +02:00
Philip Rebohle 487ecd861c
[util] Enable constant buffer range check for Blue Reflection
Fixes #1574.
2020-04-18 14:00:04 +02:00
Philip Rebohle 7f03f45301
[util] Support encapsulated strings in configuration files
Fixes #1567.
2020-04-10 21:16:29 +02:00
Joshua Ashton 6b431851da [util] Enable d3d9.invariantPosition for Battlefield 2
Closes #1558 for good
2020-04-09 14:00:26 +01:00
Joshua Ashton f549586331 [util] Set d3d9.longMad to True for Battlefield 2 2020-04-08 23:23:21 +01:00
Philip Rebohle 00d371d78d [util] Spoof AMD GPU for GTA IV 2020-04-03 16:39:29 +01:00
Philip Rebohle 5c3d0c6836
[util] Enable d3d11.relaxedBarriers option for Resident Evil 3 2020-04-03 02:58:59 +02:00
Samuel Pitoiset 649c3805d9 [util] fix typo for Yooka-Laylee executable name 2020-03-25 14:29:28 +01:00
Samuel Pitoiset f6a79c366a [util] Set enableRtOutputNaNFixup for Super Monkey and Yooka-Laylee
Both games output NaNs that introduce glitches with RADV and
AMDVLK.
2020-03-22 15:38:24 +01:00
Philip Rebohle 3104192af7
[d3d11] Fix winelib build
Closes #1521.
2020-03-20 17:01:46 +01:00
Philip Rebohle 76fd9013d4
[util] Add missing include 2020-03-19 23:22:13 +01:00
Florian Will ba41a5219a [util] Disable explicit frontbuffer for ZUSI 3
Fixes flickering when parts of the screen are not redrawn in a frame.

Closes #1368
Merges #1437
2020-03-18 19:32:45 +00:00
Philip Rebohle 26798eb312 [util] Use SwitchToThread for yield
According to MSDN, this doesn't interfere with scheduling of other threads,
unlike Sleep(0).
2020-03-15 03:43:04 +01:00
Philip Rebohle da506f5932 [util] Add generic recursive spinlock 2020-03-15 03:43:04 +01:00
Philip Rebohle 55e3240479 [util] Add generic spin function 2020-03-15 03:43:04 +01:00
Philip Rebohle 3a1243b05e [util] Don't set display mode if the desired mode is already set
See #1489.

Co-authored-by: zvova7890 <zvova7890@gmail.com>
2020-03-04 23:06:15 +00:00
Philip Rebohle 4e16d65bb8 [util] Introduce common functions to set, get and restore display modes 2020-03-04 23:06:15 +00:00
Philip Rebohle 66503aeaa0 [util] Factor out common monitor-related functions 2020-03-04 23:06:15 +00:00
Joshua Ashton 74d23c22de [build] Use __CRT_UUID_DECL for uuid definitions
Closes #1463
2020-02-18 20:25:05 +01:00
Joshua Ashton 760a163fc5 [util] Disable discard for D&D Temple of Elemental Evil
This game uses D3DLOCK_DISCARD incorrectly
2020-02-18 17:01:41 +00:00
ryester27 dff2a4ea24 [util] Force 16:9 aspect ratio for Hyperdimension Neptunia U: Action Unleashed 2020-02-14 02:50:15 +00:00
Joshua Ashton 0ea510eb9b [util] Add clearAll helper to bitset 2020-02-14 00:51:58 +00:00
Joshua Ashton 960d2bd158 [util] Add exchange helper to bitset 2020-02-14 00:51:58 +00:00
Philip Rebohle 07fee4a0e5
[util] Disable VR for Subnautica 2020-02-09 09:05:52 +01:00
Philip Rebohle 4738d12d73
[util] Enable forced TGSM barriers for F1 2019
Fixes visual issues on RADV.
2020-02-08 00:48:45 +01:00
Philip Rebohle c780ed5da3
[util] Enable invariant position for Saint's Row III / IV 2020-02-07 17:40:55 +01:00
Philip Rebohle 8020803340
[util] Disable OpenVR for Raft 2020-02-06 20:48:21 +01:00
František Zatloukal 976d3b5ee4 [util] Include ostream in util_rc_ptr.h 2020-01-31 15:17:18 +01:00
Philip Rebohle 3ab675c233 Revert "[util] Disable float emulation for Hat in Time"
Turns out this breaks some levels (e.g. Chapter 1 Act 3).
Performance impact seems minimal on RADV+ACO.

This reverts commit 6f93d3bf22.
2020-01-28 17:46:33 +00:00
Philip Rebohle be16da37d7 [d3d11] Introduce COM interface to set and get API version
Allows us to identify DirectX 10 applications correctly.
2020-01-28 16:32:58 +00:00
Joshua Ashton 6f93d3bf22 [util] Disable float emulation for Hat in Time
Squeezes out some extra performance in this title
2020-01-27 14:21:21 +01:00
Philip Rebohle c77a9e3bfe
[util] Unify Risen 1/2/3 app profiles 2020-01-25 12:10:05 +01:00
Philip Rebohle fdb2b972e9
[util] Add more exe names to Gothic 3 app profile
Fixes #1372.
2020-01-25 12:10:05 +01:00
Joshua Ashton 2004fba22c [util] Disable d3d9.allowDoNotWait for RTHDRIBL
This app goes into an infinite loop if it gets D3DERR_WASSTILLDRAWING and the perf penalty of blocking on GetRenderTargetData in other apps is too high!
2020-01-24 15:54:15 +00:00
Philip Rebohle 7469f5d4a0
[util] Disable supportDFFormats for Gothic 3
See #1367.
2020-01-24 14:21:28 +01:00
Joshua Ashton 9919ffe5ca [util] Add simple [] operator to our bitset 2020-01-23 02:05:09 +00:00
Philip Rebohle 21330497e0
[util] Add app profile for Entropia Universe
Fixes #1364 (again).
2020-01-23 01:31:57 +01:00
Joshua Ashton 7de15fe837 [util] Spoof AMD for Skyrim (nvapi) 2020-01-22 16:20:42 +00:00
Philip Rebohle eed57ed6c4
[util] Enable d3d9.deferSurfaceCreation for a ton of weeb games 2020-01-17 18:29:15 +01:00
Philip Rebohle e4215252df [util] Add small_vector helper
A vector with a small fixed-size array, which changes to a dynamic
array as needed. Can be used to avoid memory allocations in some
scenarios.
2020-01-16 18:50:23 +01:00
Philip Rebohle 8b9c03ce76
[util] Improve Spinlock implementation
Addresses two potential issues:
- Our spinlocks are almost never contested, however the code generated
  is not ideal without the likely/unlikely hints.
- In the unlike event that a spinlock is in fact contested, we'd yield
  immediately, even though most of the time we'd only have to wait for
  a few hundred cycles at most.

Replacing our spinlocks with std::mutex is not an option due to much
higher locking overhead in the uncontested case; doing so reduces
performance significantly for the buffer slice and pipeline locks.
2020-01-07 17:28:33 +01:00
Joshua Ashton 0343938c2e [util] Enable d3d9.forceSamplerTypeSpecConstants for Halo [CE]
The game uses incorrect sampler types in the shaders for glass rendering which breaks it on native + us if we don't spec-constantly chose the sampler type automagically.
2020-01-01 20:58:42 +00:00
Philip Rebohle 694d6c7f77 [util] Improve ticket lock implementation
Atomic fetch-and-add on unlock is not needed since no other thread can
modify the serving counter after the calling thread acquired the lock.
May slightly improve performance in games relying on ID3D10Multithread.
2020-01-01 13:59:46 +01:00
Joshua Ashton fae99907da [util] Add get to bitset 2019-12-18 23:18:01 +00:00
Alessandro Toia 3c8fdc2863 Report gpu vendor as Nvidia for Star Wars Battlefront II 2019-12-18 17:38:24 +01:00
Joshua Ashton b99b1d153a [util] Add bitset helper 2019-12-18 14:48:01 +01:00
Joshua Ashton e527b963c4 [util] Handle undefined ratios in simplest ratio helper
Fixes division by zero error

Closes #1280
2019-12-17 03:16:56 +00:00
Philip Rebohle 9be0bf95ca
[util] Defer D3D9 surface creation for Atelier Ryza 2019-12-16 14:41:29 +01:00
Joshua Ashton 54ed8f0bb0 [d3d9] Implement Direct3D9 Frontend (#1275)
Co-authored-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
Co-authored-by: Robin Kertels <robin.kertels@gmail.com>
Co-authored-by: pchome <pchome@users.noreply.github.com>
Co-authored-by: Christopher Egert <cme3000@gmail.com>
Co-authored-by: Derek Lesho <dereklesho52@Gmail.com>
Co-authored-by: Luis Cáceres <lacaceres97@gmail.com>
Co-authored-by: Nelson Chen <crazysim@gmail.com>
Co-authored-by: Edmondo Tommasina <edmondo.tommasina@gmail.com>
Co-authored-by: Riesi <riesi@opentrash.com>
Co-authored-by: gbMichelle <gbmichelle.dev@gmail.com>
2019-12-16 04:28:01 +01:00
Philip Rebohle 4fcf28f4dc
[util] Spoof Nvidia cards for Crysis 3
The game for some reason runs significantly slower in CPU-bound scenarios
when it recognizes an AMD GPU. On the other hand, there seems to be a small
performance hit on an actual Nvidia GPU (GTX 670) in GPU-bound scenarios when
doing this, but on most setups the tradeoff should be worth it.
2019-12-11 23:01:27 +01:00
Joshua Ashton 3fa8691033 [util] Implement simplest ratio helper 2019-12-11 03:18:39 +01:00
Joshua Ashton 16dd1249b7 [util] Add alignDown helper 2019-12-11 03:18:39 +01:00
Joshua Ashton 57b2c02528 [util] Implement lzcnt 2019-12-11 03:18:39 +01:00
Joshua Ashton aef12f7ee3 [util] Add countof helper 2019-12-11 03:18:39 +01:00
Joshua Ashton d4cad9055c [util] Implement a clamped version of ComObject, for D3D9
Satisfies a quirk in D3D9, solving an issue in SWTFU.
2019-12-11 03:18:39 +01:00
Joshua Ashton 511ed27733 [util] Add GetPrivateRefCount helper 2019-12-11 03:18:39 +01:00
Joshua Ashton 9280818a57 [util] Implement fclamp for fp special cases 2019-12-11 03:18:39 +01:00
Joshua Ashton ec197b49f9 [util] Implement some basic vector and matrix math utils 2019-12-11 03:18:39 +01:00
Joshua Ashton d44707e349 [util] Mark clamp & align as constexpr 2019-12-11 03:18:39 +01:00
Joshua Ashton a3f74b5eda [util] Implement bit cast. 2019-12-11 03:18:39 +01:00
Philip Rebohle 3230cec3f3
[util] Enable d3d11.enableRtOutputNanFixup for FFXIV
And disable strict division. The previous workaround broke radial blur.
2019-11-30 20:39:32 +01:00
Philip Rebohle 32ac8a8d51
[util] Make Fence and Win32Fence final
Otherwise, Josh will keep complaining about this until the end of time.
2019-11-27 12:31:17 +01:00
Philip Rebohle 6ebf3e1656
[util] Implement fence capable of signaling win32 events 2019-11-26 16:11:46 +01:00
Philip Rebohle 2d1fb52b2f
[util] Reimplement Signal
The new implementation is more akin to D3D12 fences or timeline
semaphores, and should make implementing similar concepts easier.
2019-11-26 16:11:46 +01:00
Philip Rebohle e648d59a10
[util] Fix winelib build
Fixes #1256.
2019-11-26 16:09:35 +01:00
Joshua Ashton bf14371f9e [util] Wide character conversion changes
Replaces tows with an easier helper that fits in nicer with fixed-size arrays in DXGI, etc.

Prefer UTF8 in tows/fromws.
2019-11-26 01:53:49 +01:00
Joshua Ashton 38f945bf0b [util] Add platform-specific clock implementation
MinGW calls to GetSystemTimeAsFileTime via gettimeofday for std::chrono::high_resolution_clock::now,
This is horribly slow and inaccurate.

There are also issues if MinGW is not built with libstdc++ at the same time that can cause the precision to be bad enough to cause massive hangs.
This effectively works around that as well.

Relevant: ValveSoftware/Proton#3198
2019-11-26 01:52:58 +01:00
Philip Rebohle e787077554
[util] Remove traces of the allowMapFlagNoWait option 2019-11-15 19:45:40 +01:00
Philip Rebohle 1ca235d186
[util] Disable strict DC mode for MGSV again
Not necessary since the resubmitted contexts don't contain mapped buffers.
2019-11-12 00:59:33 +01:00
Philip Rebohle 4f7e7979e3
[util] Add app profile for Metal Gear Solid 5 2019-11-11 23:31:14 +01:00
Philip Rebohle 1459f0e852
[util] Fix != and == operator for private/public COM pointers 2019-11-02 13:48:00 +01:00
Alexandr dacf1ab4d6 [util] Enable constant buffer range check for Saints Row games
Fixes character flickering on Nvidia.
2019-10-27 11:55:48 +01:00
Philip Rebohle 7f66373a69
[util] Add virtual destructor to NoWrapper 2019-10-25 22:08:00 +02:00
Philip Rebohle 9444162ca6
[util] Enable constant buffer range check for Titan Quest
Reportedly flickers on Nvidia GPUs otherwise.
2019-10-20 13:27:12 +02:00
Philip Rebohle 0ac89ccd9e
[util] Add missing != operator to Sha1Hash 2019-10-18 00:33:40 +02:00
Philip Rebohle c5c43fb2a4
[d3d11] Allow choosing type wrapper for D3D11DeviceChild base class
Allows subclasses to replace ComObject with something else.
2019-10-14 01:44:27 +02:00
Philip Rebohle dd9a55ecc0
[util] Don't allow multiple inheritance for COM objects
This never made any sense whatsoever in the first place.
2019-10-14 01:42:24 +02:00
Philip Rebohle a743ba6531
[dxvk] Use memcmp replacement for pipeline state lookup
Measured to be over twice as fast as memcmp on Ryzen for the
512-byte graphics pipeline state struct, achieving two cycles
per iteration.
2019-10-07 22:01:48 +02:00
Joshua Ashton e8ee7a0790 [util] Fix Sha1 dword extraction
Previously we were getting incorrect values here.

The u suffix is no longer necessary, which was originally there to work around a MSVC compiler warning which now doesn't happen under the new code 🤷‍♀
2019-10-06 00:28:19 +02:00
Philip Rebohle 02b79fb738
[util] Report Nvidia GPUs for Modern Warfare Remastered 2019-10-04 18:35:36 +02:00
Philip Rebohle 85581bdace
[util] Move GetAdapterLUID out of DXGI internals 2019-10-02 08:42:22 +02:00
Philip Rebohle 2e6da26ff0
[dxvk] Spoof Nvidia GPU for HITMAN 2
This game requires a functioning AGS implementation when it detects
an AMD GPU and complains about missing D3D11 support otherwise.
2019-09-26 19:27:19 +02:00
Entryhazard 252d71e55e Retrieve the function pointer once (#1198) 2019-09-22 10:11:17 +02:00
Philip Rebohle 71e74f1810
[d3d11] Disable DO_NOT_WAIT for Overwatch
Because of course this game breaks for some people with it enabled.
2019-09-21 01:44:38 +02:00
marcin mikołajczak 9941769237 [util] Update comment for FIFA 19+ workaround (#1197) 2019-09-20 16:20:26 +02:00
Joshua Ashton 014870b1ff
[util] Add helpers for GDI/DDI interop 2019-09-20 01:44:18 +02:00
Philip Rebohle c9a0f06ff4
[d3d11] Enable allowMapFlagNoWait by default
We still keep the option around so that in case of regressions,
users can check if disabling this option fixes their issue.
2019-09-20 01:44:02 +02:00
Philip Rebohle 51c6eb5cdb
[util] Enable FIFA 19 workaround for FIFA 20 as well
Same procedure as every year.
2019-09-20 00:50:01 +02:00
Philip Rebohle 9af8387e4e
[dxgi] Define IDXGIVkInteropAdapter interface
Can be used to pull the Vulkan instance and physical device from
a DXGI adapter.
2019-09-18 14:53:44 +02:00
Philip Rebohle 9e02b6b433
[dxgi] Rename IDXGIVkAdapter -> IDXGIDXVKAdapter
This interface exposes DXVK internals and cannot be used for
Vulkan interop. We shouldn't pretend like it could.
2019-09-18 14:07:13 +02:00
Philip Rebohle 65428da3fe
[util] Enable allowMapFlagNoWait for Warhammer II 2019-09-18 13:14:53 +02:00
Philip Rebohle f57c021ab5
[util] Enable d3d11.allowMapFlagNoWait for Control 2019-09-08 10:35:57 +02:00
orbea c57e63f7d2 Work around build failure with winegcc/clang. (#1184)
Fixes #1182.
2019-09-05 18:01:33 +02:00
Joshua Ashton 8e54477c2a [util] Use R string literals for app compat regexes 2019-08-24 21:32:51 +02:00
Philip Rebohle 54ca5900e1 [util] Use regular expressions on full exe path to match app profiles
This allows us to detect applications with non-unique executable names
or with variable executable names more reliably, and also allows us to
merge profiles for games that have multiple known exe names.

The matching is also no longer case-sensitive.
2019-08-18 17:49:22 +02:00
Philip Rebohle c934333a5c [util] Add method to retrieve full exe path 2019-08-17 11:50:39 +02:00
Philip Rebohle 1999ca9dd4
[util] Set d3d11.dcSingleUseMode=False for SteamVR perf test
*Actually* fixes #1160.
2019-08-10 11:21:47 +02:00
Joshua Ashton d579f07238 [util] Fix compiling with clang/clang-cl 2019-08-07 06:08:54 +02:00
Philip Rebohle 9a2da555c0
[util] Add helper for lazy initialization
a
2019-07-30 20:00:35 +02:00
Philip Rebohle f3943934a7
[util] Improve multi-line logging 2019-07-18 13:34:52 +02:00
Philip Rebohle 21a2ce045f
[util] Add convenience method to return public/private references 2019-07-17 19:59:50 +02:00
Philip Rebohle 4e8122eda9
[dxvk] Add new signal class 2019-07-08 00:16:00 +02:00
Joshua Ashton c381e8a29e [util] Add correct type suffixes to Sha1Hash dword function to silence compiler warning 2019-07-01 02:46:54 +02:00
Joshua Ashton a4a4f5a822 [util] Correct return value of SetThreadDescription 2019-06-19 19:43:36 +02:00
Philip Rebohle 3b1e03f988
[util] Report correct GPU vendor to Far Cry 3, 4 and Blood Dragon
Now that fast clear behaviour has been fixed in RADV, reporting an
Nvidia GPU breaks rendering again since the game expects the clear
behaviour to match that of the Windows D3D11 drivers exactly. To
recap, clear(0.5) on an R8_UNORM render target results in 127 on
Nvidia GPUs and 128 on AMD GPUs.
2019-06-12 12:32:30 +02:00
Philip Rebohle 96b9058fbf
[util] Fix COM private data bug when passing NULL interface
Fixes test failure in wine's DXGI tests.
2019-06-11 16:08:28 +02:00
Philip Rebohle 19adccea8f [util] Add unlikely() around COM ref counting code
Improves code generation for the common case.
2019-06-02 23:34:53 +02:00
Philip Rebohle 7d91ff06a3 [util] Fix return value of AddRef
We're supposed to return the new ref count, not the old one.
2019-06-01 22:12:32 +02:00
Robin 6a4fafba3d
[util] Enable D3D11_MAP_FLAG_DO_NOT_WAIT for The Surge 2019-05-17 12:56:57 +02:00
Philip Rebohle 905f3fe520
[util] Spoof Nvidia GPUs for Mirror's Edge Catalyst
Closes #1062.
2019-05-17 11:40:35 +02:00
Philip Rebohle 192310d481
[util] Don't use `if constexpr`
Fixes compilation on GCC 6.3.
2019-05-15 03:18:23 +02:00
Philip Rebohle 61b97e5dd1
[util] Add support for private references in Com<...> wrapper 2019-05-14 15:20:27 +02:00
Philip Rebohle 54d3103b04
[util] Fix COM reference count type
On Windows, ref counts are only 32 bits wide.
2019-05-14 14:48:42 +02:00
Philip Rebohle dcd75a4f09
[util] Optimize popcnt operation 2019-05-09 18:04:33 +02:00
Sam Fomenko 078bc27b14 [util] Disable NvAPI hack for Mirror's Edge Catalyst
#893
2019-05-07 22:34:56 +02:00
Philip Rebohle 0224dbc371
[dxvk] Optimize spinlock implementation 2019-05-07 13:38:02 +02:00
Philip Rebohle edbbdef787
[d3d11] Add interfaces to support D3D11 extensions 2019-05-06 00:08:57 +02:00
Eero Kelly b92dc14c4d [util] Enable constant buffer range check for NieR:Automata
This fixes a graphical corruption issue where Operator 6O's portrait
displays as a large flashing circle due to uninitialized buffer reads.

Fixes issue: https://github.com/ValveSoftware/Proton/issues/1543

Reviewed-by: Liam Middlebrook <lmiddlebrook@nvidia.com>
2019-04-30 16:08:52 +02:00
Philip Rebohle ed0719432d [dxvk] Add support for per-app configuration
Feature request by Alexandr Oleynikov (@tannisroot).
2019-04-26 19:17:32 +02:00
Philip Rebohle 2c0ddbd072
[util] Enable D3D11_MAP_FLAG_DO_NOT_WAIT for Anno 1800
Removes a sync point and almost doubles performance as a result.
2019-04-12 10:52:25 +02:00
Philip Rebohle b89646584b
[util] Enable constant buffer range check for Dark Souls Remastered ans Grim Dawn 2019-04-05 20:56:32 +02:00
Philip Rebohle d2395180af
[util] Add helpers to pack/unpack data to/from larger units 2019-04-04 13:00:31 +02:00
Marin Baron 1c434d86cb [util] Enable deferred surface creation for "Dissidia Final Fantasy NT Free Edition".
Avoid white screen, "D3D11Device: No such vertex shader semantic: COLOR0"...
https://www.reddit.com/r/archlinux/comments/b7e38x/protondxvk_dissidia_nt/
2019-03-31 03:27:05 +02:00
Philip Rebohle a646f8cf2c
[util] Enable deferred surface creation for Nioh
See discussion in #284.
2019-03-29 08:49:37 +01:00
Philip Rebohle cfdac13ea5
[dxgi] Add new COM interface for per-monitor data 2019-03-14 18:26:37 +01:00
Philip Rebohle c35af973bb
[util] Disable NvAPI hack for Star Wars Battlefront 2015
Fixes #968.
2019-03-14 16:33:35 +01:00
Philip Rebohle 833c433556
[util] Enable relaxed barriers for Devil May Cry 5
Same engine as RE2, same ~10% performance improvement.
2019-03-11 18:36:09 +01:00
Philip Rebohle d9931e3621
[utils] Report Nvidia GPUs for Far Cry 3 and Far Cry 4
Both games make assumptions about the exact clear value for UNORM
render targets, which is incorrect on most Vulkan drivers.
2019-02-18 18:04:36 +01:00
Philip Rebohle fe781df591
[util] Enable relaxed barriers for Resident Evil 7
Same engine as Resident Evil 2, although the impact will be lower.
2019-02-15 20:59:33 +01:00
Philip Rebohle 9bfa470581
[util] Implement createDirectory function 2019-02-11 21:59:46 +01:00
Philip Rebohle 629238ac36
[util] Implement tows method to convert strings to wide strings 2019-02-11 21:35:32 +01:00
Philip Rebohle 746562de5a
[dxgi,d3d11] Remove IDXGIVkPresentDevice 2019-02-11 20:06:12 +01:00
Philip Rebohle f6380fa152
[util] Enable relaxed barriers for Resident Evil 2
Improves performance by up to 10% when GPU-bound.
2019-02-08 01:38:03 +01:00
Philip Rebohle 9c4a6ee950
[utils] Enable strict division for Final Fantasy XIV
Fixes #904.
2019-02-05 21:28:27 +01:00
Philip Rebohle 405bd737e0
[util] Disable nvapi hack for Far Cry 4 / Primal
Dunia engine games don't seem to like this either.
2019-02-04 07:09:37 +01:00
Philip Rebohle af92bc9d9b
[utils] Disable nvapi hack for Mass Effect Andromeda
Fixes #886.
2019-01-26 18:38:58 +01:00
Philip Rebohle cfc3f686bb
[util] Update per-app config overrides 2019-01-19 17:45:26 +01:00
Entryhazard 7306c3153c [util] Change getEnvVar to use getenv (#859) 2019-01-13 21:27:59 +01:00
Philip Rebohle 3935d2540e
[util] Get rid of explicit wchar_t parameter
We shouldn't be catering to Windows' weird string encoding mechanisms.
2019-01-11 13:43:15 +01:00
Philip Rebohle d12b2c6149
[util] Disable NVAPI hack for NFS2015 and CoD:WW2
Fixes #850.
Fixes #832.
2019-01-10 11:59:35 +01:00
Philip Rebohle 6282280f8d
[util] Enable raw SSBOs for FIFA 19
This game incorrectly binds a typed buffer view when the shader
expects a structured buffer. Using raw SSBOs matches Windows
behaviour in this case. Fixes #642.
2019-01-08 23:18:46 +01:00
Philip Rebohle 524227d21c
[util] Add tristate config option type 2019-01-08 20:57:38 +01:00
Philip Rebohle 1e393bf24d [d3d11] Implement IWineDXGISwapChainFactory
See #822.
2018-12-21 14:03:28 +01:00
Philip Rebohle 1cc0455c8a
[dxgi] Remove old DXGIDevice implementation and IDXGIVkDevice
Both have been moved to the D3D11 module and are no longer needed.
2018-12-04 19:38:52 +01:00
Philip Rebohle 556e0d1dba Revert "[util] Report Nvidia GPU for Battlefield 1"
This reverts commit 500d67e002.

This game has some built-in driver detection on Nvidia which makes it
fail to start on non-Nvidia hardware or when nvapi is not present.
Fixes #795.
2018-12-02 20:27:39 +01:00
Philip Rebohle d1f179c5af
[util] Add likely/unlikely macros 2018-11-29 22:53:04 +01:00
Philip Rebohle 193d24a3e2
[dxgi] Remove IDXGIVkBackBuffer 2018-11-28 18:15:27 +01:00
Philip Rebohle 500d67e002
[util] Report Nvidia GPU for Battlefield 1
Reportedly improves performance for some weird reason.
2018-11-26 08:04:30 +01:00
Philip Rebohle 2d55852777
[dxvk] Disable state cache for Anno 2205
Fixes #686.
2018-11-24 20:04:21 +01:00
Philip Rebohle 8081dc1591
[util] Enable TGSM initialization for Quantum Break
Fixes artifacting on Mesa 18.3.
2018-11-23 16:12:09 +01:00
Philip Rebohle 81765de35b
[util] Remove default options that spoof AMD GPUs
This is no longer necessary due to the nvapi workaround.
2018-11-20 13:17:36 +01:00
Philip Rebohle bfb7e54218
[d3d11] Rename dcMapSpeedHack to dcSingleUseMode 2018-11-20 11:37:48 +01:00
Derek Lesho 66bcc4b3d8 Use std::string for util::getEnvVar input
This allows cleaner code when implementing DXVK as a native library
2018-11-16 06:43:45 +01:00
Philip Rebohle 305168d2bb
[util] Add method to set thread priority 2018-11-15 12:17:18 +01:00
Philip Rebohle 63d42073b8
[util] Add ticket lock implementation 2018-11-13 17:05:06 +01:00
Philip Rebohle 3d2e5a7cde
[util] Spoof Nvidia card for Elite Dangerous 2018-11-06 17:03:01 +01:00
Philip Rebohle 422cf71c55
[util] Spoof Nvidia GPU for The Vanishing of Ethan Carter Redux
For some reason it crashes with AMD cards, but apparently not in D3D code.
Closes #732.
2018-10-25 18:31:55 +02:00
Philip Rebohle 7eeeeaa625
[util] Provide method to compute SHA-1 hash from multiple data chunks
The underlying implementation supports this trivially, so we should
provide a way to use this feature.
2018-10-25 10:34:38 +02:00
Philip Rebohle 7b9726fd93
[d3d11] D3D11Presenter -> D3D11PresentDevice 2018-10-23 15:10:01 +02:00
Philip Rebohle 967b276acb
[d3d11] Add COM interface for API-agnostic presenter 2018-10-23 14:58:57 +02:00
Andreas Heider ac0f8d6a64
Spoof AMD GPU for Assetto Corsa Competizione 2018-10-22 10:57:54 +02:00
Błażej Szczygieł 57718dcf84 [util] Spoof AMD GPU for SAO FB
Improves performance by not trying to load nvapi.
2018-10-22 10:51:48 +02:00
Philip Rebohle 8630ee235a
[util] Re-enable D3D10 for Bioshock 2018-10-12 19:06:53 +02:00
Tk-Glitch 502af0f866 [util] Spoof AMD GPU for Dauntless and Redout.
It silences some nvapi related warnings and improves performance on both titles by up to 10%.
Also fixes a random crash on Redout.
2018-10-12 12:43:58 +02:00
Fredrick Lockert 27026f48a2 [util] Spoof AMD card for Star Citizen 2018-10-12 07:10:13 +02:00
Philip Rebohle 08b241b3ea
[d3d11] Add option to disable deferred context mapping speed hack
Fixes a regression in The Evil Within.

We should probably find a proper solution, but for now this is the best
thing we can do for games which reuse command lists.
2018-10-09 17:07:50 +02:00
Philip Rebohle 1e40a14a50
[d3d10] Disable D3D10 support for Bioshock 2018-09-24 15:30:13 +02:00
Philip Rebohle f3a23ab81f
[util] Add convenience method for SHA1 hash compulation 2018-09-22 12:04:06 +02:00
Jens Peters d4947261c6
[util] Improve logging of configuration options 2018-09-14 15:34:46 +02:00
Philip Rebohle 2d93452cba
[util] Spoof Nvidia card for Assassin's Creed Syndicate
This one actually doesn't work properly when the AMD AGS library
is not present, but is fine with nvapi not being there.
2018-09-12 14:10:49 +02:00
Philip Rebohle 6532302e34
[util] Implement dxvk:🧵:hardware_concurrency 2018-09-10 17:02:51 +02:00
Jens Peters e48c27ac30 [util] Spoof AMD card for Batman: Arkham Knight (#627)
This prevents game crashes in "Detective Mode" for NVidia cards.
Fixes https://github.com/doitsujin/dxvk/issues/580
2018-09-08 16:33:44 +02:00
MartinPL f949240b2f Spoof AMD card for GTA V
GTA V working out of box on Proton for Nvidia users. Tested
#624
https://github.com/ValveSoftware/Proton/issues/37#issuecomment-415833819
2018-09-08 12:51:39 +02:00
Philip Rebohle 60796a8143
[util] Spoof AMD card for Dragon Quest XI
This game for some reason seems to keep searching for NVAPI DLLs
and runs at an extremely low framerate as a result. Fixes #622.
2018-09-07 07:50:08 +02:00
Philip Rebohle f74661daa4
Revert "[util] Limit device memory size to 4095 MB for Life is Feudal MMO"
This reverts commit 73cbf5b352.

The workaround is no longer necessary due t a game update.
Closes #614.
2018-08-31 22:54:16 +02:00
Jacek Caban 9fd30cf5bf [util] Handle WCHAR strings in str::format. 2018-08-31 05:37:34 +02:00
Philip Rebohle 73cbf5b352 [util] Limit device memory size to 4095 MB for Life is Feudal MMO
Reporting 4GB or more VRAM causes an integer overflow in this game.
Fixes #591.
2018-08-25 01:23:22 +02:00
Philip Rebohle 55632c6b61
[util] Add log message when loading a configuration file 2018-08-17 19:42:32 +02:00
Philip Rebohle 7fa6dddc9e
[dxgi] Remove dxgi.fakeDx10Support option
No longer needed because we have actual Dx10 support now.
2018-08-17 12:33:53 +02:00
Philip Rebohle 6e74db4c6f
[util] Update default per-app quirks 2018-08-10 12:50:31 +02:00
Philip Rebohle fb9b520f60
[util] Move getAppConfig and getUserConfig to Config class
Fixes linker errors with winelib builds.
2018-08-07 16:59:49 +02:00
Philip Rebohle 5e58083c01
[util] Add classes and functions to support configuration files 2018-08-07 14:59:03 +02:00
Philip Rebohle cdf6ffb9bc
[util] Add private reference count to COM object
This can be used in case DXVK needs to keep a strong reference
to an object but may not expose that reference to the application.
2018-08-05 21:31:09 +02:00
Philip Rebohle 2b8c96fe35
[util] Fix reference counting for thread objects
Fixes a potential race when threads run out of scope
before the thread function has started.
2018-07-22 02:24:04 +02:00
Philip Rebohle e4c5880ac6
[util] Fix Win32 thread helper
- Implements move semantics for thread objects properly.
  This is necessary in order to avoid closing the thread
  handle multiple times, and to avoid passing invalid
  pointers to the thread function in some cases.
- More closely emulates the behaviour of std::thread.
2018-07-22 01:28:35 +02:00
Philip Rebohle 64ffcbc9ef
[util] Code cleanup for winegcc stuff 2018-07-21 12:51:50 +02:00
Mikhail Paulyshka f38ee85a39 [build] Fix compilation on MSVC (#505)
* [build] do not use shared_library/objects property with MSVC

* [util] use ./com/com_include.h instead of windef.h

It is required for Windows 10 SDK.

* [util] store thread procedure lambda in std::function

* [dxgi] fix annoying MSVC warning

warning C4099: 'IDXGIVkInteropDevice': type name first seen using 'class' now seen using 'struct'
2018-07-21 12:43:33 +02:00
Jacek Caban 6d16bb4c87 Don't use std::thread.
Wine needs to setup each thread that has an access to Windows APIs. It means that in winelib builds, we can't let standard C++ library create threads and need to use Wine for that instead. I wrote a thin wrapper around Windows thread functions so that the rest of code just has to use new dxvk::thread class instead of std::thread.
2018-07-19 08:55:34 +02:00
Jacek Caban cea1f15eab [util] Don't use std::wstring.
std::wstring is problematic, because wchar_t on other platforms might not be what we need. -fshort-wchar can mitigate that partially, but it's more problematic for stdc++ classes.
2018-07-19 08:55:34 +02:00
Jacek Caban c2c10cc207 [util] Reimplement fromws using WideCharToMultiByte and system codepage.
Also, using UTF-8 for convertion may not be what's intended, esp. if such strings end up being passed back to system API (eg. open file). The patch uses CP_ACP on mingw build (which is how Windows APIs will interpret it) or CP_UNIXCP on Wine (which is Wine extension to convert to whatever glibc and other host libs expect).

It's also needed for the next patch.
2018-07-19 08:55:34 +02:00
Jacek Caban 02ae42c7de [util] Remove getTempDirectory
It's not used anywhere.
2018-07-19 08:55:34 +02:00
Philip Rebohle 2aa6b04fd9
[dxvk] Fix tzcnt return value when source value is 0 2018-07-09 13:32:43 +02:00
Philip Rebohle 79a1703aea
[util] Set thread names for DXVK's own threads
Makes it easier to identify the command stream thread and the
queue processing thread easier when using a wine build that
supports SetThreadDescription.
2018-06-21 15:12:04 +02:00
Philip Rebohle 518c260ad6
[util] Add == and != operator to Flags 2018-06-06 23:09:23 +02:00
Joshua Ashton 5cc3afcf30 Fix tzcnt intrinsic on MSVC (#381) 2018-05-19 09:26:25 +02:00
Philip Rebohle ec3b7e39af
[util] Fix includes 2018-05-09 20:37:49 +02:00
Philip Rebohle c7d2957d8f
[util] Remove duplicate tzcnt function 2018-05-09 20:09:09 +02:00
Philip Rebohle 5465ee8a85
[util] Add tzcnt function 2018-05-09 00:01:00 +02:00
Philip Rebohle 59d4f1a1fb [util] Add method to retrieve SHA1 hashes in 32-bit chunks 2018-05-03 23:47:42 +02:00
Philip Rebohle c2854e1fb9
[dxgi] Added IDXGIVkInteropSurface interface 2018-04-19 20:13:53 +02:00
Philip Rebohle 478a87f6d2
[dxgi] Added IDXGIVkInteropDevice interface 2018-04-19 15:46:57 +02:00
pchome 62b99c9bd2 [util] Fix compilation with WINE headers (#246)
* [util] Define typeof keyword for WINE guiddef.h

GCC: `-std options disable certain keywords`
https://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html

MinGW: `#define __uuidof(type) __mingw_uuidof<__typeof(type)>()`
WINE: `#define __uuidof(type) __wine_uuidof<typeof(type)>()`

* [util] Fix compilation with WINE headers

Overall definitions are the same but `__wine_` prefix used in .

MinGW: _mingw.h + guiddef.h
WINE: guiddef.h
2018-04-07 14:01:13 +02:00
Philip Rebohle 00a452ed89
[d3d11] Implement DXBC shader module cache
If an application compiles the same shader multiple times, we should reuse
an already existing DxvkShaderModule instead of creating a new one. This
helps keep the number of DxvkGraphicsPipeline objects low in games such
as Rise of the Tomb Raider.
2018-04-06 17:54:02 +02:00
Philip Rebohle fc3f45c082 [hud] Added stat counters to the HUD 2018-04-03 14:49:13 +02:00
Philip Rebohle c9465b39d1 [util] Implement spin lock 2018-04-03 11:56:02 +02:00
Philip Rebohle 267daeccad [util] Add generic Logger::log method 2018-04-02 19:05:20 +02:00
Philip Rebohle 2973c18055 [dxgi/d3d11] Remove COM_QUERY_INTERFACE macro, reset pointers
May fix some crashes in applications that rely on the returned
pointer being set to nullptr before returning.
2018-04-02 12:52:02 +02:00
Philip Rebohle 77010d96e4 [dxgi/d3d11] Set returned pointers to nullptr before returning
May solve issues with applications which check whether the returned
pointer is null rather than checking a function's return value.
2018-04-02 12:04:20 +02:00
notaz 5eefb8530d [general] More wine test suite fixes (#220)
* [dxgi] Implement freeing private data

Done by passing null as data.
Fixes wine private data test crash and passes them.

* [dxgi] Improve private data argument handling

Fixes 7 more wine tests.
2018-03-29 07:11:21 +02:00
Philip Rebohle 8d3dcba8d5
[dxgi] Renamed private DXGI interfaces 2018-03-28 19:06:00 +02:00
Philip Rebohle 6f6e12a329
[util] Fix possible crash with null interfaces in private storage 2018-03-21 15:09:08 +01:00
Sebastian Wick 4518b1b76e Shader cache (#188)
* [util] Adds getTempDirectory() function

Will be used by on-disk pipeline caching

* [dxvk] Implement on-disk shader caching

Saving the pipeline cache to disk when the application exits
should be sufficient but the DxvkPipelineCache destructor isn't
reliably called on exit (ref-counting issue?).
As a workaround every frame we check and save the cache if the
size increased by some amount or after one minute elapsed.

* [dxvk] Periodically update shader cache file in separate thread
2018-03-21 02:45:11 +01:00
Mikhail Paulyshka 9deb73a2a7 Add support for MSVC, attempt 3 (#130)
* [dxvk] fixes for MSVC

* nullptr -> int is illegal conversion for MSVC. nullptr was replaced with VK_NULL_HANDLE
* MSVC does not support source code strings longer than 65535 chars. String was replaced with array of chars.

* [utils] fixes for MSVC

* __mingw_uuidof() does not exists in MSVC
* apply GCC pragma only for GCC
* added missing header

* [dxbc] fixes for MSVC

*added missing header

* [dxgi] fixes for MSVC

* user __declspec(uuid()) instead of _mingw_uuidof()
* do not use DLLEXPORT macro for MSVC

* [d3d11] fixes for MSVC

* replace WINBOOL with BOOL
* do not declare D3D11 structs for MSVC
* do not use DLLEXPORT macro for MSVC

* [meson] fix build scripts for MSVC

* change cpp version from c++1z to c++latest for MSVC
* set -DOMINMAX definition for MSVC
* disable test and wine_utils for MSVC
* use .def files instead of __declspec(dllexport) for MSVC (bypass 'C2375: redefinition; different linkage' error)
* fix .def files for MinGW
* add --enable-stdcall-fixup linker flag for MinGW
2018-03-06 18:34:34 +01:00
Philip Rebohle 1cbe6829eb
Revert "Add MSVC support (#123)"
This reverts commit c63d4361a0.
2018-03-05 14:32:28 +01:00
Mikhail Paulyshka c63d4361a0 Add MSVC support (#123)
* [utils] fixes for MSVC

* __mingw_uuidof() does not exists in MSVC
* apply GCC pragma only for GCC
* added missing header

* [dxvk] fixes for MSVC

* nullptr -> int is illegal conversion for MSVC. nullptr was replaced with VK_NULL_HANDLE
* MSVC does not support source code strings longer than 65535 chars. String was replaced with array of chars.

* [dxbc] fixes for MSVC

*added missing header

* [dxgi] fixes for MSVC

* user __declspec(uuid()) instead of _mingw_uuidof()

* [d3d11] fixes for MSVC

* replace WINBOOL with BOOL
* do not declare D3D11 structs

* [meson] fix build scripts for MSVC

* change cpp version from 1z to 17 for MSVC
* set -DOMINMAX definition for MSVC
* disable test and wine_utils for MSVC
* use .def files instead of __declspec(dllexport) (bypass 'C2375: redefinition; different linkage' error)
2018-03-05 14:28:51 +01:00
Clément Guérin 858107278f [util] fix GUID printing 2018-02-24 22:48:40 -08:00
Philip Rebohle 54cfdbdc51
[dxvk] Implemented more query and query pool methods 2018-02-13 13:43:27 +01:00
Philip Rebohle ad6c45d6b1
[dxvk] Improve debuggability of shader compiler issues
When using DXVK_LOG_LEVEL=debug, the graphics pipeline manager now
prints the names of the shaders used by the pipeline. This shall
help debug driver crashes in vkCreate*Pipelines.
2018-02-07 16:44:30 +01:00
Philip Rebohle 9fbddf57df
[dxvk] Emit dynamic state after binding a graphics pipeline
Fixes issues with stencil references becoming undefined under
certain circumstances. This issue was encountered in Heroes
of the Storm.
2018-01-29 20:01:49 +01:00
Philip Rebohle ca53eaf878
[general] Minor COM pointer improvements 2018-01-29 16:31:25 +01:00
Philip Rebohle e198bd2d55
[d3d11] Sub-allocate from larger update buffers for UpdateSubresources
Reduces the allocation overhead when applications frequently
call UpdateSubresources to update small buffers and textures.
2018-01-23 16:43:55 +01:00
Raffarti feae2988d6 Improvements for log files (#22)
* Improvements for log files
 - Added exec name to log files
 - Added DXVK_LOG_PATH environment variable to specify the log folder
* Remove .exe from log name
* log: add log level none
* log: corrected type for string position
2018-01-23 13:36:31 +01:00
Philip Rebohle 27573e9b25
[dxvk] Added app and device specific options 2018-01-16 13:58:57 +01:00
Philip Rebohle 8805958736
[util] Fixed message logging to file 2018-01-16 12:32:09 +01:00
Philip Rebohle 18835c324e
[util] Added getExeName() function
This will allow DXVK to apply game-specific
features or workarounds in the future.
2018-01-16 11:33:34 +01:00
Philip Rebohle 1a40a272bd
[util] Fixed compiler issue with older GCC versions 2018-01-15 13:08:23 +01:00
Philip Rebohle a0fafe3043 [util] Log level can now be controlled manually 2018-01-12 00:05:09 +01:00
Philip Rebohle 2c5b1c151f [d3d11] Refactored texture creation 2017-12-19 16:01:50 +01:00
Philip Rebohle 2b6cb25675 [d3d11] Implemented D3D11_APPEND_ALIGNED_ELEMENT 2017-12-18 23:24:10 +01:00
Philip Rebohle 9827ace3b0 [d3d11] Fixed buffer bindings with non-zero offsets 2017-12-14 19:07:08 +01:00
Philip Rebohle 2a266eaad4 [general] Added 32-bit support 2017-12-12 12:50:52 +01:00
Philip Rebohle 9a86178604 [d3d11] Fixed severe reference-counting issue in state objects 2017-12-10 00:55:30 +01:00
Philip Rebohle 3d6e88428a [com] ... yeah, almost. 2017-12-09 23:20:31 +01:00
Philip Rebohle fa1ef8248e [com] Fixed crashes caused by reentrant Release() 2017-12-09 22:20:40 +01:00
Philip Rebohle 4a4f5bea29 [util] Added missing files 2017-12-08 11:18:23 +01:00
Philip Rebohle 9e1cf8396b [dxvk] Added environment variable to toggle debug layers 2017-12-08 01:32:02 +01:00
Philip Rebohle 69b938118d [general] Fixed write conflicts in logger 2017-12-06 23:36:11 +01:00
Philip Rebohle 5944410d2c [tests] Removed dxvk dependency for d3d11 and dxgi tests 2017-12-06 19:06:23 +01:00
Philip Rebohle 9017af51ec [utils] Added SHA-1 implementation for shader code hashing 2017-12-06 18:13:51 +01:00
Philip Rebohle c7e1131864 [d3d11] Implemented rasterizer state creation 2017-12-06 13:16:54 +01:00