diff options
-rw-r--r-- | GL/glx/glxdri.c | 36 | ||||
-rw-r--r-- | GL/glx/glxext.c | 90 | ||||
-rw-r--r-- | GL/glx/glxext.h | 5 | ||||
-rw-r--r-- | GL/glx/glxserver.h | 8 | ||||
-rw-r--r-- | GL/glx/glxutil.h | 19 | ||||
-rw-r--r-- | GL/glx/indirect_table.c | 249 | ||||
-rw-r--r-- | Xext/fontcache.c | 4 | ||||
-rw-r--r-- | fb/fbimage.c | 2 | ||||
-rw-r--r-- | hw/dmx/Makefile.am | 1 | ||||
-rw-r--r-- | hw/dmx/dmx.h | 4 | ||||
-rw-r--r-- | hw/xfree86/common/xf86.h | 6 | ||||
-rw-r--r-- | hw/xfree86/os-support/bus/linuxPci.c | 6 | ||||
-rw-r--r-- | hw/xfree86/parser/Makefile.am | 6 | ||||
-rw-r--r-- | hw/xfree86/parser/Monitor.c | 2 | ||||
-rw-r--r-- | hw/xnest/Makefile.am | 2 | ||||
-rw-r--r-- | hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am | 3 | ||||
-rw-r--r-- | hw/xprint/config/C/print/models/PSspooldir/Makefile.am | 3 | ||||
-rw-r--r-- | hw/xprint/config/Makefile.am | 2 | ||||
-rw-r--r-- | hw/xprint/doc/Xprt.html | 6 | ||||
-rw-r--r-- | hw/xprint/doc/Xprt.man.pre | 6 | ||||
-rw-r--r-- | hw/xprint/doc/Xprt.sgml | 6 | ||||
-rw-r--r-- | hw/xprint/etc/Xsession.d/cde_xsessiond_xprint.sh | 4 | ||||
-rw-r--r-- | mi/mieq.c | 4 | ||||
-rw-r--r-- | render/picture.c | 21 |
24 files changed, 297 insertions, 198 deletions
diff --git a/GL/glx/glxdri.c b/GL/glx/glxdri.c index 41e49e225..b5723049d 100644 --- a/GL/glx/glxdri.c +++ b/GL/glx/glxdri.c @@ -73,6 +73,9 @@ struct __GLXDRIscreen { __DRIscreen driScreen; void *driver; + xf86EnterVTProc *enterVT; + xf86LeaveVTProc *leaveVT; + unsigned char glx_enable_bits[__GLX_EXT_BYTES]; }; @@ -622,8 +625,7 @@ static __DRIfuncPtr getProcAddress(const char *proc_name) static __DRIscreen *findScreen(__DRInativeDisplay *dpy, int scrn) { - __GLXDRIscreen *screen = - (__GLXDRIscreen *) __glXgetActiveScreen(scrn); + __GLXDRIscreen *screen = (__GLXDRIscreen *) __glXgetActiveScreen(scrn); return &screen->driScreen; } @@ -817,6 +819,30 @@ static const __DRIinterfaceMethods interface_methods = { static const char dri_driver_path[] = DRI_DRIVER_PATH; +static Bool +glxDRIEnterVT (int index, int flags) +{ + __GLXDRIscreen *screen = (__GLXDRIscreen *) __glXgetActiveScreen(index); + + LogMessage(X_INFO, "AIGLX: Resuming AIGLX clients after VT switch\n"); + + glxResumeClients(); + + return (*screen->enterVT) (index, flags); +} + +static void +glxDRILeaveVT (int index, int flags) +{ + __GLXDRIscreen *screen = (__GLXDRIscreen *) __glXgetActiveScreen(index); + + LogMessage(X_INFO, "AIGLX: Suspending AIGLX clients for VT switch\n"); + + glxSuspendClients(); + + return (*screen->leaveVT) (index, flags); +} + static __GLXscreen * __glXDRIscreenProbe(ScreenPtr pScreen) { @@ -842,6 +868,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen) char filename[128]; Bool isCapable; size_t buffer_size; + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; if (!xf86LoaderCheckSymbol("DRIQueryDirectRenderingCapable")) { LogMessage(X_ERROR, "AIGLX: DRI module not loaded\n"); @@ -1029,6 +1056,11 @@ __glXDRIscreenProbe(ScreenPtr pScreen) __glXsetEnterLeaveServerFuncs(__glXDRIenterServer, __glXDRIleaveServer); + screen->enterVT = pScrn->EnterVT; + pScrn->EnterVT = glxDRIEnterVT; + screen->leaveVT = pScrn->LeaveVT; + pScrn->LeaveVT = glxDRILeaveVT; + LogMessage(X_INFO, "AIGLX: Loaded and initialized %s\n", filename); diff --git a/GL/glx/glxext.c b/GL/glx/glxext.c index fdb8ea262..11fb7fcaf 100644 --- a/GL/glx/glxext.c +++ b/GL/glx/glxext.c @@ -59,10 +59,7 @@ xGLXSingleReply __glXReply; ** A set of state for each client. The 0th one is unused because client ** indices start at 1, not 0. */ -__GLXclientState *__glXClients[MAXCLIENTS+1]; - - -static Bool inDispatch; +static __GLXclientState *__glXClients[MAXCLIENTS + 1]; /* ** Forward declarations. @@ -219,6 +216,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) return True; } +static __GLXcontext *glxPendingDestroyContexts; +static int glxServerLeaveCount; +static int glxBlockClients; + /* ** Free a context. */ @@ -236,13 +237,14 @@ GLboolean __glXFreeContext(__GLXcontext *cx) * __glXDispatch() or as a callback from the resource manager. In * the latter case we need to lift the DRI lock manually. */ - if (!inDispatch) - __glXleaveServer(); - - cx->destroy(cx); - - if (!inDispatch) - __glXenterServer(); + if (glxBlockClients) { + __glXleaveServer(); + cx->destroy(cx); + __glXenterServer(); + } else { + cx->next = glxPendingDestroyContexts; + glxPendingDestroyContexts = cx; + } return GL_TRUE; } @@ -338,7 +340,7 @@ void GlxExtensionInit(void) /* ** Initialize table of client state. There is never a client 0. */ - for (i=1; i <= MAXCLIENTS; i++) { + for (i = 1; i <= MAXCLIENTS; i++) { __glXClients[i] = 0; } @@ -409,11 +411,43 @@ __GLXcontext *__glXForceCurrent(__GLXclientState *cl, GLXContextTag tag, /************************************************************************/ -/* -** Top level dispatcher; all commands are executed from here down. -*/ +void glxSuspendClients(void) +{ + int i; -/* I cried when I wrote this. Damn you XAA! */ + for (i = 1; i <= MAXCLIENTS; i++) { + if (__glXClients[i] == NULL || !__glXClients[i]->inUse) + continue; + + IgnoreClient(__glXClients[i]->client); + } + + glxBlockClients = TRUE; +} + +void glxResumeClients(void) +{ + __GLXcontext *cx, *next; + int i; + + glxBlockClients = FALSE; + + for (i = 1; i <= MAXCLIENTS; i++) { + if (__glXClients[i] == NULL || !__glXClients[i]->inUse) + continue; + + AttendClient(__glXClients[i]->client); + } + + __glXleaveServer(); + for (cx = glxPendingDestroyContexts; cx != NULL; cx = next) { + next = cx->next; + + cx->destroy(cx); + } + glxPendingDestroyContexts = NULL; + __glXenterServer(); +} static void __glXnopEnterServer(void) @@ -438,14 +472,19 @@ void __glXsetEnterLeaveServerFuncs(void (*enter)(void), void __glXenterServer(void) { - (*__glXenterServerFunc)(); + glxServerLeaveCount--; + + if (glxServerLeaveCount == 0) + (*__glXenterServerFunc)(); } void __glXleaveServer(void) { - (*__glXleaveServerFunc)(); -} + if (glxServerLeaveCount == 0) + (*__glXleaveServerFunc)(); + glxServerLeaveCount++; +} /* ** Top level dispatcher; all commands are executed from here down. @@ -491,6 +530,15 @@ static int __glXDispatch(ClientPtr client) return __glXError(GLXBadLargeRequest); } + /* If we're currently blocking GLX clients, just put this guy to + * sleep, reset the request and return. */ + if (glxBlockClients) { + ResetCurrentRequest(client); + client->sequence--; + IgnoreClient(client); + return(client->noClientException); + } + /* ** Use the opcode to index into the procedure table. */ @@ -500,12 +548,8 @@ static int __glXDispatch(ClientPtr client) if (proc != NULL) { __glXleaveServer(); - inDispatch = True; - retval = (*proc)(cl, (GLbyte *) stuff); - inDispatch = False; - __glXenterServer(); } else { diff --git a/GL/glx/glxext.h b/GL/glx/glxext.h index d7082086b..edd66a8f0 100644 --- a/GL/glx/glxext.h +++ b/GL/glx/glxext.h @@ -71,9 +71,6 @@ extern void __glXClearErrorOccured(void); extern GLboolean __glXErrorOccured(void); extern void __glXResetLargeCommandStatus(__GLXclientState*); -extern int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc); -extern int __glXSwapQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc); - extern int DoMakeCurrent( __GLXclientState *cl, GLXDrawable drawId, GLXDrawable readId, GLXContextID contextId, GLXContextTag tag ); extern int DoGetVisualConfigs(__GLXclientState *cl, unsigned screen, @@ -93,8 +90,6 @@ extern int DoRenderLarge(__GLXclientState *cl, GLbyte *pc, int do_swap); extern void GlxExtensionInit(void); -extern Bool __glXCoreType(void); - extern const char GLServerVersion[]; extern int DoGetString(__GLXclientState *cl, GLbyte *pc, GLboolean need_swap); diff --git a/GL/glx/glxserver.h b/GL/glx/glxserver.h index a79520e4a..49cad7328 100644 --- a/GL/glx/glxserver.h +++ b/GL/glx/glxserver.h @@ -136,6 +136,9 @@ void __glXsetEnterLeaveServerFuncs(void (*enter)(void), void __glXenterServer(void); void __glXleaveServer(void); +void glxSuspendClients(void); +void glxResumeClients(void); + /* ** State kept per client. */ @@ -176,8 +179,6 @@ struct __GLXclientStateRec { char *GLClientextensions; }; -extern __GLXclientState *__glXClients[]; - /************************************************************************/ /* @@ -191,7 +192,6 @@ typedef int (*__GLXdispatchVendorPrivProcPtr)(__GLXclientState *, GLbyte *); * Dispatch for GLX commands. */ typedef int (*__GLXprocPtr)(__GLXclientState *, char *pc); -extern __GLXprocPtr __glXProcTable[]; /* * Tables for computing the size of each rendering command. @@ -252,6 +252,4 @@ extern int __glXImageSize(GLenum format, GLenum type, GLint imageHeight, GLint rowLength, GLint skipImages, GLint skipRows, GLint alignment); -extern int __glXDrawArraysReqSize(const GLbyte *pc, Bool swap); - #endif /* !__GLX_server_h__ */ diff --git a/GL/glx/glxutil.h b/GL/glx/glxutil.h index c30a1f9cd..1937ef2cf 100644 --- a/GL/glx/glxutil.h +++ b/GL/glx/glxutil.h @@ -40,36 +40,18 @@ ** */ -extern void __glXNop(void); - /* relate contexts with drawables */ extern void __glXAssociateContext(__GLXcontext *glxc); extern void __glXDeassociateContext(__GLXcontext *glxc); -/* drawable operation */ -extern void __glXGetDrawableSize(__GLdrawablePrivate *glPriv, - GLint *x, GLint *y, - GLuint *width, GLuint *height); -extern GLboolean __glXResizeDrawable(__GLdrawablePrivate *glPriv); -extern GLboolean __glXResizeDrawableBuffers(__GLXdrawable *glxPriv); - /* drawable management */ extern void __glXRefDrawable(__GLXdrawable *glxPriv); extern void __glXUnrefDrawable(__GLXdrawable *glxPriv); -extern __GLXdrawable *__glXCreateDrawable(__GLXscreen *screen, - DrawablePtr pDraw, XID drawId, - __GLcontextModes *modes); extern GLboolean __glXDrawableInit(__GLXdrawable *drawable, __GLXscreen *screen, DrawablePtr pDraw, XID drawID, __GLcontextModes *modes); -extern GLboolean __glXDestroyDrawable(__GLXdrawable *glxPriv); -extern __GLXdrawable *__glXFindDrawable(XID glxpixmapId); -extern __GLXdrawable *__glXGetDrawable(__GLXcontext *ctx, - DrawablePtr pDraw, - XID glxpixmapId); -extern void __glXCacheDrawableSize(__GLXdrawable *glxPriv); /* context helper routines */ extern __GLXcontext *__glXLookupContextByTag(__GLXclientState*, GLXContextTag); @@ -79,4 +61,3 @@ extern void *__glXglDDXScreenInfo(void); extern void *__glXglDDXExtensionInfo(void); #endif /* _glxcmds_h_ */ - diff --git a/GL/glx/indirect_table.c b/GL/glx/indirect_table.c index d13e4f8df..57712f4f5 100644 --- a/GL/glx/indirect_table.c +++ b/GL/glx/indirect_table.c @@ -1232,12 +1232,12 @@ const struct __glXDispatchInfo Render_dispatch_info = { /*****************************************************************/ /* tree depth = 13 */ -static const int_fast16_t VendorPriv_dispatch_tree[155] = { +static const int_fast16_t VendorPriv_dispatch_tree[158] = { /* [0] -> opcode range [0, 131072], node depth 1 */ 2, 5, EMPTY_LEAF, - 119, + 122, EMPTY_LEAF, /* [5] -> opcode range [0, 32768], node depth 2 */ @@ -1254,7 +1254,7 @@ static const int_fast16_t VendorPriv_dispatch_tree[155] = { 2, 16, EMPTY_LEAF, - 78, + 81, EMPTY_LEAF, /* [16] -> opcode range [0, 2048], node depth 5 */ @@ -1299,7 +1299,7 @@ static const int_fast16_t VendorPriv_dispatch_tree[155] = { 44, EMPTY_LEAF, 56, - 67, + 70, /* [44] -> opcode range [1024, 1152], node depth 7 */ 1, @@ -1327,164 +1327,169 @@ static const int_fast16_t VendorPriv_dispatch_tree[155] = { EMPTY_LEAF, /* [59] -> opcode range [1280, 1344], node depth 8 */ - 1, - 62, + 2, + 64, + LEAF(16), EMPTY_LEAF, + 67, - /* [62] -> opcode range [1280, 1312], node depth 9 */ - 2, + /* [64] -> opcode range [1280, 1296], node depth 9 */ + 1, EMPTY_LEAF, - LEAF(16), - LEAF(24), LEAF(32), - /* [67] -> opcode range [1408, 1536], node depth 7 */ + /* [67] -> opcode range [1328, 1344], node depth 9 */ 1, - 70, + LEAF(40), EMPTY_LEAF, - /* [70] -> opcode range [1408, 1472], node depth 8 */ + /* [70] -> opcode range [1408, 1536], node depth 7 */ 1, 73, EMPTY_LEAF, - /* [73] -> opcode range [1408, 1440], node depth 9 */ - 2, - EMPTY_LEAF, - LEAF(40), - LEAF(48), + /* [73] -> opcode range [1408, 1472], node depth 8 */ + 1, + 76, EMPTY_LEAF, - /* [78] -> opcode range [4096, 6144], node depth 5 */ + /* [76] -> opcode range [1408, 1440], node depth 9 */ 2, - 83, EMPTY_LEAF, - 101, + LEAF(48), + LEAF(56), EMPTY_LEAF, - /* [83] -> opcode range [4096, 4608], node depth 6 */ - 1, + /* [81] -> opcode range [4096, 6144], node depth 5 */ + 2, 86, EMPTY_LEAF, + 104, + EMPTY_LEAF, - /* [86] -> opcode range [4096, 4352], node depth 7 */ + /* [86] -> opcode range [4096, 4608], node depth 6 */ 1, 89, EMPTY_LEAF, - /* [89] -> opcode range [4096, 4224], node depth 8 */ + /* [89] -> opcode range [4096, 4352], node depth 7 */ 1, 92, EMPTY_LEAF, - /* [92] -> opcode range [4096, 4160], node depth 9 */ + /* [92] -> opcode range [4096, 4224], node depth 8 */ 1, 95, EMPTY_LEAF, - /* [95] -> opcode range [4096, 4128], node depth 10 */ + /* [95] -> opcode range [4096, 4160], node depth 9 */ 1, 98, EMPTY_LEAF, - /* [98] -> opcode range [4096, 4112], node depth 11 */ + /* [98] -> opcode range [4096, 4128], node depth 10 */ 1, - LEAF(56), + 101, EMPTY_LEAF, - /* [101] -> opcode range [5120, 5632], node depth 6 */ + /* [101] -> opcode range [4096, 4112], node depth 11 */ 1, - 104, + LEAF(64), EMPTY_LEAF, - /* [104] -> opcode range [5120, 5376], node depth 7 */ + /* [104] -> opcode range [5120, 5632], node depth 6 */ 1, 107, EMPTY_LEAF, - /* [107] -> opcode range [5120, 5248], node depth 8 */ + /* [107] -> opcode range [5120, 5376], node depth 7 */ 1, 110, EMPTY_LEAF, - /* [110] -> opcode range [5120, 5184], node depth 9 */ + /* [110] -> opcode range [5120, 5248], node depth 8 */ 1, - EMPTY_LEAF, 113, + EMPTY_LEAF, - /* [113] -> opcode range [5152, 5184], node depth 10 */ + /* [113] -> opcode range [5120, 5184], node depth 9 */ 1, - 116, EMPTY_LEAF, + 116, - /* [116] -> opcode range [5152, 5168], node depth 11 */ + /* [116] -> opcode range [5152, 5184], node depth 10 */ 1, - LEAF(64), + 119, EMPTY_LEAF, - /* [119] -> opcode range [65536, 98304], node depth 2 */ + /* [119] -> opcode range [5152, 5168], node depth 11 */ 1, - 122, + LEAF(72), EMPTY_LEAF, - /* [122] -> opcode range [65536, 81920], node depth 3 */ + /* [122] -> opcode range [65536, 98304], node depth 2 */ 1, 125, EMPTY_LEAF, - /* [125] -> opcode range [65536, 73728], node depth 4 */ + /* [125] -> opcode range [65536, 81920], node depth 3 */ 1, 128, EMPTY_LEAF, - /* [128] -> opcode range [65536, 69632], node depth 5 */ + /* [128] -> opcode range [65536, 73728], node depth 4 */ 1, 131, EMPTY_LEAF, - /* [131] -> opcode range [65536, 67584], node depth 6 */ + /* [131] -> opcode range [65536, 69632], node depth 5 */ 1, 134, EMPTY_LEAF, - /* [134] -> opcode range [65536, 66560], node depth 7 */ + /* [134] -> opcode range [65536, 67584], node depth 6 */ 1, 137, EMPTY_LEAF, - /* [137] -> opcode range [65536, 66048], node depth 8 */ + /* [137] -> opcode range [65536, 66560], node depth 7 */ 1, 140, EMPTY_LEAF, - /* [140] -> opcode range [65536, 65792], node depth 9 */ + /* [140] -> opcode range [65536, 66048], node depth 8 */ 1, 143, EMPTY_LEAF, - /* [143] -> opcode range [65536, 65664], node depth 10 */ + /* [143] -> opcode range [65536, 65792], node depth 9 */ 1, 146, EMPTY_LEAF, - /* [146] -> opcode range [65536, 65600], node depth 11 */ + /* [146] -> opcode range [65536, 65664], node depth 10 */ 1, 149, EMPTY_LEAF, - /* [149] -> opcode range [65536, 65568], node depth 12 */ + /* [149] -> opcode range [65536, 65600], node depth 11 */ 1, 152, EMPTY_LEAF, - /* [152] -> opcode range [65536, 65552], node depth 13 */ + /* [152] -> opcode range [65536, 65568], node depth 12 */ 1, - LEAF(72), + 155, + EMPTY_LEAF, + + /* [155] -> opcode range [65536, 65552], node depth 13 */ + 1, + LEAF(80), EMPTY_LEAF, }; -static const void *VendorPriv_function_table[80][2] = { +static const void *VendorPriv_function_table[88][2] = { /* [ 0] = 8 */ {NULL, NULL}, /* [ 1] = 9 */ {NULL, NULL}, /* [ 2] = 10 */ {NULL, NULL}, @@ -1501,70 +1506,78 @@ static const void *VendorPriv_function_table[80][2] = { /* [ 13] = 1029 */ {NULL, NULL}, /* [ 14] = 1030 */ {NULL, NULL}, /* [ 15] = 1031 */ {NULL, NULL}, - /* [ 16] = 1288 */ {NULL, NULL}, - /* [ 17] = 1289 */ {NULL, NULL}, - /* [ 18] = 1290 */ {NULL, NULL}, - /* [ 19] = 1291 */ {NULL, NULL}, - /* [ 20] = 1292 */ {NULL, NULL}, - /* [ 21] = 1293 */ {__glXDisp_AreProgramsResidentNV, __glXDispSwap_AreProgramsResidentNV}, - /* [ 22] = 1294 */ {__glXDisp_DeleteProgramsNV, __glXDispSwap_DeleteProgramsNV}, - /* [ 23] = 1295 */ {__glXDisp_GenProgramsNV, __glXDispSwap_GenProgramsNV}, - /* [ 24] = 1296 */ {__glXDisp_GetProgramEnvParameterfvARB, __glXDispSwap_GetProgramEnvParameterfvARB}, - /* [ 25] = 1297 */ {__glXDisp_GetProgramEnvParameterdvARB, __glXDispSwap_GetProgramEnvParameterdvARB}, - /* [ 26] = 1298 */ {__glXDisp_GetProgramivNV, __glXDispSwap_GetProgramivNV}, - /* [ 27] = 1299 */ {__glXDisp_GetProgramStringNV, __glXDispSwap_GetProgramStringNV}, - /* [ 28] = 1300 */ {__glXDisp_GetTrackMatrixivNV, __glXDispSwap_GetTrackMatrixivNV}, - /* [ 29] = 1301 */ {__glXDisp_GetVertexAttribdvARB, __glXDispSwap_GetVertexAttribdvARB}, - /* [ 30] = 1302 */ {__glXDisp_GetVertexAttribfvNV, __glXDispSwap_GetVertexAttribfvNV}, - /* [ 31] = 1303 */ {__glXDisp_GetVertexAttribivNV, __glXDispSwap_GetVertexAttribivNV}, - /* [ 32] = 1304 */ {__glXDisp_IsProgramNV, __glXDispSwap_IsProgramNV}, - /* [ 33] = 1305 */ {__glXDisp_GetProgramLocalParameterfvARB, __glXDispSwap_GetProgramLocalParameterfvARB}, - /* [ 34] = 1306 */ {__glXDisp_GetProgramLocalParameterdvARB, __glXDispSwap_GetProgramLocalParameterdvARB}, - /* [ 35] = 1307 */ {__glXDisp_GetProgramivARB, __glXDispSwap_GetProgramivARB}, - /* [ 36] = 1308 */ {__glXDisp_GetProgramStringARB, __glXDispSwap_GetProgramStringARB}, - /* [ 37] = 1309 */ {NULL, NULL}, - /* [ 38] = 1310 */ {__glXDisp_GetProgramNamedParameterfvNV, __glXDispSwap_GetProgramNamedParameterfvNV}, - /* [ 39] = 1311 */ {__glXDisp_GetProgramNamedParameterdvNV, __glXDispSwap_GetProgramNamedParameterdvNV}, - /* [ 40] = 1416 */ {NULL, NULL}, - /* [ 41] = 1417 */ {NULL, NULL}, - /* [ 42] = 1418 */ {NULL, NULL}, - /* [ 43] = 1419 */ {NULL, NULL}, - /* [ 44] = 1420 */ {NULL, NULL}, - /* [ 45] = 1421 */ {NULL, NULL}, - /* [ 46] = 1422 */ {__glXDisp_IsRenderbufferEXT, __glXDispSwap_IsRenderbufferEXT}, - /* [ 47] = 1423 */ {__glXDisp_GenRenderbuffersEXT, __glXDispSwap_GenRenderbuffersEXT}, - /* [ 48] = 1424 */ {__glXDisp_GetRenderbufferParameterivEXT, __glXDispSwap_GetRenderbufferParameterivEXT}, - /* [ 49] = 1425 */ {__glXDisp_IsFramebufferEXT, __glXDispSwap_IsFramebufferEXT}, - /* [ 50] = 1426 */ {__glXDisp_GenFramebuffersEXT, __glXDispSwap_GenFramebuffersEXT}, - /* [ 51] = 1427 */ {__glXDisp_CheckFramebufferStatusEXT, __glXDispSwap_CheckFramebufferStatusEXT}, - /* [ 52] = 1428 */ {__glXDisp_GetFramebufferAttachmentParameterivEXT, __glXDispSwap_GetFramebufferAttachmentParameterivEXT}, - /* [ 53] = 1429 */ {NULL, NULL}, - /* [ 54] = 1430 */ {NULL, NULL}, - /* [ 55] = 1431 */ {NULL, NULL}, - /* [ 56] = 4096 */ {NULL, NULL}, - /* [ 57] = 4097 */ {NULL, NULL}, - /* [ 58] = 4098 */ {__glXDisp_GetColorTableSGI, __glXDispSwap_GetColorTableSGI}, - /* [ 59] = 4099 */ {__glXDisp_GetColorTableParameterfvSGI, __glXDispSwap_GetColorTableParameterfvSGI}, - /* [ 60] = 4100 */ {__glXDisp_GetColorTableParameterivSGI, __glXDispSwap_GetColorTableParameterivSGI}, - /* [ 61] = 4101 */ {NULL, NULL}, - /* [ 62] = 4102 */ {NULL, NULL}, - /* [ 63] = 4103 */ {NULL, NULL}, - /* [ 64] = 5152 */ {__glXDisp_BindTexImageEXT, __glXDispSwap_BindTexImageEXT}, - /* [ 65] = 5153 */ {__glXDisp_ReleaseTexImageEXT, __glXDispSwap_ReleaseTexImageEXT}, - /* [ 66] = 5154 */ {__glXDisp_CopySubBufferMESA, __glXDispSwap_CopySubBufferMESA}, - /* [ 67] = 5155 */ {NULL, NULL}, - /* [ 68] = 5156 */ {NULL, NULL}, - /* [ 69] = 5157 */ {NULL, NULL}, - /* [ 70] = 5158 */ {NULL, NULL}, - /* [ 71] = 5159 */ {NULL, NULL}, - /* [ 72] = 65536 */ {__glXDisp_SwapIntervalSGI, __glXDispSwap_SwapIntervalSGI}, - /* [ 73] = 65537 */ {__glXDisp_MakeCurrentReadSGI, __glXDispSwap_MakeCurrentReadSGI}, - /* [ 74] = 65538 */ {NULL, NULL}, - /* [ 75] = 65539 */ {NULL, NULL}, - /* [ 76] = 65540 */ {__glXDisp_GetFBConfigsSGIX, __glXDispSwap_GetFBConfigsSGIX}, - /* [ 77] = 65541 */ {__glXDisp_CreateContextWithConfigSGIX, __glXDispSwap_CreateContextWithConfigSGIX}, - /* [ 78] = 65542 */ {__glXDisp_CreateGLXPixmapWithConfigSGIX, __glXDispSwap_CreateGLXPixmapWithConfigSGIX}, - /* [ 79] = 65543 */ {NULL, NULL}, + /* [ 16] = 1296 */ {__glXDisp_GetProgramEnvParameterfvARB, __glXDispSwap_GetProgramEnvParameterfvARB}, + /* [ 17] = 1297 */ {__glXDisp_GetProgramEnvParameterdvARB, __glXDispSwap_GetProgramEnvParameterdvARB}, + /* [ 18] = 1298 */ {__glXDisp_GetProgramivNV, __glXDispSwap_GetProgramivNV}, + /* [ 19] = 1299 */ {__glXDisp_GetProgramStringNV, __glXDispSwap_GetProgramStringNV}, + /* [ 20] = 1300 */ {__glXDisp_GetTrackMatrixivNV, __glXDispSwap_GetTrackMatrixivNV}, + /* [ 21] = 1301 */ {__glXDisp_GetVertexAttribdvARB, __glXDispSwap_GetVertexAttribdvARB}, + /* [ 22] = 1302 */ {__glXDisp_GetVertexAttribfvNV, __glXDispSwap_GetVertexAttribfvNV}, + /* [ 23] = 1303 */ {__glXDisp_GetVertexAttribivNV, __glXDispSwap_GetVertexAttribivNV}, + /* [ 24] = 1304 */ {__glXDisp_IsProgramNV, __glXDispSwap_IsProgramNV}, + /* [ 25] = 1305 */ {__glXDisp_GetProgramLocalParameterfvARB, __glXDispSwap_GetProgramLocalParameterfvARB}, + /* [ 26] = 1306 */ {__glXDisp_GetProgramLocalParameterdvARB, __glXDispSwap_GetProgramLocalParameterdvARB}, + /* [ 27] = 1307 */ {__glXDisp_GetProgramivARB, __glXDispSwap_GetProgramivARB}, + /* [ 28] = 1308 */ {__glXDisp_GetProgramStringARB, __glXDispSwap_GetProgramStringARB}, + /* [ 29] = 1309 */ {NULL, NULL}, + /* [ 30] = 1310 */ {__glXDisp_GetProgramNamedParameterfvNV, __glXDispSwap_GetProgramNamedParameterfvNV}, + /* [ 31] = 1311 */ {__glXDisp_GetProgramNamedParameterdvNV, __glXDispSwap_GetProgramNamedParameterdvNV}, + /* [ 32] = 1288 */ {NULL, NULL}, + /* [ 33] = 1289 */ {NULL, NULL}, + /* [ 34] = 1290 */ {NULL, NULL}, + /* [ 35] = 1291 */ {NULL, NULL}, + /* [ 36] = 1292 */ {NULL, NULL}, + /* [ 37] = 1293 */ {__glXDisp_AreProgramsResidentNV, __glXDispSwap_AreProgramsResidentNV}, + /* [ 38] = 1294 */ {__glXDisp_DeleteProgramsNV, __glXDispSwap_DeleteProgramsNV}, + /* [ 39] = 1295 */ {__glXDisp_GenProgramsNV, __glXDispSwap_GenProgramsNV}, + /* [ 40] = 1328 */ {NULL, NULL}, + /* [ 41] = 1329 */ {NULL, NULL}, + /* [ 42] = 1330 */ {__glXDisp_BindTexImageEXT, __glXDispSwap_BindTexImageEXT}, + /* [ 43] = 1331 */ {__glXDisp_ReleaseTexImageEXT, __glXDispSwap_ReleaseTexImageEXT}, + /* [ 44] = 1332 */ {NULL, NULL}, + /* [ 45] = 1333 */ {NULL, NULL}, + /* [ 46] = 1334 */ {NULL, NULL}, + /* [ 47] = 1335 */ {NULL, NULL}, + /* [ 48] = 1416 */ {NULL, NULL}, + /* [ 49] = 1417 */ {NULL, NULL}, + /* [ 50] = 1418 */ {NULL, NULL}, + /* [ 51] = 1419 */ {NULL, NULL}, + /* [ 52] = 1420 */ {NULL, NULL}, + /* [ 53] = 1421 */ {NULL, NULL}, + /* [ 54] = 1422 */ {__glXDisp_IsRenderbufferEXT, __glXDispSwap_IsRenderbufferEXT}, + /* [ 55] = 1423 */ {__glXDisp_GenRenderbuffersEXT, __glXDispSwap_GenRenderbuffersEXT}, + /* [ 56] = 1424 */ {__glXDisp_GetRenderbufferParameterivEXT, __glXDispSwap_GetRenderbufferParameterivEXT}, + /* [ 57] = 1425 */ {__glXDisp_IsFramebufferEXT, __glXDispSwap_IsFramebufferEXT}, + /* [ 58] = 1426 */ {__glXDisp_GenFramebuffersEXT, __glXDispSwap_GenFramebuffersEXT}, + /* [ 59] = 1427 */ {__glXDisp_CheckFramebufferStatusEXT, __glXDispSwap_CheckFramebufferStatusEXT}, + /* [ 60] = 1428 */ {__glXDisp_GetFramebufferAttachmentParameterivEXT, __glXDispSwap_GetFramebufferAttachmentParameterivEXT}, + /* [ 61] = 1429 */ {NULL, NULL}, + /* [ 62] = 1430 */ {NULL, NULL}, + /* [ 63] = 1431 */ {NULL, NULL}, + /* [ 64] = 4096 */ {NULL, NULL}, + /* [ 65] = 4097 */ {NULL, NULL}, + /* [ 66] = 4098 */ {__glXDisp_GetColorTableSGI, __glXDispSwap_GetColorTableSGI}, + /* [ 67] = 4099 */ {__glXDisp_GetColorTableParameterfvSGI, __glXDispSwap_GetColorTableParameterfvSGI}, + /* [ 68] = 4100 */ {__glXDisp_GetColorTableParameterivSGI, __glXDispSwap_GetColorTableParameterivSGI}, + /* [ 69] = 4101 */ {NULL, NULL}, + /* [ 70] = 4102 */ {NULL, NULL}, + /* [ 71] = 4103 */ {NULL, NULL}, + /* [ 72] = 5152 */ {NULL, NULL}, + /* [ 73] = 5153 */ {NULL, NULL}, + /* [ 74] = 5154 */ {__glXDisp_CopySubBufferMESA, __glXDispSwap_CopySubBufferMESA}, + /* [ 75] = 5155 */ {NULL, NULL}, + /* [ 76] = 5156 */ {NULL, NULL}, + /* [ 77] = 5157 */ {NULL, NULL}, + /* [ 78] = 5158 */ {NULL, NULL}, + /* [ 79] = 5159 */ {NULL, NULL}, + /* [ 80] = 65536 */ {__glXDisp_SwapIntervalSGI, __glXDispSwap_SwapIntervalSGI}, + /* [ 81] = 65537 */ {__glXDisp_MakeCurrentReadSGI, __glXDispSwap_MakeCurrentReadSGI}, + /* [ 82] = 65538 */ {NULL, NULL}, + /* [ 83] = 65539 */ {NULL, NULL}, + /* [ 84] = 65540 */ {__glXDisp_GetFBConfigsSGIX, __glXDispSwap_GetFBConfigsSGIX}, + /* [ 85] = 65541 */ {__glXDisp_CreateContextWithConfigSGIX, __glXDispSwap_CreateContextWithConfigSGIX}, + /* [ 86] = 65542 */ {__glXDisp_CreateGLXPixmapWithConfigSGIX, __glXDispSwap_CreateGLXPixmapWithConfigSGIX}, + /* [ 87] = 65543 */ {NULL, NULL}, }; const struct __glXDispatchInfo VendorPriv_dispatch_info = { diff --git a/Xext/fontcache.c b/Xext/fontcache.c index 00a45c90e..db0348144 100644 --- a/Xext/fontcache.c +++ b/Xext/fontcache.c @@ -45,8 +45,8 @@ #include "inputstr.h" #include "servermd.h" #define _FONTCACHE_SERVER_ -#include "fontcacheP.h" -#include "fontcachstr.h" +#include <X11/extensions/fontcacheP.h> +#include <X11/extensions/fontcachstr.h> #include <X11/Xfuncproto.h> #include "swaprep.h" diff --git a/fb/fbimage.c b/fb/fbimage.c index bf5c06b57..3b4a07c3d 100644 --- a/fb/fbimage.c +++ b/fb/fbimage.c @@ -68,7 +68,7 @@ fbPutImage (DrawablePtr pDrawable, break; case XYPixmap: srcStride = BitmapBytePad(w + leftPad) / sizeof (FbStip); - for (i = 1 << (pDrawable->depth - 1); i; i >>= 1) + for (i = (unsigned long)1 << (pDrawable->depth - 1); i; i >>= 1) { if (i & pGC->planemask) { diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am index 81b62f1fe..d36647b54 100644 --- a/hw/dmx/Makefile.am +++ b/hw/dmx/Makefile.am @@ -83,6 +83,7 @@ Xdmx_LDADD = $(XORG_CORE_LIBS) \ Xdmx_CFLAGS = \ -DHAVE_DMX_CONFIG_H \ + $(DIX_CFLAGS) \ $(GLX_INCS) \ $(GLX_DEFS) \ @DMXMODULES_CFLAGS@ diff --git a/hw/dmx/dmx.h b/hw/dmx/dmx.h index 18e75de90..becb2da38 100644 --- a/hw/dmx/dmx.h +++ b/hw/dmx/dmx.h @@ -51,6 +51,10 @@ #ifndef DMX_H #define DMX_H +#if HAVE_DMX_CONFIG_H +#include <dmx-config.h> +#endif + #include "gcstruct.h" /* Handle client-side include files in one place. */ diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h index 4903791f2..458750007 100644 --- a/hw/xfree86/common/xf86.h +++ b/hw/xfree86/common/xf86.h @@ -36,6 +36,12 @@ #ifndef _XF86_H #define _XF86_H +#if HAVE_XORG_CONFIG_H +#include <xorg-config.h> +#elif HAVE_DIX_CONFIG_H +#include <dix-config.h> +#endif + #include "xf86str.h" #include "xf86Opt.h" #include <X11/Xfuncproto.h> diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c index a3c07f330..a97e6f0c9 100644 --- a/hw/xfree86/os-support/bus/linuxPci.c +++ b/hw/xfree86/os-support/bus/linuxPci.c @@ -83,7 +83,13 @@ static pciBusFuncs_t linuxFuncs0 = { /* pciAddrBusToHost */ linuxPpcBusAddrToHostAddr, #else /* pciAddrHostToBus */ pciAddrNOOP, +/* linuxTransAddrBusToHost is busted on sparc64 but the PCI rework tree + * makes it all moot, so we kludge it for now */ +#if defined(__sparc64__) +/* pciAddrBusToHost */ pciAddrNOOP, +#else /* pciAddrBusToHost */ linuxTransAddrBusToHost, +#endif /* __sparc64__ */ #endif /* pciControlBridge */ NULL, diff --git a/hw/xfree86/parser/Makefile.am b/hw/xfree86/parser/Makefile.am index acda83d27..46ef79060 100644 --- a/hw/xfree86/parser/Makefile.am +++ b/hw/xfree86/parser/Makefile.am @@ -1,5 +1,8 @@ if INSTALL_LIBXF86CONFIG lib_LIBRARIES = libxf86config.a +LIBHEADERS = \ + xf86Optrec.h \ + xf86Parser.h else noinst_LIBRARIES = libxf86config.a endif @@ -32,3 +35,6 @@ EXTRA_DIST = \ xf86Parser.h \ xf86tokens.h \ cpconfig.c + +sdk_HEADERS = \ + $(LIBHEADERS) diff --git a/hw/xfree86/parser/Monitor.c b/hw/xfree86/parser/Monitor.c index 4a8575049..9dd0b1b1c 100644 --- a/hw/xfree86/parser/Monitor.c +++ b/hw/xfree86/parser/Monitor.c @@ -675,7 +675,7 @@ xf86printMonitorSection (FILE * cf, XF86ConfMonitorPtr ptr) ptr->mon_width, ptr->mon_height); if ( ptr->mon_n_hsync || ptr->mon_n_vrefresh ) - fprintf(cf," ### Comment all HorizSync and VertSync values to use DDC:\n"); + fprintf(cf," ### Comment all HorizSync and VertRefresh values to use DDC:\n"); for (i = 0; i < ptr->mon_n_hsync; i++) { fprintf (cf, "\tHorizSync %2.1f - %2.1f\n", diff --git a/hw/xnest/Makefile.am b/hw/xnest/Makefile.am index b237788bc..d40d122f4 100644 --- a/hw/xnest/Makefile.am +++ b/hw/xnest/Makefile.am @@ -51,7 +51,7 @@ Xnest_LDFLAGS = AM_CFLAGS = -DHAVE_XNEST_CONFIG_H \ -DNO_HW_ONLY_EXTS \ - \ + $(DIX_CFLAGS) \ $(XNESTMODULES_CFLAGS) EXTRA_DIST = os2Stub.c \ diff --git a/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am b/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am index 37b57d7bb..2b73b9dad 100644 --- a/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am +++ b/hw/xprint/config/C/print/models/PS2PDFspooldir-GS/Makefile.am @@ -1,3 +1,4 @@ xpcdir = @xpconfigdir@/C/print/models/PS2PDFspooldir-GS -dist_xpc_DATA = model-config ps2pdf_spooltodir.sh +dist_xpc_DATA = model-config +dist_xpc_SCRIPTS = ps2pdf_spooltodir.sh diff --git a/hw/xprint/config/C/print/models/PSspooldir/Makefile.am b/hw/xprint/config/C/print/models/PSspooldir/Makefile.am index 52313aa23..717cd2c36 100644 --- a/hw/xprint/config/C/print/models/PSspooldir/Makefile.am +++ b/hw/xprint/config/C/print/models/PSspooldir/Makefile.am @@ -1,3 +1,4 @@ xpcdir = @xpconfigdir@/C/print/models/PSspooldir -dist_xpc_DATA = model-config spooltodir.sh +dist_xpc_DATA = model-config +dist_xpc_SCRIPTS = spooltodir.sh diff --git a/hw/xprint/config/Makefile.am b/hw/xprint/config/Makefile.am index a5ea214c4..197d19de0 100644 --- a/hw/xprint/config/Makefile.am +++ b/hw/xprint/config/Makefile.am @@ -709,4 +709,4 @@ install-data-local: remove-links uninstall-hook: remove-links -EXTRA_DIST = README +dist_xpconfig_DATA = README diff --git a/hw/xprint/doc/Xprt.html b/hw/xprint/doc/Xprt.html index f84a3c134..2aa0c9e3c 100644 --- a/hw/xprint/doc/Xprt.html +++ b/hw/xprint/doc/Xprt.html @@ -4,7 +4,7 @@ applications to use devices like printers, FAX or create documents in formats like PostScript, PCL or PDF. It may be used by clients such as <span class="application">mozilla</span>. - </p><p>Xprint is a very flexible, extensible, scaleable, client/server + </p><p>Xprint is a very flexible, extensible, scalable, client/server print system based on ISO 10175 (and some other specs) and the X11 rendering protocol. Using Xprint an application can search, query and use devices like @@ -44,11 +44,11 @@ font databases.</p></dd><dt><span class="term"><tt class="option">-pn</tt></span></dt><dd><p>permits the server to continue running if it fails to establish all of its well-known sockets (connection points for clients), but establishes at least - one.</p></dd><dt><span class="term"><tt class="option">-XpFile <i class="replaceable"><tt>file</tt></i></tt></span></dt><dd><p>Sets an altername Xprinters file (see section FILES).</p></dd><dt><span class="term"><tt class="option">-XpSpoolerType <i class="replaceable"><tt>spoolername</tt></i></tt></span></dt><dd xmlns:ns2=""><p> + one.</p></dd><dt><span class="term"><tt class="option">-XpFile <i class="replaceable"><tt>file</tt></i></tt></span></dt><dd><p>Sets an alternate Xprinters file (see section FILES).</p></dd><dt><span class="term"><tt class="option">-XpSpoolerType <i class="replaceable"><tt>spoolername</tt></i></tt></span></dt><dd xmlns:ns2=""><p> Defines the spooler system to be used for print job spooling. Supported values in xprint.mozdev.org release 009 are: </p><table class="simplelist" border="0" summary="Simple list"><tr><td>aix</td></tr><tr><td>aix4</td></tr><tr><td>bsd</td></tr><tr><td>osf</td></tr><tr><td>solaris</td></tr><tr><td>sysv</td></tr><tr><td>uxp</td></tr><tr><td>cups</td></tr><tr><td>lprng</td></tr><tr><td>other</td></tr><tr><td>none</td></tr></table><p> - (multiple values can be specified, seperated by ':', the first active spooler will be chosen). + (multiple values can be specified, separated by ':', the first active spooler will be chosen). The default value is platform-specific and can be obtained via </p><pre class="programlisting">Xprt -h</pre><p>. </p></dd></dl></div></div><div xmlns:ns3="" class="refsect1" lang="en"><a name="id2805336"></a><h2>ENVIRONMENT</h2><p> diff --git a/hw/xprint/doc/Xprt.man.pre b/hw/xprint/doc/Xprt.man.pre index 7599a1344..837619cb2 100644 --- a/hw/xprint/doc/Xprt.man.pre +++ b/hw/xprint/doc/Xprt.man.pre @@ -20,7 +20,7 @@ applications to use devices like printers, FAX or create documents in formats like PostScript, PCL or PDF. It may be used by clients such as mozilla. .PP -Xprint is a very flexible, extensible, scaleable, client/server +Xprint is a very flexible, extensible, scalable, client/server print system based on ISO 10175 (and some other specs) and the X11 rendering protocol. Using Xprint an application can search, query and use devices like @@ -85,7 +85,7 @@ points for clients), but establishes at least one. .TP \fB\-XpFile \fIfile\fB\fR -Sets an altername Xprinters file (see section FILES). +Sets an alternate Xprinters file (see section FILES). .TP \fB\-XpSpoolerType \fIspoolername\fB\fR Defines the spooler system to be used for print job spooling. @@ -113,7 +113,7 @@ other none -(multiple values can be specified, seperated by ':', the first active spooler will be chosen). +(multiple values can be specified, separated by ':', the first active spooler will be chosen). The default value is platform-specific and can be obtained via .nf diff --git a/hw/xprint/doc/Xprt.sgml b/hw/xprint/doc/Xprt.sgml index 0ffa39fcb..a62499263 100644 --- a/hw/xprint/doc/Xprt.sgml +++ b/hw/xprint/doc/Xprt.sgml @@ -55,7 +55,7 @@ HTML generation can be done like this: clients such as <application>mozilla</application>. </para> - <para>Xprint is a very flexible, extensible, scaleable, client/server + <para>Xprint is a very flexible, extensible, scalable, client/server print system based on ISO 10175 (and some other specs) and the X11 rendering protocol. Using Xprint an application can search, query and use devices like @@ -155,7 +155,7 @@ HTML generation can be done like this: <term><option>-XpFile <replaceable>file</replaceable></option> </term> <listitem> - <para>Sets an altername Xprinters file (see section FILES).</para> + <para>Sets an alternate Xprinters file (see section FILES).</para> </listitem> </varlistentry> <varlistentry> @@ -178,7 +178,7 @@ HTML generation can be done like this: <member>other</member> <member>none</member> </simplelist> - (multiple values can be specified, seperated by ':', the first active spooler will be chosen). + (multiple values can be specified, separated by ':', the first active spooler will be chosen). The default value is platform-specific and can be obtained via <programlisting>Xprt -h</programlisting>. </para> diff --git a/hw/xprint/etc/Xsession.d/cde_xsessiond_xprint.sh b/hw/xprint/etc/Xsession.d/cde_xsessiond_xprint.sh index 3fb6bba7c..54c431d5c 100644 --- a/hw/xprint/etc/Xsession.d/cde_xsessiond_xprint.sh +++ b/hw/xprint/etc/Xsession.d/cde_xsessiond_xprint.sh @@ -22,8 +22,8 @@ # Obtain list of Xprint servers # -if [ -f "/etc/init.d/xprint" ] ; then - XPSERVERLIST="`/bin/sh /etc/init.d/xprint get_xpserverlist`" +if [ -x "/etc/init.d/xprint" ] ; then + XPSERVERLIST="`/etc/init.d/xprint get_xpserverlist`" export XPSERVERLIST fi @@ -32,6 +32,10 @@ in this Software without prior written authorization from The Open Group. * */ +#if HAVE_DIX_CONFIG_H +#include <dix-config.h> +#endif + # define NEED_EVENTS # include <X11/X.h> # include <X11/Xmd.h> diff --git a/render/picture.c b/render/picture.c index 566d91e09..a3443c20e 100644 --- a/render/picture.c +++ b/render/picture.c @@ -1459,18 +1459,25 @@ SetPictureClipRegion (PicturePtr pPicture, return result; } +static Bool +transformIsIdentity(PictTransform *t) +{ + return ((t->matrix[0][0] == t->matrix[1][1]) && + (t->matrix[0][0] == t->matrix[2][2]) && + (t->matrix[0][0] != 0) && + (t->matrix[0][1] == 0) && + (t->matrix[0][2] == 0) && + (t->matrix[1][0] == 0) && + (t->matrix[1][2] == 0) && + (t->matrix[2][0] == 0) && + (t->matrix[2][1] == 0)); +} int SetPictureTransform (PicturePtr pPicture, PictTransform *transform) { - static const PictTransform identity = { { - { xFixed1, 0x00000, 0x00000 }, - { 0x00000, xFixed1, 0x00000 }, - { 0x00000, 0x00000, xFixed1 }, - } }; - - if (transform && memcmp (transform, &identity, sizeof (PictTransform)) == 0) + if (transform && transformIsIdentity (transform)) transform = 0; if (transform) |