summaryrefslogtreecommitdiff
path: root/src/drmmode_display.c
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2018-06-26 19:02:21 +0200
committerMichel Dänzer <michel@daenzer.net>2018-06-28 10:29:29 +0200
commitbaea4fa492f635cdfe746a84be2e337d9aeae8a9 (patch)
treec8a199c8295a15ebb3752b79bfe21555632bbc61 /src/drmmode_display.c
parent19a40758be04e1d451a030f452efb49e8aaad541 (diff)
Call drmmode_crtc_gamma_do_set from drmmode_setup_colormap
Instead of from drmmode_set_mode_major. There's no need to re-set the gamma LUT on every modeset, the kernel should preserve it. Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'src/drmmode_display.c')
-rw-r--r--src/drmmode_display.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 5fe49b6..9364a88 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1353,12 +1353,6 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
else
drmmode_crtc->scanout_id = 0;
- /* gamma is disabled in kernel driver for deep color */
- if (pScrn->depth != 30)
- drmmode_crtc_gamma_do_set(
- crtc, crtc->gamma_red, crtc->gamma_green,
- crtc->gamma_blue, crtc->gamma_size);
-
if (drmmode_crtc->prime_scanout_pixmap) {
drmmode_crtc_prime_scanout_update(crtc, mode, scanout_id,
&fb, &x, &y);
@@ -3450,6 +3444,7 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode,
Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn)
{
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+ int i;
if (xf86_config->num_crtc) {
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, AMDGPU_LOGLEVEL_DEBUG,
@@ -3457,13 +3452,23 @@ Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn)
if (!miCreateDefColormap(pScreen))
return FALSE;
/* All radeons support 10 bit CLUTs. They get bypassed at depth 30. */
- if (pScrn->depth != 30 &&
- !xf86HandleColormaps(pScreen, 256, 10,
- NULL, NULL,
- CMAP_PALETTED_TRUECOLOR
- | CMAP_RELOAD_ON_MODE_SWITCH))
- return FALSE;
+ if (pScrn->depth != 30) {
+ if (!xf86HandleColormaps(pScreen, 256, 10, NULL, NULL,
+ CMAP_PALETTED_TRUECOLOR
+ | CMAP_RELOAD_ON_MODE_SWITCH))
+ return FALSE;
+
+ for (i = 0; i < xf86_config->num_crtc; i++) {
+ xf86CrtcPtr crtc = xf86_config->crtc[i];
+
+ drmmode_crtc_gamma_do_set(crtc, crtc->gamma_red,
+ crtc->gamma_green,
+ crtc->gamma_blue,
+ crtc->gamma_size);
+ }
+ }
}
+
return TRUE;
}