All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH xf86-video-amdgpu] Don't apply gamma to HW cursor data if colour management is enabled
@ 2018-06-26 16:41 Michel Dänzer
       [not found] ` <20180626164135.2844-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Michel Dänzer @ 2018-06-26 16:41 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

From: Michel Dänzer <michel.daenzer@amd.com>

In that case, the display hardware applies gamma to the HW cursor.

Bugzilla: https://bugs.freedesktop.org/106578
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
---
 src/drmmode_display.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index fa0c05b0c..fc8dd7a4d 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1515,6 +1515,12 @@ drmmode_cursor_src_offset(Rotation rotation, int width, int height,
 
 #endif
 
+static uint32_t
+drmmode_cursor_gamma_passthrough(xf86CrtcPtr crtc, uint32_t argb)
+{
+	return argb;
+}
+
 static uint32_t
 drmmode_cursor_gamma(xf86CrtcPtr crtc, uint32_t argb)
 {
@@ -1525,9 +1531,6 @@ drmmode_cursor_gamma(xf86CrtcPtr crtc, uint32_t argb)
 	if (!alpha)
 		return 0;
 
-	if (crtc->scrn->depth != 24 && crtc->scrn->depth != 32)
-		return argb;
-
 	/* Un-premultiply alpha */
 	for (i = 0; i < 3; i++)
 		rgb[i] = ((argb >> (i * 8)) & 0xff) * 0xff / alpha;
@@ -1544,6 +1547,12 @@ static void drmmode_do_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image, uint32_
 {
 	ScrnInfoPtr pScrn = crtc->scrn;
 	AMDGPUInfoPtr info = AMDGPUPTR(pScrn);
+	uint32_t (*cursor_gamma)(xf86CrtcPtr crtc, uint32_t argb) =
+		drmmode_cursor_gamma;
+
+	if ((crtc->scrn->depth != 24 && crtc->scrn->depth != 32) ||
+	    drmmode_cm_enabled(&info->drmmode))
+		cursor_gamma = drmmode_cursor_gamma_passthrough;
 
 #if XF86_CRTC_VERSION < 7
 	if (crtc->driverIsPerformingTransform) {
@@ -1559,8 +1568,7 @@ static void drmmode_do_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image, uint32_
 								      dstx, dsty);
 
 				ptr[dsty * info->cursor_w + dstx] =
-					cpu_to_le32(drmmode_cursor_gamma(crtc,
-									 image[srcoffset]));
+					cpu_to_le32(cursor_gamma(crtc, image[srcoffset]));
 			}
 		}
 	} else
@@ -1570,7 +1578,7 @@ static void drmmode_do_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image, uint32_
 		int i;
 
 		for (i = 0; i < cursor_size; i++)
-			ptr[i] = cpu_to_le32(drmmode_cursor_gamma(crtc, image[i]));
+			ptr[i] = cpu_to_le32(cursor_gamma(crtc, image[i]));
 	}
 }
 
-- 
2.18.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-06-27 18:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-26 16:41 [PATCH xf86-video-amdgpu] Don't apply gamma to HW cursor data if colour management is enabled Michel Dänzer
     [not found] ` <20180626164135.2844-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-06-27 16:20   ` [PATCH v2 " Michel Dänzer
     [not found]     ` <20180627162039.17540-1-michel-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-06-27 18:40       ` Alex Deucher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.