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. Signed-off-by: Mario Kleiner <[email protected]> --- hw/xfree86/drivers/modesetting/drmmode_display.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c index 9c38563..d4c3ca8 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -2262,13 +2262,18 @@ 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, + (pScrn->rgbBits > 8) ? 1 << pScrn->rgbBits : 256, + 10, drmmode_load_palette, NULL, + CMAP_PALETTED_TRUECOLOR | + CMAP_RELOAD_ON_MODE_SWITCH)) return FALSE; return TRUE; } -- 2.7.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
