[xorg-x11-drv-qxl] Update to new dixPrivate ABI
Hans de Goede
jwrdegoede at fedoraproject.org
Sat Oct 9 20:45:42 UTC 2010
commit e0426d6eb5d12c4634470d2d5a2de7666074cbb2
Author: Søren Sandmann Pedersen <ssp at redhat.com>
Date: Wed Sep 15 11:20:07 2010 -0400
Update to new dixPrivate ABI
0001-Update-to-the-new-dixPrivate-ABI.patch | 425 +++++++++++++++++++++++++++
xorg-x11-drv-qxl.spec | 6 +
2 files changed, 431 insertions(+), 0 deletions(-)
---
diff --git a/0001-Update-to-the-new-dixPrivate-ABI.patch b/0001-Update-to-the-new-dixPrivate-ABI.patch
new file mode 100644
index 0000000..141e472
--- /dev/null
+++ b/0001-Update-to-the-new-dixPrivate-ABI.patch
@@ -0,0 +1,425 @@
+From a1357ad27c166d7c89472c4f4c9436636ac9af03 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?S=C3=B8ren=20Sandmann?= <ssp at localhost.localdomain>
+Date: Wed, 15 Sep 2010 11:04:24 -0400
+Subject: [PATCH] Update to the new dixPrivate ABI.
+
+---
+ src/qxl.h | 8 --------
+ src/qxl_cursor.c | 4 ++--
+ src/qxl_driver.c | 42 ++++++++++++++++++++++++------------------
+ src/uxa/uxa-accel.c | 14 +++++++-------
+ src/uxa/uxa-glyphs.c | 18 +++++++++---------
+ src/uxa/uxa-priv.h | 5 ++---
+ src/uxa/uxa-render.c | 4 ++--
+ src/uxa/uxa.c | 10 ++++++----
+ 8 files changed, 52 insertions(+), 53 deletions(-)
+
+diff --git a/src/qxl.h b/src/qxl.h
+index 40f70a5..678a0f2 100644
+--- a/src/qxl.h
++++ b/src/qxl.h
+@@ -810,19 +810,11 @@ void qxl_surface_copy (qxl_surface_t *dest,
+ int dest_x1, int dest_y1,
+ int width, int height);
+
+-#if HAS_DEVPRIVATEKEYREC
+ extern DevPrivateKeyRec uxa_pixmap_index;
+-#else
+-extern int uxa_pixmap_index;
+-#endif
+
+ static inline qxl_surface_t *get_surface (PixmapPtr pixmap)
+ {
+-#if HAS_DEVPRIVATEKEYREC
+ return dixGetPrivate(&pixmap->devPrivates, &uxa_pixmap_index);
+-#else
+- return dixLookupPrivate(&pixmap->devPrivates, &uxa_pixmap_index);
+-#endif
+ }
+
+ static inline void set_surface (PixmapPtr pixmap, qxl_surface_t *surface)
+diff --git a/src/qxl_cursor.c b/src/qxl_cursor.c
+index 1e19eba..475796e 100644
+--- a/src/qxl_cursor.c
++++ b/src/qxl_cursor.c
+@@ -176,7 +176,7 @@ qxl_cursor_init(ScreenPtr pScreen)
+ {
+ xf86CursorInfoPtr cursor;
+
+- cursor = xcalloc(1, sizeof(xf86CursorInfoRec));
++ cursor = calloc(1, sizeof(xf86CursorInfoRec));
+ if (!cursor)
+ return;
+
+@@ -192,5 +192,5 @@ qxl_cursor_init(ScreenPtr pScreen)
+ cursor->ShowCursor = qxl_show_cursor;
+
+ if (!xf86InitCursor(pScreen, cursor))
+- xfree(cursor);
++ free(cursor);
+ }
+diff --git a/src/qxl_driver.c b/src/qxl_driver.c
+index bb20522..9c1377d 100644
+--- a/src/qxl_driver.c
++++ b/src/qxl_driver.c
+@@ -284,7 +284,7 @@ qxl_close_screen(int scrnIndex, ScreenPtr pScreen)
+ pScrn->vtSema = FALSE;
+
+ ErrorF ("Freeing %p\n", qxl->fb);
+- xfree(qxl->fb);
++ free(qxl->fb);
+ qxl->fb = NULL;
+
+ pScreen->CreateScreenResources = qxl->create_screen_resources;
+@@ -404,6 +404,8 @@ qxl_switch_mode(int scrnIndex, DisplayModePtr p, int flags)
+
+ qxl_reset (qxl);
+
++ ErrorF ("done reset\n");
++
+ qxl->primary = qxl_surface_create_primary (qxl, m);
+ qxl->current_mode = m;
+ qxl->bytes_per_pixel = (qxl->pScrn->bitsPerPixel + 7) / 8;
+@@ -860,11 +862,7 @@ qxl_create_gc (GCPtr pGC)
+ return TRUE;
+ }
+
+-#if HAS_DEVPRIVATEKEYREC
+ DevPrivateKeyRec uxa_pixmap_index;
+-#else
+-int uxa_pixmap_index;
+-#endif
+
+ static Bool
+ unaccel (void)
+@@ -1008,8 +1006,6 @@ qxl_done_copy (PixmapPtr dest)
+ static void
+ qxl_set_screen_pixmap (PixmapPtr pixmap)
+ {
+- ErrorF ("asdf\n");
+-
+ pixmap->drawable.pScreen->devPrivate = pixmap;
+ }
+
+@@ -1070,14 +1066,14 @@ static Bool
+ setup_uxa (qxl_screen_t *qxl, ScreenPtr screen)
+ {
+ ScrnInfoPtr scrn = xf86Screens[screen->myNum];
+-
+- if (!dixRequestPrivate(&uxa_pixmap_index, 0))
++
++ if (!dixRegisterPrivateKey(&uxa_pixmap_index, PRIVATE_PIXMAP, 0))
+ return FALSE;
+
+ qxl->uxa = uxa_driver_alloc();
+ if (qxl->uxa == NULL)
+ return FALSE;
+-
++
+ memset(qxl->uxa, 0, sizeof(*qxl->uxa));
+
+ qxl->uxa->uxa_major = 1;
+@@ -1124,6 +1120,8 @@ setup_uxa (qxl_screen_t *qxl, ScreenPtr screen)
+ return FALSE;
+ }
+
++
++
+ #if 0
+ uxa_set_fallback_debug(screen, FALSE);
+ #endif
+@@ -1174,12 +1172,14 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+
+ pScrn->displayWidth = pScrn->virtualX;
+
+- qxl->fb = xcalloc (pScrn->virtualY * pScrn->displayWidth, 4);
++ qxl->fb = calloc (pScrn->virtualY * pScrn->displayWidth, 4);
+ if (!qxl->fb)
+ goto out;
+
+ ErrorF ("allocated %d x %d %p\n", pScrn->virtualX, pScrn->virtualY, qxl->fb);
+
++ pScreen->totalPixmapSize = 100;
++
+ if (!fbScreenInit(pScreen, qxl->fb,
+ pScrn->virtualX, pScrn->virtualY,
+ pScrn->xDpi, pScrn->yDpi, pScrn->displayWidth,
+@@ -1208,6 +1208,7 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+
+ /* Set up resources */
+ qxl_reset (qxl);
++ ErrorF ("done reset\n");
+
+ qxl->io_pages = (void *)((unsigned long)qxl->ram);
+ qxl->io_pages_physical = (void *)((unsigned long)qxl->ram_physical);
+@@ -1227,6 +1228,16 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ /* xf86DPMSInit(pScreen, xf86DPMSSet, 0); */
+
+ pScreen->SaveScreen = qxl_blank_screen;
++
++ /* Note: this must be done before setup_uxa(), because it
++ * calls DamageSetup() which registers a pixmap private.
++ *
++ * That will trigger an assert if _dixInitPrivates has
++ * been called, which setup_uxa() eventually does.
++ */
++ miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
++ if (!miCreateDefColormap(pScreen))
++ goto out;
+
+ setup_uxa (qxl, pScreen);
+
+@@ -1236,11 +1247,6 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+ qxl->close_screen = pScreen->CloseScreen;
+ pScreen->CloseScreen = qxl_close_screen;
+
+- miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
+-
+- if (!miCreateDefColormap(pScreen))
+- goto out;
+-
+ qxl_cursor_init (pScreen);
+
+ CHECK_POINT();
+@@ -1535,9 +1541,9 @@ qxl_pre_init(ScrnInfoPtr pScrn, int flags)
+
+ out:
+ if (clockRanges)
+- xfree(clockRanges);
++ free(clockRanges);
+ if (qxl)
+- xfree(qxl);
++ free(qxl);
+
+ return FALSE;
+ }
+diff --git a/src/uxa/uxa-accel.c b/src/uxa/uxa-accel.c
+index 49870ed..62034c2 100644
+--- a/src/uxa/uxa-accel.c
++++ b/src/uxa/uxa-accel.c
+@@ -661,7 +661,7 @@ uxa_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ return;
+ }
+
+- prect = xalloc(sizeof(xRectangle) * npt);
++ prect = malloc(sizeof(xRectangle) * npt);
+ if (!prect)
+ return;
+ for (i = 0; i < npt; i++) {
+@@ -675,7 +675,7 @@ uxa_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ prect[i].height = 1;
+ }
+ pGC->ops->PolyFillRect(pDrawable, pGC, npt, prect);
+- xfree(prect);
++ free(prect);
+ }
+
+ /**
+@@ -698,7 +698,7 @@ uxa_poly_lines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ return;
+ }
+
+- prect = xalloc(sizeof(xRectangle) * (npt - 1));
++ prect = malloc(sizeof(xRectangle) * (npt - 1));
+ if (!prect)
+ return;
+ x1 = ppt[0].x;
+@@ -714,7 +714,7 @@ uxa_poly_lines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ }
+
+ if (x1 != x2 && y1 != y2) {
+- xfree(prect);
++ free(prect);
+ uxa_check_poly_lines(pDrawable, pGC, mode, npt, ppt);
+ return;
+ }
+@@ -738,7 +738,7 @@ uxa_poly_lines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
+ y1 = y2;
+ }
+ pGC->ops->PolyFillRect(pDrawable, pGC, npt - 1, prect);
+- xfree(prect);
++ free(prect);
+ }
+
+ /**
+@@ -767,7 +767,7 @@ uxa_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSeg)
+ }
+ }
+
+- prect = xalloc(sizeof(xRectangle) * nseg);
++ prect = malloc(sizeof(xRectangle) * nseg);
+ if (!prect)
+ return;
+ for (i = 0; i < nseg; i++) {
+@@ -795,7 +795,7 @@ uxa_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment * pSeg)
+ }
+ }
+ pGC->ops->PolyFillRect(pDrawable, pGC, nseg, prect);
+- xfree(prect);
++ free(prect);
+ }
+
+ static Bool uxa_fill_region_solid(DrawablePtr pDrawable, RegionPtr pRegion,
+diff --git a/src/uxa/uxa-glyphs.c b/src/uxa/uxa-glyphs.c
+index a592fda..8bd4fc8 100644
+--- a/src/uxa/uxa-glyphs.c
++++ b/src/uxa/uxa-glyphs.c
+@@ -83,16 +83,16 @@ struct uxa_glyph {
+ uint16_t size, pos;
+ };
+
+-static int uxa_glyph_index;
++static DevPrivateKeyRec uxa_glyph_key;
+
+ static inline struct uxa_glyph *uxa_glyph_get_private(GlyphPtr glyph)
+ {
+- return dixLookupPrivate(&glyph->devPrivates, &uxa_glyph_index);
++ return dixGetPrivate(&glyph->devPrivates, &uxa_glyph_key);
+ }
+
+ static inline void uxa_glyph_set_private(GlyphPtr glyph, struct uxa_glyph *priv)
+ {
+- dixSetPrivate(&glyph->devPrivates, &uxa_glyph_index, priv);
++ dixSetPrivate(&glyph->devPrivates, &uxa_glyph_key, priv);
+ }
+
+ #define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0)
+@@ -109,7 +109,7 @@ static void uxa_unrealize_glyph_caches(ScreenPtr pScreen)
+ FreePicture(cache->picture, 0);
+
+ if (cache->glyphs)
+- xfree(cache->glyphs);
++ free(cache->glyphs);
+ }
+ }
+
+@@ -172,7 +172,7 @@ static Bool uxa_realize_glyph_caches(ScreenPtr pScreen)
+ ValidatePicture(picture);
+
+ cache->picture = picture;
+- cache->glyphs = xcalloc(sizeof(GlyphPtr), GLYPH_CACHE_SIZE);
++ cache->glyphs = calloc(sizeof(GlyphPtr), GLYPH_CACHE_SIZE);
+ if (!cache->glyphs)
+ goto bail;
+
+@@ -190,7 +190,7 @@ bail:
+
+ Bool uxa_glyphs_init(ScreenPtr pScreen)
+ {
+- if (!dixRequestPrivate(&uxa_glyph_index, 0))
++ if (!dixRegisterPrivateKey(&uxa_glyph_key, PRIVATE_GLYPH, 0))
+ return FALSE;
+
+ if (!uxa_realize_glyph_caches(pScreen))
+@@ -286,7 +286,7 @@ uxa_glyph_unrealize(ScreenPtr pScreen,
+ priv->cache->glyphs[priv->pos] = NULL;
+
+ uxa_glyph_set_private(pGlyph, NULL);
+- xfree(priv);
++ free(priv);
+ }
+
+ /* Cut and paste from render/glyph.c - probably should export it instead */
+@@ -588,7 +588,7 @@ uxa_glyph_cache(ScreenPtr screen, GlyphPtr glyph, int *out_x, int *out_y)
+ GlyphPtr evicted = cache->glyphs[pos + s];
+ if (evicted != NULL) {
+ if (priv != NULL)
+- xfree(priv);
++ free(priv);
+
+ priv = uxa_glyph_get_private(evicted);
+ uxa_glyph_set_private(evicted, NULL);
+@@ -602,7 +602,7 @@ uxa_glyph_cache(ScreenPtr screen, GlyphPtr glyph, int *out_x, int *out_y)
+ }
+
+ if (priv == NULL) {
+- priv = xalloc(sizeof(struct uxa_glyph));
++ priv = malloc(sizeof(struct uxa_glyph));
+ if (priv == NULL)
+ return NULL;
+ }
+diff --git a/src/uxa/uxa-priv.h b/src/uxa/uxa-priv.h
+index 3ea6810..21c1623 100644
+--- a/src/uxa/uxa-priv.h
++++ b/src/uxa/uxa-priv.h
+@@ -158,11 +158,10 @@ typedef struct {
+ (PixmapWidthPaddingInfo[d].padRoundUp+1)))
+ #endif
+
+-extern int uxa_screen_index;
++extern DevPrivateKeyRec uxa_screen_index;
+ static inline uxa_screen_t *uxa_get_screen(ScreenPtr screen)
+ {
+- return (uxa_screen_t *) dixLookupPrivate(&screen->devPrivates,
+- &uxa_screen_index);
++ return dixGetPrivate (&screen->devPrivates, &uxa_screen_index);
+ }
+
+ /** Align an offset to an arbitrary alignment */
+diff --git a/src/uxa/uxa-render.c b/src/uxa/uxa-render.c
+index beb7f7c..ac80c45 100644
+--- a/src/uxa/uxa-render.c
++++ b/src/uxa/uxa-render.c
+@@ -911,7 +911,7 @@ _pixman_region_init_rectangles(pixman_region16_t *region,
+ int i;
+
+ if (num_rects > sizeof(stack_boxes) / sizeof(stack_boxes[0])) {
+- boxes = xalloc(sizeof(pixman_box16_t) * num_rects);
++ boxes = malloc(sizeof(pixman_box16_t) * num_rects);
+ if (boxes == NULL)
+ return FALSE;
+ }
+@@ -926,7 +926,7 @@ _pixman_region_init_rectangles(pixman_region16_t *region,
+ ret = pixman_region_init_rects(region, boxes, num_rects);
+
+ if (boxes != stack_boxes)
+- xfree(boxes);
++ free(boxes);
+
+ return ret;
+ }
+diff --git a/src/uxa/uxa.c b/src/uxa/uxa.c
+index bfc700d..da67b8d 100644
+--- a/src/uxa/uxa.c
++++ b/src/uxa/uxa.c
+@@ -39,7 +39,7 @@
+ #include "dixfontstr.h"
+ #include "uxa.h"
+
+-int uxa_screen_index;
++DevPrivateKeyRec uxa_screen_index;
+
+ /**
+ * uxa_get_drawable_pixmap() returns a backing pixmap for a given drawable.
+@@ -431,7 +431,7 @@ static Bool uxa_close_screen(int i, ScreenPtr pScreen)
+ }
+ #endif
+
+- xfree(uxa_screen);
++ free(uxa_screen);
+
+ return (*pScreen->CloseScreen) (i, pScreen);
+ }
+@@ -448,7 +448,7 @@ static Bool uxa_close_screen(int i, ScreenPtr pScreen)
+ */
+ uxa_driver_t *uxa_driver_alloc(void)
+ {
+- return xcalloc(1, sizeof(uxa_driver_t));
++ return calloc(1, sizeof(uxa_driver_t));
+ }
+
+ /**
+@@ -493,7 +493,9 @@ Bool uxa_driver_init(ScreenPtr screen, uxa_driver_t * uxa_driver)
+ "non-NULL\n", screen->myNum);
+ return FALSE;
+ }
+- uxa_screen = xcalloc(sizeof(uxa_screen_t), 1);
++ if (!dixRegisterPrivateKey(&uxa_screen_index, PRIVATE_SCREEN, 0))
++ return FALSE;
++ uxa_screen = calloc(sizeof(uxa_screen_t), 1);
+
+ if (!uxa_screen) {
+ LogMessage(X_WARNING,
+--
+1.7.1.1
+
diff --git a/xorg-x11-drv-qxl.spec b/xorg-x11-drv-qxl.spec
index 68715da..ab0d570 100644
--- a/xorg-x11-drv-qxl.spec
+++ b/xorg-x11-drv-qxl.spec
@@ -19,12 +19,14 @@ BuildRequires: xorg-x11-server-devel >= 1.1.0-1
BuildRequires: glib2-devel
Requires: xorg-x11-server-Xorg >= 1.1.0-1
+Patch0: 0001-Update-to-the-new-dixPrivate-ABI.patch
%description
X.Org X11 qxl video driver.
%prep
%setup -q -n %{tarball}-%{version}
+%patch0 -p1 -b .devprivates
%build
%configure --disable-static
@@ -49,6 +51,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
* Tue Sep 14 2010 Soren Sandmann <ssp at redhat.com> 0.0.20.f14b-1
+- Patch to fix it up for the new privates ABI (I had apparently been
+ testing with a too old X server).
+
+* Tue Sep 14 2010 Soren Sandmann <ssp at redhat.com> 0.0.20.f14b-1
- Add support for new device
* Sat Mar 13 2010 Dave Airlie <airlied at redhat.com> 0.0.12-2
More information about the scm-commits
mailing list