st/xorg vmwgfx/xorg: Add a pre-init customizer callback
authorThomas Hellstrom <thellstrom@vmware.com>
Thu, 22 Jul 2010 00:05:35 +0000 (02:05 +0200)
committerThomas Hellstrom <thellstrom@vmware.com>
Fri, 23 Jul 2010 02:48:32 +0000 (04:48 +0200)
Add a customizer callback just before initial config setting, so that the
customizer code can initialize the mode validator using the drm
file-descriptor.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
src/gallium/state_trackers/xorg/xorg_driver.c
src/gallium/state_trackers/xorg/xorg_tracker.h
src/gallium/targets/xorg-vmwgfx/vmw_screen.c

index 5056bf417c1be56841f6f177cd788cdda9ac0f10..bae4e7cf254b2f519741b41380a641e8e87d379e 100644 (file)
@@ -480,6 +480,9 @@ drv_pre_init(ScrnInfoPtr pScrn, int flags)
     xorg_crtc_init(pScrn);
     xorg_output_init(pScrn);
 
+    if (cust && cust->winsys_pre_init && !cust->winsys_pre_init(cust, ms->fd))
+       return FALSE;
+
     if (!xf86InitialConfiguration(pScrn, TRUE)) {
        xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes.\n");
        return FALSE;
@@ -739,7 +742,7 @@ drv_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
     ms->debug_fallback = xf86ReturnOptValBool(ms->Options, OPTION_DEBUG_FALLBACK, ms->accelerate_2d);
 
     if (cust && cust->winsys_screen_init)
-       cust->winsys_screen_init(cust, ms->fd);
+       cust->winsys_screen_init(cust);
 
     ms->swapThrottling = cust ?  cust->swap_throttling : TRUE;
     from_st = xf86GetOptValBool(ms->Options, OPTION_THROTTLE_SWAP,
index aab470b46c5e2757d4fb186737694c23d2b76bc1..814a0cd11a91495a394636d089e439bd2e7d8d03 100644 (file)
@@ -76,7 +76,8 @@ typedef struct _CustomizerRec
     Bool dirty_throttling;
     Bool swap_throttling;
     Bool no_3d;
-    Bool (*winsys_screen_init)(struct _CustomizerRec *cust, int fd);
+    Bool (*winsys_pre_init) (struct _CustomizerRec *cust, int fd);
+    Bool (*winsys_screen_init)(struct _CustomizerRec *cust);
     Bool (*winsys_screen_close)(struct _CustomizerRec *cust);
     Bool (*winsys_enter_vt)(struct _CustomizerRec *cust);
     Bool (*winsys_leave_vt)(struct _CustomizerRec *cust);
index 64934d53f6893ef9174d86c6b5824e94cc50ec22..514c3f1208868cf84d33065367c2213b601925c3 100644 (file)
@@ -111,13 +111,22 @@ vmw_context_no_throttle(CustomizerPtr cust,
 }
 
 static Bool
-vmw_screen_init(CustomizerPtr cust, int fd)
+vmw_pre_init(CustomizerPtr cust, int fd)
 {
     struct vmw_customizer *vmw = vmw_customizer(cust);
-    drmVersionPtr ver;
 
     vmw->fd = fd;
-    ver = drmGetVersion(fd);
+
+    return TRUE;
+}
+
+static Bool
+vmw_screen_init(CustomizerPtr cust)
+{
+    struct vmw_customizer *vmw = vmw_customizer(cust);
+    drmVersionPtr ver;
+
+    ver = drmGetVersion(vmw->fd);
     if (ver == NULL ||
        (ver->version_major == 1 && ver->version_minor < 1)) {
        cust->swap_throttling = TRUE;
@@ -199,6 +208,7 @@ vmw_screen_pre_init(ScrnInfoPtr pScrn, int flags)
 
     cust = &vmw->base;
 
+    cust->winsys_pre_init = vmw_pre_init;
     cust->winsys_screen_init = vmw_screen_init;
     cust->winsys_screen_close = vmw_screen_close;
     cust->winsys_enter_vt = vmw_screen_enter_vt;