From 7bc86c7d2346eadb3aafe1550ec55e63f2a3b3e5 Mon Sep 17 00:00:00 2001 From: Mario Kleiner Date: Tue, 27 Feb 2018 03:05:31 +0100 Subject: [PATCH] modesetting: Adapt xf86HandleColorMaps() for > 24 color depth. (v2) This retains old behavior for depths <= 24, but allows gamma table and colormap updates to work properly at depth 30. This needs the xf86Randr12CrtcComputeGamma() fix for depth 30 from a previous commit to work. Otherwise the server will work, but gamma table updates will silently fail, iow. the server would always run with a default identity gamma lut. v2: Simplify as proposed by Michel. Signed-off-by: Mario Kleiner Reviewed-by: Antoine Martin (v1) --- hw/xfree86/drivers/modesetting/drmmode_display.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c index 9c3856378..53a245267 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -2262,13 +2262,17 @@ drmmode_load_palette(ScrnInfoPtr pScrn, int numColors, Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn) { - xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0, "Initializing kms color map\n"); + xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0, + "Initializing kms color map for depth %d, %d bpc.\n", + pScrn->depth, pScrn->rgbBits); if (!miCreateDefColormap(pScreen)) return FALSE; - /* all radeons support 10 bit CLUTs */ - if (!xf86HandleColormaps(pScreen, 256, 10, drmmode_load_palette, NULL, - CMAP_PALETTED_TRUECOLOR | - CMAP_RELOAD_ON_MODE_SWITCH)) + + /* Adapt color map size and depth to color depth of screen. */ + if (!xf86HandleColormaps(pScreen, 1 << pScrn->rgbBits, 10, + drmmode_load_palette, NULL, + CMAP_PALETTED_TRUECOLOR | + CMAP_RELOAD_ON_MODE_SWITCH)) return FALSE; return TRUE; }