Geoffrey McRae
23e394fd57
[idd] hdr: correct virtual monitor capabilities
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-07-19 23:38:05 +10:00
Geoffrey McRae
657ea3ebe6
[idd] edid: advertise the full PQ luminance range
...
The virtual display transports HDR pixels rather than emitting light.
Advertise approximately 10,000 nits for both peak and frame-average
luminance, and leave the physical black level unspecified.
This prevents Windows from mapping HDR into an arbitrary virtual
display limit before the frame reaches the real host display.
2026-07-19 20:42:20 +10:00
Geoffrey McRae
ad7d869aa1
[idd] hdr: publish only per-content metadata
...
Monitor-default HDR metadata describes the virtual display rather than
the captured content. Do not expose it through KVMFR or use it to select
downstream processing limits.
Only publish explicit NEW frame metadata and otherwise use the complete
PQ range internally.
2026-07-19 20:41:36 +10:00
Quantum
57d39bdd78
[idd] helper: use common/array.h instead of custom macros
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-07-19 06:48:17 +10:00
Quantum
f8d9574709
[idd] helper: clean up exclusive monitor timer and respect setting
2026-07-19 06:19:30 +10:00
Quantum
f3d5c7e185
[idd] helper: hook up exclusive monitor toggle to registry
2026-07-19 06:19:30 +10:00
Quantum
1eb88b3d1e
[idd] helper: add UI to toggle exclusive monitor setting
2026-07-19 06:19:30 +10:00
Quantum
6c623afc91
[idd] helper: add setting for exclusive monitor (default: yes)
2026-07-19 06:19:30 +10:00
Geoffrey McRae
7114d6f049
[idd] fix failure to detect GPU acceleration is available
2026-07-19 06:13:24 +10:00
Geoffrey McRae
653cecadeb
[idd] disable HDR and post-processing when in software mode
2026-07-19 05:52:40 +10:00
Geoffrey McRae
20225f05d1
[idd] hdr: complete HDR display and cursor metadata
...
Publish BT.2020 chromaticities in the virtual monitor EDID so
Windows receives a valid HDR colour volume.
Extend cursor messages with their IddCx SDR white level and an
explicit visibility-valid flag. Consumers can then calibrate cursors
without treating colour-transform-only messages as cursor hides.
2026-07-19 05:12:59 +10:00
Geoffrey McRae
fcd66a5172
[all] fix copyright headers
2026-07-19 03:31:44 +10:00
Geoffrey McRae
26ca90893a
[idd/client] apply the Windows display color transform
...
Honor the IddCx 3x4 XYZ matrix and post-transfer LUT in the IDD
conversion pipeline. Carry transform changes to the client so EGL applies
the same calibration to hardware cursors, and invalidate the full frame
whenever calibration changes.
2026-07-19 03:25:30 +10:00
Geoffrey McRae
1f6dbb0dae
[idd] hdr: propagate per-frame HDR metadata
...
Handle DEFAULT, NEW, and UNCHANGED IDDCX HDR10 metadata states and
publish valid mastering metadata through KVMFR. Preserve the metadata
across post-processing without reallocating resources for
metadata-only changes.
2026-07-19 02:13:57 +10:00
Geoffrey McRae
d8dee8806b
[idd] rgb24: fix packed-texel damage endpoints
2026-07-19 01:02:08 +10:00
Geoffrey McRae
86824a0010
[idd] accumulate damage from dropped frames
2026-07-19 01:00:22 +10:00
Geoffrey McRae
84e0a1b956
[idd] cancel stale swap chain assignments
...
Invalidate in-progress swap chain setup when IddCx unassigns the
monitor, and serialize replacement assignments so workers are
never started on abandoned handles.
Also initialize all worker dependencies before starting the processing
thread and treat teardown during SetDevice as normal cancellation.
2026-07-19 00:28:56 +10:00
Geoffrey McRae
e0d3794c1d
[idd] helper: fix dependency cycle issue on windows 10
2026-07-19 00:14:40 +10:00
Geoffrey McRae
a700db51a0
[idd] debug: add additional logging
2026-07-19 00:13:58 +10:00
Geoffrey McRae
ab96c7ea81
[idd] ensure the only active monitor is the IDD
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-07-18 22:21:18 +10:00
Quantum
83209fd3a9
[idd] helper: implement deferred mode save and revert
2026-07-18 17:45:18 +10:00
Quantum
064fef1f62
[idd] helper: add buttons for deferred mode save and revert
2026-07-18 17:45:18 +10:00
Quantum
0e05ff9742
[idd] helper: rearrange UI in preparation for deferred saves
2026-07-18 17:45:18 +10:00
Quantum
dcb84451f0
[idd] helper: make WS_CHILD | WS_VISIBLE the default in widgets
...
This avoids literally every widget we load having to declare
`WS_CHILD | WS_VISIBLE` and then just break if you forget.
2026-07-18 04:51:22 +10:00
Geoffrey McRae
b48f8d6fec
[idd] remove debounce logic now the lifecycle is properly protected
2026-07-18 04:41:38 +10:00
Geoffrey McRae
87db473122
[idd] apply resolution after the final replug
...
Preserve the requested display mode across intermediate swap chains when
rapid resolution changes cause replugs to be coalesced. Apply and clear
the mode only once the final replacement swap chain is ready.
2026-07-18 04:36:42 +10:00
Geoffrey McRae
791da3387a
[idd] serialize monitor replugs with swap chain teardown
...
Keep the replug lifecycle gated until the old swap chain has drained and
released its pending frame, and the replacement swap chain is fully
initialized. Coalesce additional requests into a follow-up replug to
prevent overlapping topology changes and IddCx release-frame timeout
bugchecks.
2026-07-18 04:30:21 +10:00
Geoffrey McRae
9676b30299
[idd] stop flooding the log with parsed modes
2026-07-18 04:22:14 +10:00
Geoffrey McRae
4631a14c44
[idd] implement config reload
2026-07-18 04:12:13 +10:00
Geoffrey McRae
6e70f36134
[idd] never add the extraMode to the EDID
...
Doing so causes windows to treat a new EDID as a new monitor
2026-07-18 04:01:19 +10:00
Geoffrey McRae
234f8623dc
[idd] avoid release frame timeouts during replug
...
Drop frames when the LGMP queue is full instead of blocking
while holding an IddCx surface. Always finish every
acquired frame, including duplicate frame numbers, so
replug teardown cannot trigger the release-frame watchdog.
2026-07-18 03:53:24 +10:00
Geoffrey McRae
3095a86556
[idd] fix failure to initialize variables
2026-07-18 03:42:16 +10:00
Geoffrey McRae
37d7f0e48f
[idd] keep the generated EDID immutable
...
Generate the EDID once during adapter initialization and update only the
live mode list when resolutions change.
Changing the EDID during a monitor replug causes Windows to identify it
as a different monitor, losing the existing display configuration.
Reusing the original EDID preserves the monitor identity while still
allowing dynamic modes to be advertised through IddCx.
2026-07-18 02:14:12 +10:00
Geoffrey McRae
d0bc4f3e07
[idd] publish frames after copy submission
...
Submit the D3D12 copy before exposing the frame through LGMP, preventing
clients from waiting on work that has not yet been queued. Track the
last published buffer separately for safe subscriber resends and handle
submission failures.
2026-07-17 23:49:57 +10:00
Geoffrey McRae
2006fb640f
[idd/client/obs] hdr: wire up the SdrWhiteLevel from the capture
2026-07-17 17:50:23 +10:00
Geoffrey McRae
aa25b0cfe3
[idd] hdr: correct the BT.709 to BT.2020 conversion
2026-07-17 03:10:55 +10:00
Geoffrey McRae
e332dc77f2
[obs] fix HDR support to properly convert from PQ
2026-07-16 23:13:36 +10:00
Geoffrey McRae
ef8a4e2923
[idd] use the actual surface colorspace instead of guessing
2026-07-16 20:24:23 +10:00
Geoffrey McRae
4734a4028a
[idd] collapse duplicate messages to the latest event only
2026-07-16 19:43:24 +10:00
Geoffrey McRae
5e6d88f382
[idd] debounce resolution changes
2026-07-16 19:32:12 +10:00
Geoffrey McRae
1ce446f97a
[idd] stop using IddCxMonitorUpdateModes(2)
...
While it would make much more sense to use these then a full replug to
change modes, Microsoft have not properly implemented the API to clear
the cached monitor mode states internally, making these calls useless.
Revert to just replugging the device on mode change
2026-07-16 19:24:24 +10:00
Geoffrey McRae
b97a0b79f1
[idd] don't rebuild the monitor from inside the old monitor's context
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-07-16 16:13:24 +10:00
Geoffrey McRae
fbf564f2e1
[idd] prevent races from corrupting the mode list and edid
2026-07-16 15:26:21 +10:00
Geoffrey McRae
0140a3f6fb
[client/idd] hdr: fix incorrect tone mapping knee bug
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-07-16 10:48:10 +10:00
Geoffrey McRae
e502af7d9d
Revert "[idd/client] correct HDR luminance when PQ conversion is in use"
...
This reverts commit 05d8bc5311 .
2026-07-16 09:58:44 +10:00
Geoffrey McRae
05d8bc5311
[idd/client] correct HDR luminance when PQ conversion is in use
2026-07-16 09:34:02 +10:00
Geoffrey McRae
ff1631da67
[idd] hdr: dont advertise non hdr formats as hdr
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-07-16 05:34:09 +10:00
Geoffrey McRae
82d36a858f
[idd] fix the HDR16 to HDR10 post processor
...
`linear` is a HLSL keyword
2026-07-16 05:34:09 +10:00
Geoffrey McRae
9047c26694
[idd] hdr: fix incorrect struct usage
2026-07-16 05:34:09 +10:00
Geoffrey McRae
8301ec5ae5
[idd] cleanup IDD version guards for HDR support
2026-07-16 05:34:09 +10:00