Joshua Ashton
bbd1d84cd0
[dxgi] Set BitsPerColor to 10
...
For two reasons:
1) Some apps will only enable or attempt to enable HDR if BitsPerColor is >= 10.
2) Encouraging apps to create 10-bit swapchains for use in hardware dithering on Gamescope/Steam Deck and to have more precision thru scanout color transforms
2023-08-26 01:43:42 -07:00
Philip Rebohle
9b019d26ac
[dxgi] Forward IDXGIOutput::GetFrameStatistics to full-screen swap chain
...
Testing on Windows reveals that this function does not work with windowed
mode swap chains even in flip model.
2023-07-31 21:47:44 +02:00
Philip Rebohle
28f48f9fdc
[dxgi] Initialize output refresh counts with non-zero values
...
Matches Windows behaviour.
2023-06-21 15:16:37 +02:00
Joshua Ashton
495dc75ab2
[wsi] Pull out NormalizeDisplayMetadata
2023-05-19 19:26:27 +01:00
Joshua Ashton
b44c5bbd18
[dxgi] Fallback to P3 color primaries for HDR displays without chroma info in edid
2023-04-21 04:21:16 +01:00
Philip Rebohle
55e7cb1d54
[dxgi] Only log QueryInterface errors once
2023-03-01 13:25:56 +01:00
Joshua Ashton
c10b53ed3e
[dxgi] Add dxgi.enableHDR option
2023-01-06 17:27:38 +01:00
Joshua Ashton
f25475d05e
[dxgi] Normalize display metadata to something rational
...
Sometimes we can't get an EDID if things aren't plumbed fully, or some displays just have broken EDIDs.
This accounts for both of those cases by using some dummy data if we are missing information.
Fixes value reporting to match Windows on common displays such as LG OLEDs.
2023-01-06 17:27:38 +01:00
Joshua Ashton
f453d6ee2a
[dxgi] Implement DXGIOutput::GetDesc1's ColorSpace
...
Adds the ability to punt the global colorspace into HDR from SetColorSpace1.
We have no way of checking the actual Windows colorspace as the
only public method for this *is* DXGI which we are re-implementing.
So we just pick our color space based on the DXVK_HDR env var
and the punting from SetColorSpace1.
We might expand on this in future, but this is good enough for an
initial implementation.
2023-01-06 17:27:38 +01:00
Philip Rebohle
ebd29007d4
[dxgi] Actually unlock monitor info
...
Fixes some deadlocks.
2022-11-21 20:24:15 +01:00
Joshua Ashton
f0a0e1b964
[dxgi] Report display metadata in IDXGIOutput6::GetDesc1
2022-11-21 17:26:53 +01:00
Joshua Ashton
aa71e7e323
[dxgi] Cache display metadata + colorimetry in DXGI_VK_MONITOR_DATA
2022-11-21 17:26:53 +01:00
Philip Rebohle
57af9e8760
[dxgi] Estimate vblank count for frame statistics
2022-09-16 12:49:42 +02:00
Philip Rebohle
c56a9b5a3f
[dxgi] Implement WaitForVBlank using new sleep helper
...
Not very accurate, but probably good enough if the display
refresh rate is known.
2022-09-16 12:49:42 +02:00
Joshua Ashton
fad6f764ea
[dxgi] Remove unused DEVMODE variable
2022-08-21 21:35:09 +02:00
Joshua Ashton
16ff9b48cd
[dxgi] Enumerate interlaced modes if requested
2022-08-20 20:27:07 +02:00
Joshua Ashton
e13a9f9cf6
[dxgi] Make output code use new wsi interface
2022-08-20 20:27:07 +02:00
Philip Rebohle
b53c3057e1
[dxgi] Fix refresh rate filtering in FindClosestMatchingMode
...
We need to operate on the pre-filtered list, or otherwise we may run into
problems where not all refresh rates are supported for all display modes.
2022-01-10 14:45:19 +01:00
Philip Rebohle
401edc53fe
[dxgi] Show warning in DxgiOutput::GetFrameStatistics
2021-05-20 22:27:36 +01:00
Philip Rebohle
5d0efd87c2
[dxgi] Implement IDXGIOutput6
2020-04-28 15:00:57 +02:00
Philip Rebohle
a623e8e7d6
[dxgi] Use new common monitor functions
2020-03-04 23:06:15 +00:00
Philip Rebohle
9e69a610cb
[dxgi] Use 64-bit integers for refresh rate matching math
...
Otherwise, there may be integer overflows for certain parameter values.
2019-10-29 08:42:53 +01:00
Joshua Ashton
6d0757520b
[dxgi] Initialize size of DEVMODEW structure
...
The documentation says we should do this.
2019-10-06 00:28:19 +02:00
Philip Rebohle
cd82669a85
[dxgi] Fix GetDisplayModeList1 output for DXGI_FORMAT_UNKNOWN
...
Fixes a wine test failure.
2019-10-01 22:12:09 +02:00
Philip Rebohle
f5515075f2
[dxgi] Fix GetDisplayModeList behaviour with a zero mode count
...
Allocate at least one array element so that we don't accidentally
treat the mode list like it was NULL. Fixes a wine test failure.
2019-10-01 22:12:08 +02:00
Philip Rebohle
5cb7f26bb7
[dxgi] Implement IDXGIOutput5
2019-09-20 18:06:34 +02:00
Philip Rebohle
6d999fad89
[dxgi] Fix some issues introduced with FilterModesByDesc cleanup
2019-06-11 15:45:32 +02:00
Andrew Eikum
cd6e3ffe75
[dxgi] Return non-exact matches from FindClosestMatchingMode1
2019-06-11 02:29:25 +02:00
Philip Rebohle
50347e1256
[dxgi] Use IDXGIVkMonitorInfo in DxgiOutput
2019-03-14 18:26:39 +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
a29b9f6779
[dxgi] Use new mode switch API for DxgiOutput
...
Also removes the old functions which are no longer needed.
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
171251bc83
[dxgi] Implement IDXGIFactory4
...
Do not support WARP adapters for the moment.
2018-11-15 17:08:36 +01:00
Philip Rebohle
a849ffc56c
[dxgi] Implement IDXGIOutput3
2018-11-15 17:08:35 +01:00
Philip Rebohle
f03d87b918
[dxgi] Implement IDXGIOutput1
...
Required for DXGI 1.2.
2018-11-15 17:08:35 +01:00
Philip Rebohle
e5f3019524
[dxgi] *Actually* silence WaitForVBlank warning
...
Guess who needs more coffee.
2018-10-09 19:17:20 +02:00
Philip Rebohle
6dd5cdbc3e
[dxgi] Silence WaitForVblank warning
2018-10-09 14:48:49 +02:00
Philip Rebohle
2bdd614d07
[dxgi] Log display mode changes
2018-08-26 12:37:12 +02:00
Philip Rebohle
a728884742
[dxgi] Fixed nonsense compiler warning with some GCC versions
2018-07-14 12:15:15 +02:00
Philip Rebohle
4052cad3ff
[dxgi] Fix 'auto' declaration in FindClosestMatchingMode
...
Hopefully fixes an incorrect GCC warning for some people.
2018-07-02 09:19:27 +02:00
Philip Rebohle
7a22fa22a7
[dxgi] FindClosestMatchingMode: Handle Width/Height = 0 case
...
When an applicationn calls this method with the width or height
set to 0, we are allowed to pick any resolution, so we'll try to
find one close to the *current* display mode which usually returns
the current display mode itself.
2018-06-14 11:34:17 +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
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
Philip Rebohle
bb3e3c9e4f
[dxgi] GetDisplayModeList: Report DXGI_MODE_SCALING_UNSPECIFIED
...
This is what happens on Windows 10. In addition, we might have
to add CENTERED and STRETCHED entries for non-native modes.
2018-04-18 16:04:17 +02:00
Philip Rebohle
ffe3028285
[dxgi] GetDisplayModeList: Sort display mode list
...
Some games, including Dark Souls 3, rely on display modes
being returned in a specific order. This emulates Windows
10 behaviour.
2018-04-18 15:33:56 +02:00
Philip Rebohle
01061e43aa
[dxgi] GetDisplayModeList: Do not report modes as stretched
...
This is more in line with what Windows does. Games should now be
able to list more than just the monitor's maximum resolution again.
2018-04-18 15:33:15 +02:00
Philip Rebohle
af19bba048
[dxgi] Remove support gamma-related ScaleAndOffsetSupported
...
Some games, including Heroes of the Storm (#287 ), do not set
the values correctly so it's better to ignore them altogether.
2018-04-15 20:12:41 +02:00
Philip Rebohle
8d3e60c2f1
[dxgi] Cosmetic changes
2018-04-14 12:02:55 +02:00
Philip Rebohle
5d7c83855e
[dxgi] Use 1D texture to implement the gamma lookup table
...
This allows us to abuse hardware texture filters for linear
interpolation. Should fix an issue with the latest Nvidia
beta drivers.
2018-04-13 13:47:15 +02:00
pchome
f806c8eafc
[dxgi] Use GetMonitorInfoW function explicitly ( #271 )
...
No `std::mbstowcs` string conversion needed than.
W/o this change I have different output when running `dxgi-factory.exe` compiled with MinGW:
* `Output 0:`
```
\\.\DISPLAY1 (default)
\\.\DISPLAY1 (DXVK MinGW)
\ (DXVK winebuild)
```
With this patch all three variants are identical (`\\.\DISPLAY1`)
p.s. same problem in dxgi_adapter.cpp, but `deviceProp.deviceName` is vulkan structure parameter (char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]).
2018-04-12 20:12:48 +02:00