xserver/hw/xfree86/drivers/modesetting
Aaron Plattner b75d0cca28 modesetting: Defer crtc gamma size upgrade to drmmode_setup_colormap
Rather than trying to create a gamma ramp array of the appropriate size in
drmmode_crtc_init when the GAMMA_LUT property should be used, just flag the crtc
as wanting to use the GAMMA_LUT property and then replace the gamma ramp later,
right before calling xf86HandleColormaps. This avoids a problem during initial
startup where xf86RandR12CreateObjects12 hard-codes a gamma ramp size of 256,
causing xf86RandR12CrtcSetGamma to read past the end of the DIX layer's RandR
gamma ramp array:

  PreInit
    drmmode_pre_init
      drmmode_crtc_init
        crtc->gamma_size = 1024

  ScreenInit
    xf86CrtcScreenInit
      xf86RandR12Init
        xf86RandR12Init12
          xf86RandR12CreateObjects12
            RRCrtcCreate
              randr_crtc->gammaSize = 0
          xf86RandR12InitGamma(pScrn, 256)
            RRCrtcGammaSetSize
              randr_crtc->gammaSize = 256
          xf86RandR12InitGamma
            xf86RandR12CrtcInitGamma
              RRCrtcGammaSet
                xf86RandR12CrtcSetGamma
                  // crtc->gamma_size is 1024 here, while randr_crtc->gammaRed
                  // is a 256-element array.
                  memcpy(crtc->gamma_red, randr_crtc->gammaRed, crtc->gamma_size * sizeof(crtc->gamma_red[0]));
    drmmode_setup_colormap
      xf86HandleColormaps
        xf86RandR12InitGamma
          RRCrtcGammaSetSize
            randr_crtc->gammaSize = 1024

Fixes: 245b9db0 - modesetting: Use GAMMA_LUT when available
Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1126
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Robert Morell <rmorell@nvidia.com>
2021-04-05 14:25:33 -07:00
..
Makefile.am modesetting: Fix broken manpage in autoconf build 2019-10-04 10:29:23 +02:00
dri2.c modesetting: Use EGL_MESA_query_driver to select DRI driver if possible 2019-11-26 01:36:10 -08:00
driver.c modesetting: Add missing copyright notices 2020-11-25 04:28:42 +00:00
driver.h modesetting: Add missing copyright notices 2020-11-25 04:28:42 +00:00
drmmode_display.c modesetting: Defer crtc gamma size upgrade to drmmode_setup_colormap 2021-04-05 14:25:33 -07:00
drmmode_display.h modesetting: Add missing copyright notices 2020-11-25 04:28:42 +00:00
dumb_bo.c modesetting: Include dix-config.h from dumb_bo.c 2015-05-12 08:02:11 -07:00
dumb_bo.h modesetting: Drop dumb_bo::map_count field and dead unmap code. 2014-12-11 11:26:19 -08:00
meson.build xfree86: Link fb statically 2019-07-23 14:24:00 -04:00
modesetting.man modesetting: Use GAMMA_LUT when available 2020-10-29 15:13:17 -07:00
pageflip.c Fix spelling/wording issues 2020-07-05 13:07:33 -07:00
present.c modesetting: Fix build with DebugPresent() enabled 2020-11-26 22:06:56 +00:00
vblank.c xserver/output: rename some badly named variables/APIs. 2020-07-10 06:17:44 +10:00