xf86-video-amdgpu: Branch 'master' - 2 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Jul 18 16:26:45 UTC 2018


 configure.ac          |    2 -
 src/drmmode_display.c |   52 +++++++++++++++++++++++++++++++++-----------------
 2 files changed, 36 insertions(+), 18 deletions(-)

New commits:
commit ae8e02c6fc4ef5d5340b8cd4739e66b19b9e3386
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Fri Jul 13 10:38:56 2018 +0200

    Hardcode "non-desktop" RandR property name
    
    It's a bit silly to require current randrproto just for this definition,
    which can't really change anyway.
    
    Suggested-by: Qiang Yu <qiang.yu at amd.com>
    Reviewed-by: Qiang Yu <Qiang.Yu at amd.com>

diff --git a/configure.ac b/configure.ac
index f4633e3..1ab5a7a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -64,7 +64,7 @@ AC_ARG_WITH(xorg-module-dir,
             [moduledir="$libdir/xorg/modules"])
 
 # Store the list of server defined optional extensions in REQUIRED_MODULES
-XORG_DRIVER_CHECK_EXT(RANDR, [randrproto >= 1.6.0])
+XORG_DRIVER_CHECK_EXT(RANDR, randrproto)
 XORG_DRIVER_CHECK_EXT(RENDER, renderproto)
 XORG_DRIVER_CHECK_EXT(XV, videoproto)
 XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 0a6475e..2222022 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2634,7 +2634,7 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
 
 #if XF86_CRTC_VERSION >= 8
 	i = koutput_get_prop_idx(pAMDGPUEnt->fd, koutput, DRM_MODE_PROP_RANGE,
-				 RR_PROPERTY_NON_DESKTOP);
+				 "non-desktop");
 	if (i >= 0)
         	nonDesktop = koutput->prop_values[i] != 0;
 #endif
commit 1247be21704dd185ce26097e11b3685815ffac4f
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Fri Jul 13 18:30:04 2018 +0200

    Support gamma correction & colormaps at depth 30 as well
    
    Only supported with the advanced colour management properties available
    with DC as of kernel 4.17.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index f6cafcc..0a6475e 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -3333,14 +3333,12 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp)
 		info->drmmode_crtc_funcs.shadow_destroy = NULL;
 	}
 
-	/* Hw gamma lut's are currently bypassed by the hw at color depth 30,
-	 * so spare the server the effort to compute and update the cluts.
-	 */
-	if (pScrn->depth == 30)
-		info->drmmode_crtc_funcs.gamma_set = NULL;
-
 	drmmode_cm_init(pAMDGPUEnt->fd, drmmode, mode_res);
 
+	/* Spare the server the effort to compute and update unused CLUTs. */
+	if (pScrn->depth == 30 && !drmmode_cm_enabled(drmmode))
+		info->drmmode_crtc_funcs.gamma_set = NULL;
+
 	for (i = 0; i < mode_res->count_crtcs; i++)
 		if (!xf86IsEntityShared(pScrn->entityList[0]) ||
 		    (crtcs_needed && !(pAMDGPUEnt->assigned_crtcs & (1 << i))))
@@ -3636,6 +3634,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);
+	AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
 	int i;
 
 	if (xf86_config->num_crtc) {
@@ -3643,22 +3642,41 @@ Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn)
 			       "Initializing kms color map\n");
 		if (!miCreateDefColormap(pScreen))
 			return FALSE;
-		/* All radeons support 10 bit CLUTs. They get bypassed at depth 30. */
-		if (pScrn->depth != 30) {
-			if (!xf86HandleColormaps(pScreen, 256, 10, NULL, NULL,
-						 CMAP_PALETTED_TRUECOLOR
-						 | CMAP_RELOAD_ON_MODE_SWITCH))
-				return FALSE;
+
+		if (pScrn->depth == 30) {
+			if (!drmmode_cm_enabled(&info->drmmode))
+				return TRUE;
 
 			for (i = 0; i < xf86_config->num_crtc; i++) {
 				xf86CrtcPtr crtc = xf86_config->crtc[i];
+				void *gamma = malloc(1024 * 3 * sizeof(CARD16));
+
+				if (!gamma) {
+					ErrorF("Failed to allocate gamma LUT memory\n");
+					return FALSE;
+				}
 
-				drmmode_crtc_gamma_do_set(crtc, crtc->gamma_red,
-							  crtc->gamma_green,
-							  crtc->gamma_blue,
-							  crtc->gamma_size);
+				crtc->gamma_size = 1024;
+				crtc->gamma_red = gamma;
+				crtc->gamma_green = crtc->gamma_red + crtc->gamma_size;
+				crtc->gamma_blue = crtc->gamma_green + crtc->gamma_size;
 			}
 		}
+
+		/* All Radeons support 10 bit CLUTs. */
+		if (!xf86HandleColormaps(pScreen, 1 << pScrn->rgbBits, 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;


More information about the xorg-commit mailing list