Originally disconnected monitors were not removed from hyprland
correctly and duplications were created when an external monitor was
reattached leading to invalid behavior when switching
(empty desktop is visible).
Now removed monitors are explicitly disconnected during connectors
scanning.
evdi/displaylink devices doesnt give us a rendernode at all, and asahi
was hard to associate if a rendernode was related to the
displaynode/card so we fallback to just first found if that occurs.
might be more appropiate to figure out a proper way to deal with these
cases then workaround ever single driver that doesnt give rendernodes
but so far seems only to be evdi.
problem that occured is a 3 gpu situation, the evdi card ended up using
a rendernode for a complete different gpu because it fallbacked to that.
if the backends now gets a rendernode it wont call the authmagic on the
displaynode making dumb buffer creation failing on certain drivers. so
reopen it again in the creation of the CDRMDumbAllocator.
* renderer: use rendernode if available
init the CDRMRenderer on the rendernode if available otherwise fallback
to the displaynode.
* backend: use rendernode if available
use rendernode if available for the backends, or fallback to display
node. make cdrmrenderer use backend fd.
* core: use -Wpedantic and fix warnings
dont use anonymous structs, iso c++ forbids it. compound literals is a
c99 thing use designated c++20 initializing instead.
* flake.lock: update
* core: rename .bits to .values
make the name more appropiate to its usage.
---------
Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
* feat: only do modeset when the mode is different from the current one
* style: remove braces around 1-line if
* fmt: run clang-format
* drm: add reset function back and remove reset from start
* drm: fix dpms on fastboot
* fmt: run clang-format
* Update Atomic.cpp
only scan connected connectors when deciding which gpu to become primary
mux switched laptops still have connectors for internal panel but not
connected.
* allocator: Don't force linear for multigpu if unsupported
* drm: Use an intermediate CPU buffer for blit if necessary
* drm: Add comment and cleanup style a bit
* drm: Fix formatting from comment addition
* drm: Use std::vector and std::span for intermediateBuf
* drm: Fix style and add null check
* drm: Remove TODO about pixel buf format
* do not set cursor planeProps unless smth changed
* do not skip cursor state flag setting
* drm: scan only cards and not outputs, safeguard against null renderer (#106)
* drm: dont scan card outputs
no need to scan for card[0-9]* and probe card0-eDP etc if they are kms,
bootvga and rendernodes etc. skip the wildcard and remove a unused
size_t variable.
* drm: dont commit state if renderer is missing
setting certain env vars to force egl implentations makes the render
creation fail on the second gpu. instead of causing a coredump,
safeguard commitState and let the monitor turn blank instead.
* props: bump version to 0.5.0
* drm: Validate conn before dereference in CDRMAtomicRequest::commit() (#108)
During startup, CDRMAtomicImpl::reset() may emit a call to method
commit of a CDRMAtomicRequest instance with member "conn" uninitialized,
leading to a segfault. Validate the the pointer before dereference it as
a workaround.
Fixes: 55ac962 ("DRM: preliminary atomic support")
Closes: https://github.com/hyprwm/aquamarine/issues/107
Signed-off-by: Yao Zi <ziyao@disroot.org>
* buffer: remove useless forward def
* drm: clearer flow when rescanning connectors (#113)
* consolidates into checkOutput for clearer flow when rescanning connectors
* add error log
* drm: allow multigpu blit from explicit to implicit (#114)
* version: bump to 0.5.1
* flake.lock: update
* flake.nix: gcc13 -> gcc14 (#118)
* drm: udev scan only drm_minor, not connectors (#119)
* drm: log errno set by drmModeAtomicCommit (#120)
* drm: moved null check for renderer to shouldBlit() (#109) (#121)
* drm: only fail INVALID format when enabled (#122)
* flake.lock: update
* drm: only clear buffers when fullReconfigure succeeds (#124)
* core/drm: Add HDR Support (#112)
* version: bump to 0.6.0
* drm: limit udev drm_minor to Linux after a132fa41be (#129)
Not implemented by libudev-devd yet:
[ERR] [AQ] drm: No gpus in scanGPUs.
[ERR] [AQ] drm: Found no gpus to use, cannot continue
[ERR] [AQ] DRM Backend failed
* do not set cursor planeProps unless smth changed
* test separate cursor commits
* do not change hdr blob unless asked to
* rebase
* split atomic commit processing and move hdr & colorspace into modeset
* fix wide color gamut flag & cleanup
* remove unused debug var
---------
Signed-off-by: Yao Zi <ziyao@disroot.org>
Co-authored-by: Tom Englund <tomenglund26@gmail.com>
Co-authored-by: Vaxry <vaxry@vaxry.net>
Co-authored-by: Ziyao <ziyao@disroot.org>
Co-authored-by: Ikalco <73481042+ikalco@users.noreply.github.com>
Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
Co-authored-by: Austin Horstman <khaneliman12@gmail.com>
Co-authored-by: Richard Henninger <56615615+richen604@users.noreply.github.com>
Co-authored-by: Jan Beich <jbeich@FreeBSD.org>
Not implemented by libudev-devd yet:
[ERR] [AQ] drm: No gpus in scanGPUs.
[ERR] [AQ] drm: Found no gpus to use, cannot continue
[ERR] [AQ] DRM Backend failed
* drm: dont scan card outputs
no need to scan for card[0-9]* and probe card0-eDP etc if they are kms,
bootvga and rendernodes etc. skip the wildcard and remove a unused
size_t variable.
* drm: dont commit state if renderer is missing
setting certain env vars to force egl implentations makes the render
creation fail on the second gpu. instead of causing a coredump,
safeguard commitState and let the monitor turn blank instead.
dual gpus can init with no crtc and later rescan for them, however
getRenderFormats might be called before that happends and null ptr
deref, guard against it.