summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaarten Maathuis <madman2003@gmail.com>2009-01-31 16:30:31 +0100
committerMaarten Maathuis <madman2003@gmail.com>2009-02-06 18:42:38 +0100
commit5e6a06fe691db63ccf2dc7161a1f6c71c09741b7 (patch)
tree5c9d57bbdcbefbd7e456b6871031520770a9cb91
parent5cc67ae94c066dcac78072ad8a819c3b602d8bab (diff)
exa: add GC private
-rw-r--r--exa/exa.c11
-rw-r--r--exa/exa_priv.h12
2 files changed, 22 insertions, 1 deletions
diff --git a/exa/exa.c b/exa/exa.c
index ba063bb04..496b89864 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -41,6 +41,8 @@ static int exaScreenPrivateKeyIndex;
DevPrivateKey exaScreenPrivateKey = &exaScreenPrivateKeyIndex;
static int exaPixmapPrivateKeyIndex;
DevPrivateKey exaPixmapPrivateKey = &exaPixmapPrivateKeyIndex;
+static int exaGCPrivateKeyIndex;
+DevPrivateKey exaGCPrivateKey = &exaGCPrivateKeyIndex;
#ifdef MITSHM
static ShmFuncs exaShmFuncs = { NULL, NULL };
@@ -661,6 +663,8 @@ static GCFuncs exaGCFuncs = {
static int
exaCreateGC (GCPtr pGC)
{
+ ExaGCPriv(pGC);
+
if (!fbCreateGC (pGC))
return FALSE;
@@ -890,6 +894,13 @@ exaDriverInit (ScreenPtr pScreen,
exaDDXDriverInit(pScreen);
+ if (!dixRequestPrivate(exaGCPrivateKey, sizeof(ExaGCPrivRec))) {
+ LogMessage(X_WARNING,
+ "EXA(%d): Failed to allocate GC private\n",
+ pScreen->myNum);
+ return FALSE;
+ }
+
/*
* Replace various fb screen functions
*/
diff --git a/exa/exa_priv.h b/exa/exa_priv.h
index cc789c6c7..3b589488e 100644
--- a/exa/exa_priv.h
+++ b/exa/exa_priv.h
@@ -173,9 +173,13 @@ typedef struct {
extern DevPrivateKey exaScreenPrivateKey;
extern DevPrivateKey exaPixmapPrivateKey;
+extern DevPrivateKey exaGCPrivateKey;
#define ExaGetScreenPriv(s) ((ExaScreenPrivPtr)dixLookupPrivate(&(s)->devPrivates, exaScreenPrivateKey))
#define ExaScreenPriv(s) ExaScreenPrivPtr pExaScr = ExaGetScreenPriv(s)
+#define ExaGetGCPriv(gc) ((ExaGCPrivPtr)dixLookupPrivate(&(gc)->devPrivates, exaGCPrivateKey))
+#define ExaGCPriv(gc) ExaGCPrivPtr pExaGC = ExaGetGCPriv(gc)
+
/** Align an offset to an arbitrary alignment */
#define EXA_ALIGN(offset, align) (((offset) + (align) - 1) - \
(((offset) + (align) - 1) % (align)))
@@ -236,7 +240,13 @@ typedef struct {
*/
void *driverPriv;
} ExaPixmapPrivRec, *ExaPixmapPrivPtr;
-
+
+typedef struct {
+ /* GC values from the layer below. */
+ GCOps *ops;
+ GCFuncs *funcs;
+} ExaGCPrivRec, *ExaGCPrivPtr;
+
typedef struct _ExaMigrationRec {
Bool as_dst;
Bool as_src;