1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-01-09 22:46:08 +01:00
Commit Graph

191 Commits

Author SHA1 Message Date
Philip Rebohle
5fd361757b
[d3d9] Disable old border color hack if custom border colors are supported 2020-05-04 20:18:44 +02:00
Philip Rebohle
263865cf28
[d3d9] Enable custom border color features if available 2020-05-04 19:46:57 +02:00
DadSchoorse
9b602ef850
[util] Rework tearFree as a Tristate
PR #1606.
2020-05-02 10:18:13 +02:00
Philip Rebohle
f1e069568d
[build] Remove .spec files
No longer needed now that we don't support winelib builds anymore.
2020-05-01 00:52:33 +02:00
Joshua Ashton
9f4baf3f55 [d3d9] Fix swapchain surface refs once and for all
The refcounting for d3d9 swapchain surfaces is very funny.
They don't actually hold any form of reference to their parent, unlike the surface->texture relationship.

When a swapchain is destroyed, the surfaces become orphans (like offscreen rendertargets) if they are still reffed.

Calling GetContainer on them when orphaned will return E_NOINTERFACE and nullptr for __uuidof(IDirect3DSwapChain)

Fixes some potential lingering refs on the device.
2020-04-26 13:32:22 +01:00
Joshua Ashton
409eac9d20 [d3d9] Use if/else in GetCommonTexture and TextureRefPrivate
These are the only things it can be, and they all end up calling what the compiler will optimize to the same function so we can avoid a branch here.
2020-04-19 01:11:11 +01:00
Joshua Ashton
3f2b582d5f [d3d9] Avoid prematurely deleting swapchain backbuffers if they are still reffed on reset 2020-04-19 00:59:02 +01:00
Joshua Ashton
837861ffdd [d3d9] Cleanup private ref code for subresources 2020-04-18 21:06:38 +01:00
Joshua Ashton
42089d73c5 [d3d9] Fix ref-counting for swapchain surfaces 2020-04-18 21:06:38 +01:00
Philip Rebohle
ab8ab4052f [d3d9] Fix compiler warnings 2020-04-13 22:05:27 +01:00
Joshua Ashton
4699d4162a [d3d9] Implement swapchain containers for surfaces
Fixes a crash in L.A. Noire.

Closes #1564
2020-04-13 01:42:30 +01:00
Joshua Ashton
6e5e50c359 [d3d9] Optimize hazard tracking in the SetTexture case
We don't need to perform DS/RT hazard tracking updates if the texture we replaced and ourselves do not have those usages.
2020-04-09 15:29:41 +01:00
Joshua Ashton
9b4cd8aa87 [d3d9] Remove texMask from UpdateActiveHazardsRT
This is an invalid optimization and leads to render hazards being dropped

Our hazard tracking for render targets is done in render target indices as opposed to texture indices for depth stencil tracking so `texMask` doesn't work for that reason, and the fact that even if it did, there is no relationship to an individual texture and a render target index that has a hazard.
2020-04-09 15:29:41 +01:00
Joshua Ashton
ecb3e05cb9 [d3d9] Ignore adapter type for CheckDepthStencilMatch and CheckDeviceType when windowed 2020-04-09 02:35:35 +01:00
Joshua Ashton
c3cff09c4f [d3d9] Implement d3d9.longMad option 2020-04-08 23:20:57 +01:00
Joshua Ashton
93b4427a13 [d3d9] Add and use D3D9WindowMessageFilter helper
Stops us forgetting to reset the message filter

Previously when the device was intially created with fullscreen, filter would always be enabled
2020-04-08 20:20:01 +01:00
Joshua Ashton
3f4ffdfba8 [d3d9] Fix MinGW compilation
MSVC doesn't care about static.
2020-04-06 20:35:30 +01:00
Joshua Ashton
46329689ba [d3d9] Handle WM_DESTROY event 2020-04-06 20:16:17 +01:00
Joshua Ashton
18b46e5c22 [d3d9] Move HookWindowProc out of swapchain class 2020-04-06 20:15:49 +01:00
Joshua Ashton
a340cd4dd3 [d3d9] Add CallCharsetFunction helper 2020-04-06 20:06:45 +01:00
Joshua Ashton
6cf052b3f2 [d3d9] Cleanup ResetWindowProc 2020-04-06 19:45:15 +01:00
Joshua Ashton
135d246610 [d3d9] Cleanup and formatting for window proc hook 2020-04-06 19:42:48 +01:00
Joshua Ashton
47ddd8466a [d3d9] Re-look up wnd proc iterator
Avoids a potential issue where this could change address during this time.
2020-04-06 19:40:25 +01:00
Joshua Ashton
a80eea926a [d3d9] Filter out window messages we cause
Closes #1517
2020-04-06 19:38:26 +01:00
Joshua Ashton
83e03ac9d8 [d3d9] Make COPM render state unlikely
This is only ever called once per game and we don't support it anyway
2020-04-05 06:27:14 +01:00
Joshua Ashton
92031a7bac [d3d9] Fix dumb typo in ATOC handling 2020-04-03 21:13:15 +01:00
Joshua Ashton
457c0c3021 [d3d9] Fix state sometimes not being set in SetRenderState
Previously this prevented us disabling AlphaToCoverage once the application enabled it.
2020-04-03 07:52:35 +01:00
Joshua Ashton
904d3e6c90 [d3d9] Don't declspec dllexport on MinGW builds
Fixes ordinal exporting on MinGW, which was causing a crash in CSGO due to it querying a fixed ordinal for a D3D9On12 hack.
2020-04-02 02:00:42 +01:00
Joshua Ashton
bb2e88ee06 [d3d9] Fix crash when calling ColorFill with NULL format
Impacts #1528
2020-03-25 07:23:17 +00:00
Joshua Ashton
5ff7cad77d [d3d9] Fix formatting in D3D9WindowProc 2020-03-25 07:14:35 +00:00
Joshua Ashton
a9339ae832 [d3d9] Fix depth hazard case for write + read
Closes #1519
2020-03-20 14:23:29 +01:00
Philip Rebohle
1150121606 [d3d9] Fix depth-stencil layouts
Otherwise we're always using GENERAL for depth buffers.
2020-03-20 04:04:53 +00:00
Joshua Ashton
021c593ad8 [d3d9] Use all heaps when determining initial texture memory
Matches behaviour on Windows 10

Merges #1436
2020-03-18 19:40:01 +00:00
Florian Will
1a4b15a82d [d3d9] Add option to disable the explicit frontbuffer
The Vulkan swapchain is unaffected by this, but we don't create an
"internal" frontbuffer in D3D9SwapChainEx if this option is set. This
breaks GetFrontBufferData (which returns backbuffer data if the option
is enabled), but it disables front/backbuffer flipping.

Most windows drivers apparently always use the same backbuffer for all
frames in windowed mode. At least one game (ZUSI 3) seems to rely on
this behavior, and only redraws dirty regions for each frame instead of
redrawing everything. With buffer flips, this leads to flickering. When
enabling this new noExplicitFrontBuffer option, the flickering
disappears.
2020-03-18 19:31:00 +00:00
Joshua Ashton
6a8933cf31 [d3d9] Allow arbitrary backbuffer/adapter formats
It seems these aren't linked in the way the docs made out, this fixes a crash when starting some titles.

Closes #1508
2020-03-18 06:00:28 +00:00
Joshua Ashton
a9040c5cce [d3d9] Allow multisampled depth stencil resolves in StretchRect
Fixes a crash in some Source 2 titles
2020-03-18 04:59:27 +00:00
Philip Rebohle
ba213c1fa0 [dxvk] Factor out waiting for resource to become idle
And use the new generic spin function to reduce syscall spam.
2020-03-15 03:43:04 +01:00
Philip Rebohle
da506f5932 [util] Add generic recursive spinlock 2020-03-15 03:43:04 +01:00
Rémi Bernon
14946c599f [d3d9] Hook WM_NCCALCSIZE to get rid of fullscreen non-client areas. 2020-03-11 17:46:08 +00:00
Joshua Ashton
64e649ae18 [d3d9] Don't check IsNull for depth stencil views
We don't need to do this. Depth stencils can never be D3DFMT_NULL.
2020-03-09 01:13:54 +00:00
Joshua Ashton
e33627cfdc [d3d9] Optimize unnecessary loops in hazard tracking
We only want to update specific indices of bitfields at a time, so pass through that information and mask it off.
2020-03-09 01:03:18 +00:00
Joshua Ashton
812a113a85 [d3d9] Avoid multiple tzcnts per loop in hazard tracking 2020-03-09 00:53:50 +00:00
Joshua Ashton
f6b26b302d [d3d9] Handle depth stencil hazards
Track depth stencil textures being used and whether we have any active hazards.

Rebind the framebuffer with VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL if we encounter a depth stencil hazard.

Fixes black squares in Mass Effect and validation errors in some titles.

Closes #1484
2020-03-09 00:53:19 +00:00
Joshua Ashton
102d97db02 [d3d9] Add IsDepthStencil helper to D3D9CommonTexture 2020-03-09 00:24:56 +00:00
Joshua Ashton
a432befa8d [d3d9] Add RT suffix to current hazard tracking
We can have DS hazards...
2020-03-09 00:23:22 +00:00
Joshua Ashton
eaa599bf9a [d3d9] Implement A2W10V10U10 format via conversion 2020-03-08 23:32:33 +00:00
Joshua Ashton
60ec7e8208 [d3d9] Implement X8L8V8U8 format via conversion 2020-03-08 23:22:52 +00:00
Joshua Ashton
afd4e6e457 [d3d9] Use a common header for cs conversion helpers 2020-03-08 22:29:41 +00:00
Joshua Ashton
45c8b09104 [d3d9] Don't update present region in Reset
Fixes a regression in A Hat in Time when changing resolutions
2020-03-06 18:23:08 +00:00
Philip Rebohle
245007daba [d3d9] Don't use m_monitor in GetDisplayModeEx
Should fix #1495.
2020-03-05 15:25:05 +00:00