backend/drm: add WLR_DRM_NO_ATOMIC_GAMMA env variable

This allows the legacy interface to be used instead of atomic if needed. This
is a workaround to make some Intel GPUs work (if this variable is unset) as
well as to make some AMD GPUs work (if this variable is set).
This commit is contained in:
emersion 2018-10-28 23:43:21 +01:00
parent 659d39baaa
commit 443a38bd3f
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 8 additions and 4 deletions

View file

@ -208,10 +208,12 @@ static bool atomic_crtc_set_gamma(struct wlr_drm_backend *drm,
struct wlr_drm_crtc *crtc, size_t size, struct wlr_drm_crtc *crtc, size_t size,
uint16_t *r, uint16_t *g, uint16_t *b) { uint16_t *r, uint16_t *g, uint16_t *b) {
// Fallback to legacy gamma interface when gamma properties are not available // Fallback to legacy gamma interface when gamma properties are not available
// (can happen on older intel gpu's that support gamma but not degamma) // (can happen on older Intel GPUs that support gamma but not degamma).
// TEMP: This is broken on AMDGPU. Always fallback to legacy until they get // TEMP: This is broken on AMDGPU. Provide a fallback to legacy until they
// it fixed. Ref https://bugs.freedesktop.org/show_bug.cgi?id=107459 // get it fixed. Ref https://bugs.freedesktop.org/show_bug.cgi?id=107459
if (crtc->props.gamma_lut == 0 || true) { const char *no_atomic_str = getenv("WLR_DRM_NO_ATOMIC_GAMMA");
bool no_atomic = no_atomic_str != NULL && strcmp(no_atomic_str, "1") == 0;
if (crtc->props.gamma_lut == 0 || no_atomic) {
return legacy_iface.crtc_set_gamma(drm, crtc, size, r, g, b); return legacy_iface.crtc_set_gamma(drm, crtc, size, r, g, b);
} }

View file

@ -7,6 +7,8 @@ wlroots specific
considered the primary DRM device. considered the primary DRM device.
* *WLR_DRM_NO_ATOMIC*: set to 1 to use legacy DRM interface instead of atomic * *WLR_DRM_NO_ATOMIC*: set to 1 to use legacy DRM interface instead of atomic
mode setting mode setting
* *WLR_DRM_NO_ATOMIC_GAMMA*: set to 1 to use legacy DRM interface for gamma
control instead of the atomic interface
* *WLR_LIBINPUT_NO_DEVICES*: set to 1 to not fail without any input devices * *WLR_LIBINPUT_NO_DEVICES*: set to 1 to not fail without any input devices
* *WLR_BACKENDS*: comma-separated list of backends to use (available backends: * *WLR_BACKENDS*: comma-separated list of backends to use (available backends:
wayland, x11, headless) wayland, x11, headless)