st/xorg: Flesh out colour map support and support depth 8.
[mesa.git] / src / gallium / state_trackers / xorg / xorg_crtc.c
index 28e30e09ff3a6137f92ac18e1ccb68c4fd9fca19..71f7b8c21d0379222d2e3c44299f8eea2f1b41a1 100644 (file)
@@ -133,6 +133,16 @@ crtc_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
     if (ret)
        return FALSE;
 
+    /* Only set gamma when needed, to avoid unneeded delays. */
+#if defined(XF86_CRTC_VERSION) && XF86_CRTC_VERSION >= 3
+    if (!crtc->active)
+#endif
+       crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green,
+                              crtc->gamma_blue, crtc->gamma_size);
+
+#if defined(XF86_CRTC_VERSION) && XF86_CRTC_VERSION >= 3
+    crtc->active = TRUE;
+#endif
     crtc->x = x;
     crtc->y = y;
     crtc->mode = *mode;
@@ -145,7 +155,10 @@ static void
 crtc_gamma_set(xf86CrtcPtr crtc, CARD16 * red, CARD16 * green, CARD16 * blue,
               int size)
 {
-    /* XXX: hockup */
+    modesettingPtr ms = modesettingPTR(crtc->scrn);
+    struct crtc_private *crtcp = crtc->driver_private;
+
+    drmModeCrtcSetGamma(ms->fd, crtcp->drm_crtc->crtc_id, size, red, green, blue);
 }
 
 #if 0 /* Implement and enable to enable rotation and reflection. */