1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-01-23 08:52:12 +01:00

104 Commits

Author SHA1 Message Date
Andrew Eikum
5706ec55e4 [dxgi] Don't check window validity in IDXGISwapchain::GetFullscreenState
This causes an error on exit in Jump King, which uses SharpDX.
2020-01-16 17:50:32 +01:00
Philip Rebohle
aa40decc23
[d3d11] Don't present if the presenter has no swap chain.
Also fixes DXGI_PRESENT_TEST handling for zero-sized windows.
2019-12-15 11:38:57 +01:00
Philip Rebohle
7446d3c58a
[dxgi] Don't allow changing the FRAME_LATENCY_WAITABLE_OBJECT flag 2019-11-26 16:54:52 +01:00
Philip Rebohle
9785fba66e
[dxgi] Implement IDXGISwapChain2::GetFrameLatencyWaitableObject 2019-11-26 16:54:52 +01:00
Philip Rebohle
ef37b5fed6
[dxgi] Implement IDXGISwapChain2::SetFrameLatency 2019-11-26 16:11:46 +01:00
Philip Rebohle
d90d450618
[dxgi] Handle invalid arguments passed to Present1
fixes a wine test failure.
2019-10-02 00:19:41 +02:00
Philip Rebohle
f58c1c2d1d
[dxgi] Fix SetFullscreenState behaviour with invalid usage
Fixes various wine test failures.
2019-10-02 00:01:26 +02:00
Philip Rebohle
60ff2b8977
[dxgi] Fix GetContainingOutput and GetFullscreenState output pointer
We're supposed to keep a reference to the output around and return
that for fullscreen swap chains. Fixes various wine test failures.
2019-10-02 00:00:37 +02:00
Philip Rebohle
0436e6ddce
[dxgi] Fix some return codes in DxgiSwapChain
Fixes some wine test failures.
2019-10-01 22:25:37 +02:00
Philip Rebohle
32410a4f2b
[dxgi] Implement IDXGISwapChain4 2019-09-20 18:06:34 +02:00
Andrew Eikum
326eb0bf80 [dxgi] Don't fail leaving fullscreen if window is already destroyed
Unreal Engine 4 games destroy the window, then call
SetFullscreenMode(FALSE). If this call fails, they pop up an error
dialog. Wine tests show that this call should succeed.
2019-06-21 17:27:34 +02:00
Chip Davis
d741bc47ef [dxgi] Use a recursive mutex.
Some games, like Final Fantasy XIV, call `SetFullscreenState()` again
after the window is resized. When the resize itself was triggered by a
`SetFullscreenState()` call, this will cause us to re-enter the mutex.
2019-03-29 08:26:19 +01:00
Philip Rebohle
5b72e84726
[dxgi] Use IDXGIVkMonitorInfo in DxgiSwapChain 2019-03-14 18:26:39 +01:00
Philip Rebohle
9f8c1d08a6
[dxgi,d3d11] Move swap chain creation to D3D11 module 2019-02-11 20:06:12 +01:00
Joshua Ashton
5ea8648cd9 [d3d11, d3d10, dxgi] Handle null ppvObject in QueryInterface. (#909)
When a null ppvObject is passed into a QueryInterface on any IUnknown, a E_POINTER should be returned as the result (and it should not crash.)

This matches native d3d11/d3d10/dxgi behaviour and the documentation found here https://docs.microsoft.com/en-us/windows/desktop/api/unknwn/nf-unknwn-iunknown-queryinterface(q_) for IUnknown.
2019-02-10 08:01:01 +01:00
Philip Rebohle
4e22e4bc3a [dxgi] Refactor swap chain creation
Cleans up constructor and moves a bunch of common code
to the new CreateDxvkSwapChainForHwnd function, which
can be called from both d3d11 and dxgi.

Also fixes potential issues with the current implementation
of the IWineDXGISwapChainFactory interface.
2018-12-21 15:53:29 +01:00
Philip Rebohle
15078357dc [dxgi] Implement and use GetWindowClientSize fuction
This new function provides a cleaner way to retrieve a
window's client size and can be used outside the swap
chain functions.
2018-12-21 15:14:07 +01:00
Philip Rebohle
d9cf8fdc58
[dxgi] Use new mode switch API for DxgiSwapChain 2018-12-11 16:02:46 +01:00
Philip Rebohle
aa2ec3f998
[dxgi] Port DxgiOutput and DxgiSwapChain to new monitor data API
This allows us to remove the dependency between DxgiSwapChain
and DxgiVkAdapter without losing gamma control emulation.
2018-12-11 15:32:54 +01:00
Philip Rebohle
57e814717e
[dxgi] Move GetOutputFromMonitor to swap chain class
Not a great solution, but we only need it for the swap chain anyway.
2018-12-10 12:38:33 +01:00
Philip Rebohle
9e9e17348f
[dxgi] DxgiSwapchain: Remove SetGammaControl methods
These were only used internally to forward stuff to the presenter
anyway, so we might as well call that method directly.
2018-12-10 12:34:57 +01:00
Philip Rebohle
7eb60daf63
[dxgi] DxgiSwapchain: Take factory as IDXGIFactory
No need to be specific about the exact type of factory.
2018-12-10 12:10:15 +01:00
Philip Rebohle
86d4d31b7c
[dxgi] Ignore scaling and scanline order during fullscreen transitions
Games usually don't use these correctly anyway, so we might as well
ignore them, since DXVK's DXGI does not report scanline modes other
than UNSPECIFIED. Fixes #291.
2018-12-06 16:38:45 +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
e4d3357e55
[dxgi] Query window size before creating presenter
Otherwise we may pass a size of zero to the presenter.
2018-11-16 15:03:09 +01:00
Philip Rebohle
c25483e856
[dxgi] Implement IDXGISwapChain3
- Stub IDXGISwapChain3::ResizeBuffers1
2018-11-15 18:02:27 +01:00
Philip Rebohle
23ac9b5277
[dxgi] Implement IDXGISwapChain2 stubs
Most of the additions are stubs for now, but we should be
able to implement most of the functionality at a later time.

None of the backends implement this yet, but this should be
relatively easy to do.
2018-11-15 17:08:35 +01:00
Philip Rebohle
1724d51079
[dxgi] Refactor presenter creation
This change is needed to support non-D3D11 presenters in our DXGI code.
2018-11-12 11:39:34 +01:00
Philip Rebohle
589229f4ca
[dxgi] Query device interface from the presenter
Removes the coupling between IDXGISwapChain and IDXGIDevice.
This is necessary because D3D12 devices don't support IDXGIDevice.
2018-10-24 15:54:56 +02:00
Philip Rebohle
7b9726fd93
[d3d11] D3D11Presenter -> D3D11PresentDevice 2018-10-23 15:10:01 +02:00
Philip Rebohle
b53f6661f8
[dxgi] Use new presenter for D3D11 2018-10-23 14:58:57 +02:00
Philip Rebohle
87f1cd2385
[dxgi] Fix undefined display mode format for display mode transitions
Fixes resolution change option in Dark Souls 3.
2018-10-06 08:01:48 +02:00
Philip Rebohle
2541aeb25c
[dxgi] Add option to override the sync interval 2018-09-09 19:14:30 +02:00
Philip Rebohle
d7b16dd90a
[dxgi] Add option to change the back buffer count 2018-09-09 19:12:07 +02:00
Philip Rebohle
b7d8be25f1
[dxgi] Use DXGI back buffer count for the Vulkan swap chain 2018-09-09 19:07:41 +02:00
Philip Rebohle
5f42950650 [dxgi] Don't use FIFO present mode if IMMEDIATE is not available
Might fix potential performance issues on Nvidia when VSYNC is disabled.
Based on RPCS3/rpcs3@25ec3789fe
2018-08-26 23:39:53 +02:00
Andrew Eikum
262797f9d5 [dxgi] SetFullscreenState succeeds if not changing state
This fixes an error dialog on exiting Unreal Engine 4 games.
2018-08-13 17:06:55 +02:00
Philip Rebohle
524ff9e233
[dxgi] Use global user config for DXGI options 2018-08-07 14:59:09 +02:00
Philip Rebohle
62e4c867ec
[dxgi] Relax IDXGISwapChain thread safety
Fixes a deadlock in Dragon Age: Inquisition.
2018-08-04 10:16:40 +02:00
Philip Rebohle
adcc7a4573
[dxgi] Synchronize presentation to enforce maximum frame latency
Some games may rely on the maximum number of frames in flight.
Might fix a related issue in Hard Reset (#503) and Okami HD (#283).
2018-07-20 11:40:37 +02:00
Philip Rebohle
9de3a619c2
[dxgi] Use back buffer size to determine fullscreen resolution
This is the correct behaviour on Windows and may fix some issues.
2018-07-12 16:00:33 +02:00
Philip Rebohle
e615fc19a9
[dxgi] Support SyncInterval values > 1
Required for Eve Online and the Unity Blacksmith demo.
2018-05-28 21:06:35 +02:00
Philip Rebohle
38c5e57025
[dxgi] Refactor Vulkan swap chain and surface creation
Creating the Vulkan surface at the latest possible moment fixes
an issue with Frostpunk, which renders to a D3D9 swap chain
before presenting to the GXGI swap chain.
2018-05-23 13:03:12 +02:00
Philip Rebohle
d1b705bf0d
[dxgi] Implemented IDXGISwapChain1 2018-05-23 01:06:34 +02:00
Philip Rebohle
5a61d81135
[dxgi] Stubbed out IDXGISwapChain1 2018-05-22 23:50:28 +02:00
Philip Rebohle
94b74667e9
[dxgi] Fix Fullscreen->Windowed transition (again)
We need to preserve the flags if the application changes them.
This is in line with what native DXGI does.
2018-05-04 21:55:38 +02:00
Philip Rebohle
6cbc133619 [dxgi] Use ShowWindow instead of redundant SetWindowPos call 2018-05-04 17:53:02 +02:00
Philip Rebohle
de803b3670 [dxgi] Report refresh rate as a multiple of 1000 Hz
More closely emulates what Windows dows.
2018-05-04 17:37:29 +02:00
Philip Rebohle
4c298d486d [dxgi] Restore display mode even when the window got destroyed 2018-04-30 20:15:35 +02:00
Philip Rebohle
a32050374c [dxgi] Implement display mode changes
Allows games to change the screen resolution in fullscreen
mode. This is currently in a rough shape and some games may
not work as expected when selecting fullscreen mode.
2018-04-29 23:03:27 +02:00