Use screen-specific privates for exa pixmap and gc privates

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Keith Packard 2012-07-03 16:12:59 -07:00
parent 7ca32f1c28
commit 7651176b00
2 changed files with 8 additions and 14 deletions

View File

@ -38,8 +38,6 @@
#include "exa.h" #include "exa.h"
DevPrivateKeyRec exaScreenPrivateKeyRec; DevPrivateKeyRec exaScreenPrivateKeyRec;
DevPrivateKeyRec exaPixmapPrivateKeyRec;
DevPrivateKeyRec exaGCPrivateKeyRec;
#ifdef MITSHM #ifdef MITSHM
static ShmFuncs exaShmFuncs = { NULL, NULL }; static ShmFuncs exaShmFuncs = { NULL, NULL };
@ -915,8 +913,8 @@ exaDriverInit(ScreenPtr pScreen, ExaDriverPtr pScreenInfo)
exaDDXDriverInit(pScreen); exaDDXDriverInit(pScreen);
if (!dixRegisterPrivateKey if (!dixRegisterScreenSpecificPrivateKey
(&exaGCPrivateKeyRec, PRIVATE_GC, sizeof(ExaGCPrivRec))) { (pScreen, &pExaScr->gcPrivateKeyRec, PRIVATE_GC, sizeof(ExaGCPrivRec))) {
LogMessage(X_WARNING, "EXA(%d): Failed to allocate GC private\n", LogMessage(X_WARNING, "EXA(%d): Failed to allocate GC private\n",
pScreen->myNum); pScreen->myNum);
return FALSE; return FALSE;
@ -964,8 +962,8 @@ exaDriverInit(ScreenPtr pScreen, ExaDriverPtr pScreenInfo)
* Hookup offscreen pixmaps * Hookup offscreen pixmaps
*/ */
if (pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) { if (pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) {
if (!dixRegisterPrivateKey if (!dixRegisterScreenSpecificPrivateKey
(&exaPixmapPrivateKeyRec, PRIVATE_PIXMAP, (pScreen, &pExaScr->pixmapPrivateKeyRec, PRIVATE_PIXMAP,
sizeof(ExaPixmapPrivRec))) { sizeof(ExaPixmapPrivRec))) {
LogMessage(X_WARNING, LogMessage(X_WARNING,
"EXA(%d): Failed to allocate pixmap private\n", "EXA(%d): Failed to allocate pixmap private\n",

View File

@ -208,6 +208,8 @@ typedef struct {
RegionRec maskReg; RegionRec maskReg;
PixmapPtr srcPix; PixmapPtr srcPix;
DevPrivateKeyRec pixmapPrivateKeyRec;
DevPrivateKeyRec gcPrivateKeyRec;
} ExaScreenPrivRec, *ExaScreenPrivPtr; } ExaScreenPrivRec, *ExaScreenPrivPtr;
/* /*
@ -225,17 +227,11 @@ typedef struct {
extern DevPrivateKeyRec exaScreenPrivateKeyRec; extern DevPrivateKeyRec exaScreenPrivateKeyRec;
#define exaScreenPrivateKey (&exaScreenPrivateKeyRec) #define exaScreenPrivateKey (&exaScreenPrivateKeyRec)
extern DevPrivateKeyRec exaPixmapPrivateKeyRec;
#define exaPixmapPrivateKey (&exaPixmapPrivateKeyRec)
extern DevPrivateKeyRec exaGCPrivateKeyRec;
#define exaGCPrivateKey (&exaGCPrivateKeyRec)
#define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)dixGetPrivate(&(s)->devPrivates, exaScreenPrivateKey)) #define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)dixGetPrivate(&(s)->devPrivates, exaScreenPrivateKey))
#define ExaScreenPriv(s) ExaScreenPrivPtr pExaScr = ExaGetScreenPriv(s) #define ExaScreenPriv(s) ExaScreenPrivPtr pExaScr = ExaGetScreenPriv(s)
#define ExaGetGCPriv(gc) ((ExaGCPrivPtr)dixGetPrivateAddr(&(gc)->devPrivates, exaGCPrivateKey)) #define ExaGetGCPriv(gc) ((ExaGCPrivPtr)dixGetPrivateAddr(&(gc)->devPrivates, &ExaGetScreenPriv(gc->pScreen)->gcPrivateKeyRec))
#define ExaGCPriv(gc) ExaGCPrivPtr pExaGC = ExaGetGCPriv(gc) #define ExaGCPriv(gc) ExaGCPrivPtr pExaGC = ExaGetGCPriv(gc)
/* /*
@ -286,7 +282,7 @@ extern DevPrivateKeyRec exaGCPrivateKeyRec;
#define EXA_PIXMAP_SCORE_PINNED 1000 #define EXA_PIXMAP_SCORE_PINNED 1000
#define EXA_PIXMAP_SCORE_INIT 1001 #define EXA_PIXMAP_SCORE_INIT 1001
#define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)dixGetPrivateAddr(&(p)->devPrivates, exaPixmapPrivateKey)) #define ExaGetPixmapPriv(p) ((ExaPixmapPrivPtr)dixGetPrivateAddr(&(p)->devPrivates, &ExaGetScreenPriv((p)->drawable.pScreen)->pixmapPrivateKeyRec))
#define ExaPixmapPriv(p) ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv(p) #define ExaPixmapPriv(p) ExaPixmapPrivPtr pExaPixmap = ExaGetPixmapPriv(p)
#define EXA_RANGE_PITCH (1 << 0) #define EXA_RANGE_PITCH (1 << 0)