[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-nouveau: Changes to 'upstream-unstable'



 src/Makefile.am       |    1 +
 src/compat-api.h      |   41 +++++++++++++++++++++++++++++++++++++++++
 src/drmmode_display.c |   16 ++++++++--------
 src/nouveau_dri2.c    |   20 ++++++++++----------
 src/nouveau_exa.c     |   14 +++++++-------
 src/nouveau_xv.c      |   16 ++++++++--------
 src/nv04_exa.c        |   14 +++++++-------
 src/nv10_exa.c        |    8 ++++----
 src/nv30_exa.c        |    6 +++---
 src/nv40_exa.c        |    6 +++---
 src/nv50_accel.c      |    2 +-
 src/nv50_exa.c        |    2 +-
 src/nv_accel_common.c |    2 +-
 src/nv_dma.c          |    6 ++++++
 src/nv_driver.c       |    4 ++--
 src/nv_include.h      |    2 ++
 src/nvc0_exa.c        |    2 +-
 src/vl_hwmc.c         |    6 ++++--
 18 files changed, 110 insertions(+), 58 deletions(-)

New commits:
commit ace77b6b1304826f4004bde23809b55d476b0615
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Tue May 29 21:21:57 2012 +1000

    disable fermi accel on 0.0.16 interface
    
    Kepler accel support broke some assumption made by the older kernel
    interface, and Fermi shares the same code.  It can't work (without
    some annoying hacks anyway) with the 0.0.16 kernel anymore.

diff --git a/src/nv_dma.c b/src/nv_dma.c
index 3b75ca9..1757f4d 100644
--- a/src/nv_dma.c
+++ b/src/nv_dma.c
@@ -36,6 +36,12 @@ NVInitDma(ScrnInfoPtr pScrn)
 	int size, ret;
 	void *data;
 
+	if (pNv->dev->drm_version < 0x01000000 && pNv->dev->chipset >= 0xc0) {
+		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+			   "Fermi acceleration not supported on old kernel\n");
+		return FALSE;
+	}
+
 	if (pNv->Architecture < NV_ARCH_C0) {
 		data = &nv04_data;
 		size = sizeof(nv04_data);

commit 7041e30ab8beb627bbf569367961a658e79c2bdc
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed May 23 14:18:24 2012 +0100

    vl_hwmc: add missing compat include.
    
    Reported-by: tallica on irc.
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/vl_hwmc.c b/src/vl_hwmc.c
index 32eb258..ecad0b4 100644
--- a/src/vl_hwmc.c
+++ b/src/vl_hwmc.c
@@ -9,6 +9,8 @@
 #include <xf86.h>
 #include <fourcc.h>
 
+#include "compat-api.h"
+
 #define FOURCC_RGB	0x0000003
 #define XVIMAGE_RGB								\
 {										\

commit 2abf8467cfb7a7648ce73ba5bcbbc62219d65d6d
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed May 23 11:29:05 2012 +0100

    nouveau: add compat-api.h to makefile.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/Makefile.am b/src/Makefile.am
index 0bdd780..6aeb486 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -60,6 +60,7 @@ nouveau_drv_la_SOURCES = \
 			 nvc0_exa.c \
 			 nvc0_xv.c \
 			 drmmode_display.c \
+			 compat-api.h \
 			 vl_hwmc.c \
 			 vl_hwmc.h
 

commit 1d861ad716861c57b2b81531d21840d7c8de024b
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed May 23 11:15:06 2012 +0100

    nouveau: convert two more xf86Screens access to macros
    
    for some reason the script missed these two, just fix them manually.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/nv50_exa.c b/src/nv50_exa.c
index cd99e10..1212eb6 100644
--- a/src/nv50_exa.c
+++ b/src/nv50_exa.c
@@ -27,7 +27,7 @@
 #include "nv50_accel.h"
 
 #define NV50EXA_LOCALS(p)                                                      \
-	ScrnInfoPtr pScrn = xf86Screens[(p)->drawable.pScreen->myNum];         \
+	ScrnInfoPtr pScrn = xf86ScreenToScrn((p)->drawable.pScreen);         \
 	NVPtr pNv = NVPTR(pScrn);                                              \
 	struct nouveau_pushbuf *push = pNv->pushbuf; (void)push;
 
diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c
index c68b3fb..9d23a91 100644
--- a/src/nvc0_exa.c
+++ b/src/nvc0_exa.c
@@ -28,7 +28,7 @@
 #define NOUVEAU_BO(a, b, c) (NOUVEAU_BO_##a | NOUVEAU_BO_##b | NOUVEAU_BO_##c)
 
 #define NVC0EXA_LOCALS(p)                                                      \
-	ScrnInfoPtr pScrn = xf86Screens[(p)->drawable.pScreen->myNum];         \
+	ScrnInfoPtr pScrn = xf86ScreenToScrn((p)->drawable.pScreen);         \
 	NVPtr pNv = NVPTR(pScrn);                                              \
 	struct nouveau_pushbuf *push = pNv->pushbuf; (void)push;
 

commit 5625fb84efc699e65da0062ae101915a49f2969b
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed May 23 11:13:30 2012 +0100

    nouveau: convert scrn/screen to using new interfaces
    
    This commit was generated with the util/modular/x-driver-screen-scrn-conv.sh
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 23e8232..7211427 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -117,7 +117,7 @@ static PixmapPtr
 drmmode_pixmap_wrap(ScreenPtr pScreen, int width, int height, int depth,
 		    int bpp, int pitch, struct nouveau_bo *bo, void *data)
 {
-	NVPtr pNv = NVPTR(xf86Screens[pScreen->myNum]);
+	NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen));
 	PixmapPtr ppix;
 
 	if (!pNv->NoAccel)
@@ -201,7 +201,7 @@ drmmode_crtc_dpms(xf86CrtcPtr drmmode_crtc, int mode)
 void
 drmmode_fbcon_copy(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 #if XORG_VERSION_CURRENT >= 10999001
 	ExaDriverPtr exa = pNv->EXADriverPtr;
@@ -1076,7 +1076,7 @@ static Bool
 drmmode_xf86crtc_resize(ScrnInfoPtr scrn, int width, int height)
 {
 	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
-	ScreenPtr screen = screenInfo.screens[scrn->scrnIndex];
+	ScreenPtr screen = xf86ScrnToScreen(scrn);
 	NVPtr pNv = NVPTR(scrn);
 	drmmode_crtc_private_ptr
 		    drmmode_crtc = xf86_config->crtc[0]->driver_private;
@@ -1241,7 +1241,7 @@ drmmode_remove_fb(ScrnInfoPtr pScrn)
 int
 drmmode_cursor_init(ScreenPtr pScreen)
 {
-	NVPtr pNv = NVPTR(xf86Screens[pScreen->myNum]);
+	NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen));
 	int size = nv_cursor_width(pNv);
 	int flags = HARDWARE_CURSOR_TRUECOLOR_AT_8BPP |
 		    HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_32 |
@@ -1255,7 +1255,7 @@ Bool
 drmmode_page_flip(DrawablePtr draw, PixmapPtr back, void *priv,
 		  unsigned int ref_crtc_hw_id)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
 	drmmode_crtc_private_ptr crtc = config->crtc[0]->driver_private;
 	drmmode_ptr mode = crtc->drmmode;
@@ -1346,7 +1346,7 @@ drmmode_handle_uevents(ScrnInfoPtr scrn)
 	if (!dev)
 		return;
 
-	RRGetInfo(screenInfo.screens[scrn->scrnIndex], TRUE);
+	RRGetInfo(xf86ScrnToScreen(scrn), TRUE);
 	udev_device_unref(dev);
 }
 #endif
@@ -1455,7 +1455,7 @@ drmmode_wakeup_handler(pointer data, int err, pointer p)
 void
 drmmode_screen_init(ScreenPtr pScreen)
 {
-	ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
 	drmmode_ptr drmmode = drmmode_from_scrn(scrn);
 
 	drmmode_uevent_init(scrn);
@@ -1477,7 +1477,7 @@ drmmode_screen_init(ScreenPtr pScreen)
 void
 drmmode_screen_fini(ScreenPtr pScreen)
 {
-	ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
 
 	drmmode_uevent_fini(scrn);
 }
diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c
index 7e47575..27627e6 100644
--- a/src/nouveau_dri2.c
+++ b/src/nouveau_dri2.c
@@ -26,7 +26,7 @@ nouveau_dri2_create_buffer(DrawablePtr pDraw, unsigned int attachment,
 			   unsigned int format)
 {
 	ScreenPtr pScreen = pDraw->pScreen;
-	NVPtr pNv = NVPTR(xf86Screens[pScreen->myNum]);
+	NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen));
 	struct nouveau_dri2_buffer *nvbuf;
 	struct nouveau_pixmap *nvpix;
 	PixmapPtr ppix;
@@ -180,7 +180,7 @@ update_front(DrawablePtr draw, DRI2BufferPtr front)
 static Bool
 can_exchange(DrawablePtr draw, PixmapPtr dst_pix, PixmapPtr src_pix)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 	NVPtr pNv = NVPTR(scrn);
 	int i;
@@ -202,7 +202,7 @@ can_exchange(DrawablePtr draw, PixmapPtr dst_pix, PixmapPtr src_pix)
 static Bool
 can_sync_to_vblank(DrawablePtr draw)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	NVPtr pNv = NVPTR(scrn);
 
 	return pNv->glx_vblank &&
@@ -214,7 +214,7 @@ static int
 nouveau_wait_vblank(DrawablePtr draw, int type, CARD64 msc,
 		    CARD64 *pmsc, CARD64 *pust, void *data)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	NVPtr pNv = NVPTR(scrn);
 	int crtcs = nv_window_belongs_to_crtc(scrn, draw->x, draw->y,
 					      draw->width, draw->height);
@@ -244,7 +244,7 @@ nouveau_wait_vblank(DrawablePtr draw, int type, CARD64 msc,
 static Bool
 nouveau_dri2_swap_limit_validate(DrawablePtr draw, int swap_limit)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	NVPtr pNv = NVPTR(scrn);
 
 	if ((swap_limit < 1 ) || (swap_limit > pNv->max_swap_limit))
@@ -260,7 +260,7 @@ nouveau_dri2_swap_limit_validate(DrawablePtr draw, int swap_limit)
  */
 static Bool violate_oml(DrawablePtr draw)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	NVPtr pNv = NVPTR(scrn);
 
 	return (DRI2INFOREC_VERSION < 6) && (pNv->swap_limit > 1);
@@ -271,7 +271,7 @@ nouveau_dri2_finish_swap(DrawablePtr draw, unsigned int frame,
 			 unsigned int tv_sec, unsigned int tv_usec,
 			 struct nouveau_dri2_vblank_state *s)
 {
-	ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 	NVPtr pNv = NVPTR(scrn);
 	PixmapPtr dst_pix;
 	PixmapPtr src_pix = nouveau_dri2_buffer(s->src)->ppix;
@@ -579,7 +579,7 @@ nouveau_dri2_vblank_handler(int fd, unsigned int frame,
 		nouveau_dri2_finish_swap(draw, frame, tv_sec, tv_usec, s);
 #if DRI2INFOREC_VERSION >= 6
 		/* Restore real swap limit on drawable, now that it is safe. */
-		ScrnInfoPtr scrn = xf86Screens[draw->pScreen->myNum];
+		ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
 		DRI2SwapLimit(draw, NVPTR(scrn)->swap_limit);
 #endif
 
@@ -617,7 +617,7 @@ nouveau_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,
 	}
 
 	screen = draw->pScreen;
-	scrn = xf86Screens[screen->myNum];
+	scrn = xf86ScreenToScrn(screen);
 
 	pixmap = screen->GetScreenPixmap(screen);
 	xf86DrvMsgVerb(scrn->scrnIndex, X_INFO, 4,
@@ -663,7 +663,7 @@ nouveau_dri2_flip_event_handler(unsigned int frame, unsigned int tv_sec,
 Bool
 nouveau_dri2_init(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	DRI2InfoRec dri2 = { 0 };
 	const char *drivernames[2][2] = {
diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c
index 9aaa3f2..7b3b086 100644
--- a/src/nouveau_exa.c
+++ b/src/nouveau_exa.c
@@ -83,7 +83,7 @@ static Bool
 nouveau_exa_prepare_access(PixmapPtr ppix, int index)
 {
 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
-	NVPtr pNv = NVPTR(xf86Screens[ppix->drawable.pScreen->myNum]);
+	NVPtr pNv = NVPTR(xf86ScreenToScrn(ppix->drawable.pScreen));
 
 	if (nv50_style_tiled_pixmap(ppix) && !pNv->wfb_enabled)
 		return FALSE;
@@ -108,7 +108,7 @@ static void *
 nouveau_exa_create_pixmap(ScreenPtr pScreen, int width, int height, int depth,
 			  int usage_hint, int bitsPerPixel, int *new_pitch)
 {
-	ScrnInfoPtr scrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(scrn);
 	struct nouveau_pixmap *nvpix;
 	int ret;
@@ -148,7 +148,7 @@ nouveau_exa_destroy_pixmap(ScreenPtr pScreen, void *priv)
 bool
 nv50_style_tiled_pixmap(PixmapPtr ppix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 
 	return pNv->Architecture >= NV_ARCH_50 &&
@@ -159,7 +159,7 @@ static Bool
 nouveau_exa_download_from_screen(PixmapPtr pspix, int x, int y, int w, int h,
 				 char *dst, int dst_pitch)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pspix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pspix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_bo *bo;
 	int src_pitch, tmp_pitch, cpp, offset;
@@ -219,7 +219,7 @@ static Bool
 nouveau_exa_upload_to_screen(PixmapPtr pdpix, int x, int y, int w, int h,
 			     char *src, int src_pitch)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdpix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdpix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	int dst_pitch, tmp_pitch, cpp;
 	int max_lines, lines, i;
@@ -306,7 +306,7 @@ memcpy:
 Bool
 nouveau_exa_pixmap_is_onscreen(PixmapPtr ppix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen);
 
 	if (pScrn->pScreen->GetScreenPixmap(pScrn->pScreen) == ppix)
 		return TRUE;
@@ -317,7 +317,7 @@ nouveau_exa_pixmap_is_onscreen(PixmapPtr ppix)
 Bool
 nouveau_exa_init(ScreenPtr pScreen) 
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	ExaDriverPtr exa;
 
diff --git a/src/nouveau_xv.c b/src/nouveau_xv.c
index aea6c39..11248e6 100644
--- a/src/nouveau_xv.c
+++ b/src/nouveau_xv.c
@@ -1540,7 +1540,7 @@ NVDisplaySurface(XF86SurfacePtr surface,
 static XF86VideoAdaptorPtr
 NVSetupBlitVideo (ScreenPtr pScreen)
 {
-	ScrnInfoPtr         pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr         pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr               pNv       = NVPTR(pScrn);
 	XF86VideoAdaptorPtr adapt;
 	NVPortPrivPtr       pPriv;
@@ -1609,7 +1609,7 @@ NVSetupBlitVideo (ScreenPtr pScreen)
 static XF86VideoAdaptorPtr
 NVSetupOverlayVideoAdapter(ScreenPtr pScreen)
 {
-	ScrnInfoPtr         pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr         pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr               pNv       = NVPTR(pScrn);
 	XF86VideoAdaptorPtr adapt;
 	NVPortPrivPtr       pPriv;
@@ -1759,7 +1759,7 @@ NVChipsetHasOverlay(NVPtr pNv)
 static XF86VideoAdaptorPtr
 NVSetupOverlayVideo(ScreenPtr pScreen)
 {
-	ScrnInfoPtr          pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr          pScrn = xf86ScreenToScrn(pScreen);
 	XF86VideoAdaptorPtr  overlayAdaptor = NULL;
 	NVPtr                pNv   = NVPTR(pScrn);
 
@@ -1804,7 +1804,7 @@ static XF86ImageRec NV30TexturedImages[NUM_FORMAT_TEXTURED] =
 static XF86VideoAdaptorPtr
 NV30SetupTexturedVideo (ScreenPtr pScreen, Bool bicubic)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	XF86VideoAdaptorPtr adapt;
 	NVPortPrivPtr pPriv;
@@ -1885,7 +1885,7 @@ static XF86ImageRec NV40TexturedImages[NUM_FORMAT_TEXTURED] =
 static XF86VideoAdaptorPtr
 NV40SetupTexturedVideo (ScreenPtr pScreen, Bool bicubic)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	XF86VideoAdaptorPtr adapt;
 	NVPortPrivPtr pPriv;
@@ -1957,7 +1957,7 @@ NV50TexturedImages[] =
 static XF86VideoAdaptorPtr
 NV50SetupTexturedVideo (ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	XF86VideoAdaptorPtr adapt;
 	NVPortPrivPtr pPriv;
@@ -2015,7 +2015,7 @@ NV50SetupTexturedVideo (ScreenPtr pScreen)
 void
 NVSetupTexturedVideo (ScreenPtr pScreen, XF86VideoAdaptorPtr *textureAdaptor)
 {
-	ScrnInfoPtr          pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr          pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr                pNv = NVPTR(pScrn);
 
 	if (!pNv->Nv3D)
@@ -2046,7 +2046,7 @@ NVSetupTexturedVideo (ScreenPtr pScreen, XF86VideoAdaptorPtr *textureAdaptor)
 void
 NVInitVideo(ScreenPtr pScreen)
 {
-	ScrnInfoPtr          pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr          pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr                pNv = NVPTR(pScrn);
 	XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
 	XF86VideoAdaptorPtr  overlayAdaptor = NULL;
diff --git a/src/nv04_exa.c b/src/nv04_exa.c
index 77bb3b7..7ede9d9 100644
--- a/src/nv04_exa.c
+++ b/src/nv04_exa.c
@@ -45,7 +45,7 @@ NV04EXASetPattern(NVPtr pNv, CARD32 clr0, CARD32 clr1, CARD32 pat0, CARD32 pat1)
 static Bool
 NV04EXASetROP(PixmapPtr ppix, int subc, int mthd, int alu, Pixel planemask)
 {
-	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 
@@ -86,7 +86,7 @@ NV04EXASetROP(PixmapPtr ppix, int subc, int mthd, int alu, Pixel planemask)
 Bool
 NV04EXAPrepareSolid(PixmapPtr ppix, int alu, Pixel planemask, Pixel fg)
 {
-	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	struct nouveau_bo *bo = nouveau_pixmap_bo(ppix);
@@ -140,7 +140,7 @@ NV04EXAPrepareSolid(PixmapPtr ppix, int alu, Pixel planemask, Pixel fg)
 void
 NV04EXASolid (PixmapPtr pPixmap, int x, int y, int x2, int y2)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	int w = x2 - x;
@@ -161,7 +161,7 @@ NV04EXASolid (PixmapPtr pPixmap, int x, int y, int x2, int y2)
 void
 NV04EXADoneSolid (PixmapPtr pPixmap)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pPixmap->drawable.pScreen);
 	nouveau_pushbuf_bufctx(NVPTR(pScrn)->pushbuf, NULL);
 }
 
@@ -169,7 +169,7 @@ Bool
 NV04EXAPrepareCopy(PixmapPtr pspix, PixmapPtr pdpix, int dx, int dy,
 		   int alu, Pixel planemask)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pspix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pspix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	struct nouveau_bo *src_bo = nouveau_pixmap_bo(pspix);
@@ -214,7 +214,7 @@ void
 NV04EXACopy(PixmapPtr pdpix, int srcX, int srcY, int dstX, int dstY,
 	    int width, int height)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdpix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdpix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	int split_dstY = NOUVEAU_ALIGN(dstY + 1, 64);
@@ -270,7 +270,7 @@ NV04EXACopy(PixmapPtr pdpix, int srcX, int srcY, int dstX, int dstY,
 void
 NV04EXADoneCopy(PixmapPtr pdpix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdpix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdpix->drawable.pScreen);
 	nouveau_pushbuf_bufctx(NVPTR(pScrn)->pushbuf, NULL);
 }
 
diff --git a/src/nv10_exa.c b/src/nv10_exa.c
index 2da8cf6..a3f7df3 100644
--- a/src/nv10_exa.c
+++ b/src/nv10_exa.c
@@ -337,7 +337,7 @@ print_fallback_info(char *reason, int op, PicturePtr src, PicturePtr mask,
 Bool
 NV10EXACheckComposite(int op, PicturePtr src, PicturePtr mask, PicturePtr dst)
 {
-	ScrnInfoPtr pScrn = xf86Screens[dst->pDrawable->pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(dst->pDrawable->pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 
 	if (!check_pict_op(op)) {
@@ -545,7 +545,7 @@ NV10EXAPrepareComposite(int op,
 			PixmapPtr mask,
 			PixmapPtr dst)
 {
-	ScrnInfoPtr pScrn = xf86Screens[dst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(dst->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	uint32_t sc, sa, mc, ma;
@@ -607,7 +607,7 @@ void
 NV10EXAComposite(PixmapPtr pix_dst,
 		 int sx, int sy, int mx, int my, int dx, int dy, int w, int h)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pix_dst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pix_dst->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 
@@ -627,7 +627,7 @@ NV10EXAComposite(PixmapPtr pix_dst,
 void
 NV10EXADoneComposite(PixmapPtr dst)
 {
-	ScrnInfoPtr pScrn = xf86Screens[dst->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(dst->drawable.pScreen);
 	nouveau_pushbuf_bufctx(NVPTR(pScrn)->pushbuf, NULL);
 }
 
diff --git a/src/nv30_exa.c b/src/nv30_exa.c
index 57979c2..9be52e5 100644
--- a/src/nv30_exa.c
+++ b/src/nv30_exa.c
@@ -470,7 +470,7 @@ NV30EXAPrepareComposite(int op, PicturePtr psPict,
 		PixmapPtr  pmPix,
 		PixmapPtr  pdPix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdPix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdPix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	nv_pict_op_t *blend = NV30_GetPictOpRec(op);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
@@ -555,7 +555,7 @@ void
 NV30EXAComposite(PixmapPtr pdPix,
 		 int sx, int sy, int mx, int my, int dx, int dy, int w, int h)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdPix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdPix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 
@@ -582,7 +582,7 @@ NV30EXAComposite(PixmapPtr pdPix,
 void
 NV30EXADoneComposite(PixmapPtr pdPix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdPix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdPix->drawable.pScreen);
 	nouveau_pushbuf_bufctx(NVPTR(pScrn)->pushbuf, NULL);
 }
 
diff --git a/src/nv40_exa.c b/src/nv40_exa.c
index 2361552..ce0d78a 100644
--- a/src/nv40_exa.c
+++ b/src/nv40_exa.c
@@ -456,7 +456,7 @@ NV40EXAPrepareComposite(int op, PicturePtr psPict,
 				PixmapPtr  pmPix,
 				PixmapPtr  pdPix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdPix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdPix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	nv_pict_op_t *blend = NV40_GetPictOpRec(op);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
@@ -537,7 +537,7 @@ void
 NV40EXAComposite(PixmapPtr pdPix,
 		 int sx, int sy, int mx, int my, int dx, int dy, int w, int h)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdPix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdPix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 
@@ -564,7 +564,7 @@ NV40EXAComposite(PixmapPtr pdPix,
 void
 NV40EXADoneComposite(PixmapPtr pdPix)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pdPix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pdPix->drawable.pScreen);
 	nouveau_pushbuf_bufctx(NVPTR(pScrn)->pushbuf, NULL);
 }
 
diff --git a/src/nv50_accel.c b/src/nv50_accel.c
index 42b27f0..16ff643 100644
--- a/src/nv50_accel.c
+++ b/src/nv50_accel.c
@@ -30,7 +30,7 @@
 void
 NV50SyncToVBlank(PixmapPtr ppix, BoxPtr box)
 {
-	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	int crtcs;
diff --git a/src/nv_accel_common.c b/src/nv_accel_common.c
index 4516e97..7d56093 100644
--- a/src/nv_accel_common.c
+++ b/src/nv_accel_common.c
@@ -123,7 +123,7 @@ nouveau_allocate_surface(ScrnInfoPtr scrn, int width, int height, int bpp,
 void
 NV11SyncToVBlank(PixmapPtr ppix, BoxPtr box)
 {
-	ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	struct nouveau_pushbuf *push = pNv->pushbuf;
 	int crtcs;
diff --git a/src/nv_driver.c b/src/nv_driver.c
index 9f6d75f..98486f8 100644
--- a/src/nv_driver.c
+++ b/src/nv_driver.c
@@ -404,7 +404,7 @@ NVBlockHandler (
 static Bool
 NVCreateScreenResources(ScreenPtr pScreen)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	PixmapPtr ppix;
 
@@ -1061,7 +1061,7 @@ NVLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
 static Bool
 NVScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
 {
-	ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+	ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
 	NVPtr pNv = NVPTR(pScrn);
 	int ret;
 	VisualPtr visual;
diff --git a/src/vl_hwmc.c b/src/vl_hwmc.c
index 6e9e0c7..32eb258 100644
--- a/src/vl_hwmc.c
+++ b/src/vl_hwmc.c
@@ -114,7 +114,7 @@ XF86MCAdaptorPtr vlCreateAdaptorXvMC(ScreenPtr pScreen, char *xv_adaptor_name)
 	assert(pScreen);
 	assert(xv_adaptor_name);
 	
-	pScrn = xf86Screens[pScreen->myNum];
+	pScrn = xf86ScreenToScrn(pScreen);
 	adaptor = xf86XvMCCreateAdaptorRec();
 	
 	if (!adaptor)
@@ -150,7 +150,7 @@ void vlInitXvMC(ScreenPtr pScreen, unsigned int num_adaptors, XF86MCAdaptorPtr *
 	for (i = 0; i < num_adaptors; ++i)
 		assert(adaptors[i]);
 	
-	pScrn = xf86Screens[pScreen->myNum];
+	pScrn = xf86ScreenToScrn(pScreen);
 	
 	if (!xf86XvMCScreenInit(pScreen, num_adaptors, adaptors))
 		xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] Failed to initialize extension.\n");

commit 9f037f7be516ebf8fa4a67a5c9ff258594ab353e
Author: Dave Airlie <airlied@redhat.com>
Date:   Wed May 23 11:12:59 2012 +0100

    nouveau: add initial compat-api header
    
    This just provides the scrn conversion and picture stuff so far.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>

diff --git a/src/compat-api.h b/src/compat-api.h
new file mode 100644
index 0000000..1bb7724
--- /dev/null
+++ b/src/compat-api.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Dave Airlie <airlied@redhat.com>
+ */
+
+/* this file provides API compat between server post 1.13 and pre it,
+   it should be reused inside as many drivers as possible */
+#ifndef COMPAT_API_H
+#define COMPAT_API_H
+
+#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
+#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum]
+#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p
+#endif
+
+#ifndef XF86_HAS_SCRN_CONV
+#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum]
+#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
+#endif
+
+#endif
diff --git a/src/nv_include.h b/src/nv_include.h
index 0d104a3..8d628c0 100644
--- a/src/nv_include.h
+++ b/src/nv_include.h
@@ -63,6 +63,8 @@
 
 #define NV_DMA_DEBUG 0
 
+#include "compat-api.h"
+
 #include "nouveau_local.h"
 
 #include "nv_type.h"


Reply to: