Bugzilla #1032: Make rootless acceleration functions compatible with
Damage.
This commit is contained in:
parent
cedb9a8d62
commit
6344bb51e2
|
@ -1,4 +1,4 @@
|
||||||
/* $XdotOrg: xc/programs/Xserver/hw/darwin/quartz/cr/crScreen.m,v 1.3 2004/07/30 19:12:18 torrey Exp $ */
|
/* $XdotOrg: xc/programs/Xserver/hw/darwin/quartz/cr/crScreen.m,v 1.4 2004/08/12 20:24:36 torrey Exp $ */
|
||||||
/*
|
/*
|
||||||
* Cocoa rootless implementation initialization
|
* Cocoa rootless implementation initialization
|
||||||
*/
|
*/
|
||||||
|
@ -261,6 +261,10 @@ CRSetupScreen(int index, ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
#endif /* RENDER */
|
#endif /* RENDER */
|
||||||
|
|
||||||
|
// Initialize accelerated rootless drawing
|
||||||
|
// Note that this must be done before DamageSetup().
|
||||||
|
RootlessAccelInit(pScreen);
|
||||||
|
|
||||||
#ifdef DAMAGE
|
#ifdef DAMAGE
|
||||||
// The Damage extension needs to wrap underneath the
|
// The Damage extension needs to wrap underneath the
|
||||||
// generic rootless layer, so do it now.
|
// generic rootless layer, so do it now.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $XdotOrg: xc/programs/Xserver/hw/darwin/quartz/xpr/xprScreen.c,v 1.3 2004/07/30 19:12:18 torrey Exp $ */
|
/* $XdotOrg: xc/programs/Xserver/hw/darwin/quartz/xpr/xprScreen.c,v 1.4 2004/08/12 20:24:36 torrey Exp $ */
|
||||||
/*
|
/*
|
||||||
* Xplugin rootless implementation screen functions
|
* Xplugin rootless implementation screen functions
|
||||||
*/
|
*/
|
||||||
|
@ -325,6 +325,10 @@ xprSetupScreen(int index, ScreenPtr pScreen)
|
||||||
}
|
}
|
||||||
#endif /* RENDER */
|
#endif /* RENDER */
|
||||||
|
|
||||||
|
// Initialize accelerated rootless drawing
|
||||||
|
// Note that this must be done before DamageSetup().
|
||||||
|
RootlessAccelInit(pScreen);
|
||||||
|
|
||||||
#ifdef DAMAGE
|
#ifdef DAMAGE
|
||||||
// The Damage extension needs to wrap underneath the
|
// The Damage extension needs to wrap underneath the
|
||||||
// generic rootless layer, so do it now.
|
// generic rootless layer, so do it now.
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2004-09-17 Torrey Lyons <torrey at freedesktop dot org>
|
||||||
|
|
||||||
|
* winscrinit.c: (winFinishScreenInitFB):
|
||||||
|
Bugzilla #1032: Make rootless acceleration functions compatible with
|
||||||
|
Damage.
|
||||||
|
|
||||||
2004-09-16 Alexander Gottwald <ago at freedesktop dot org>
|
2004-09-16 Alexander Gottwald <ago at freedesktop dot org>
|
||||||
|
|
||||||
* wincreatewnd.c (winCreateBoundingWindowWindowed):
|
* wincreatewnd.c (winCreateBoundingWindowWindowed):
|
||||||
|
|
|
@ -365,6 +365,22 @@ winFinishScreenInitFB (int index,
|
||||||
pScreen->blockData = pScreen;
|
pScreen->blockData = pScreen;
|
||||||
pScreen->wakeupData = pScreen;
|
pScreen->wakeupData = pScreen;
|
||||||
|
|
||||||
|
#ifdef XWIN_MULTIWINDOWEXTWM
|
||||||
|
/*
|
||||||
|
* Setup acceleration for multi-window external window manager mode.
|
||||||
|
* To be compatible with the Damage extension, this must be done
|
||||||
|
* before calling miDCInitialize, which calls DamageSetup.
|
||||||
|
*/
|
||||||
|
if (pScreenInfo->fMWExtWM)
|
||||||
|
{
|
||||||
|
if (!RootlessAccelInit (pScreen))
|
||||||
|
{
|
||||||
|
ErrorF ("winFinishScreenInitFB - RootlessAccelInit () failed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef RENDER
|
#ifdef RENDER
|
||||||
/* Render extension initialization, calls miPictureInit */
|
/* Render extension initialization, calls miPictureInit */
|
||||||
if (!fbPictureInit (pScreen, NULL, 0))
|
if (!fbPictureInit (pScreen, NULL, 0))
|
||||||
|
|
97
miext/rootless/accel/rlAccel.c
Normal file
97
miext/rootless/accel/rlAccel.c
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
* Support for accelerated rootless code
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004 Torrey T. Lyons. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* 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 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 ABOVE LISTED COPYRIGHT HOLDER(S) 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.
|
||||||
|
*
|
||||||
|
* Except as contained in this notice, the name(s) of the above copyright
|
||||||
|
* holders shall not be used in advertising or otherwise to promote the sale,
|
||||||
|
* use or other dealings in this Software without prior written authorization.
|
||||||
|
*/
|
||||||
|
/* $XdotOrg: $ */
|
||||||
|
|
||||||
|
#include "rootless.h"
|
||||||
|
#include "rlAccel.h"
|
||||||
|
|
||||||
|
typedef struct _rlAccelScreenRec {
|
||||||
|
CreateGCProcPtr CreateGC;
|
||||||
|
} rlAccelScreenRec, *rlAccelScreenPtr;
|
||||||
|
|
||||||
|
static int rlAccelScreenPrivateIndex = -1;
|
||||||
|
|
||||||
|
#define RLACCELREC(pScreen) \
|
||||||
|
((rlAccelScreenRec *)(pScreen)->devPrivates[rlAccelScreenPrivateIndex].ptr)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Screen function to create a graphics context
|
||||||
|
*/
|
||||||
|
static Bool
|
||||||
|
rlCreateGC(GCPtr pGC)
|
||||||
|
{
|
||||||
|
ScreenPtr pScreen = pGC->pScreen;
|
||||||
|
rlAccelScreenRec *s = RLACCELREC(pScreen);
|
||||||
|
Bool result;
|
||||||
|
|
||||||
|
// Unwrap and call
|
||||||
|
pScreen->CreateGC = s->CreateGC;
|
||||||
|
result = s->CreateGC(pGC);
|
||||||
|
|
||||||
|
// Accelerated GC ops replace some ops
|
||||||
|
pGC->ops->FillSpans = rlFillSpans;
|
||||||
|
pGC->ops->CopyArea = rlCopyArea;
|
||||||
|
pGC->ops->PolyFillRect = rlPolyFillRect;
|
||||||
|
pGC->ops->ImageGlyphBlt = rlImageGlyphBlt;
|
||||||
|
|
||||||
|
// Rewrap
|
||||||
|
s->CreateGC = pScreen->CreateGC;
|
||||||
|
pScreen->CreateGC = rlCreateGC;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RootlessAccelInit
|
||||||
|
* Called by the rootless implementation to initialize accelerated
|
||||||
|
* rootless drawing.
|
||||||
|
*/
|
||||||
|
Bool
|
||||||
|
RootlessAccelInit(ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
static unsigned long rlAccelGeneration = 0;
|
||||||
|
rlAccelScreenRec *s;
|
||||||
|
|
||||||
|
if (rlAccelGeneration != serverGeneration) {
|
||||||
|
rlAccelScreenPrivateIndex = AllocateScreenPrivateIndex();
|
||||||
|
if (rlAccelScreenPrivateIndex == -1) return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
s = xalloc(sizeof(rlAccelScreenRec));
|
||||||
|
if (!s) return FALSE;
|
||||||
|
RLACCELREC(pScreen) = s;
|
||||||
|
|
||||||
|
// Wrap the one screen function we need
|
||||||
|
s->CreateGC = pScreen->CreateGC;
|
||||||
|
pScreen->CreateGC = rlCreateGC;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
|
@ -28,6 +28,8 @@
|
||||||
*/
|
*/
|
||||||
/* $XFree86: xc/programs/Xserver/miext/rootless/rootlessCommon.c,v 1.4 2003/10/18 00:00:34 torrey Exp $ */
|
/* $XFree86: xc/programs/Xserver/miext/rootless/rootlessCommon.c,v 1.4 2003/10/18 00:00:34 torrey Exp $ */
|
||||||
|
|
||||||
|
#include "fb.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rlBlt.c
|
* rlBlt.c
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -368,6 +368,13 @@ typedef struct _RootlessFrameProcs {
|
||||||
*/
|
*/
|
||||||
Bool RootlessInit(ScreenPtr pScreen, RootlessFrameProcsPtr procs);
|
Bool RootlessInit(ScreenPtr pScreen, RootlessFrameProcsPtr procs);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize acceleration for rootless mode on a given screen.
|
||||||
|
* Note: RootlessAccelInit() must be called before DamageSetup()
|
||||||
|
* and RootlessInit() must be called afterwards.
|
||||||
|
*/
|
||||||
|
Bool RootlessAccelInit(ScreenPtr pScreen);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the frame ID for the physical window displaying the given window.
|
* Return the frame ID for the physical window displaying the given window.
|
||||||
*
|
*
|
||||||
|
|
|
@ -45,10 +45,6 @@
|
||||||
|
|
||||||
#include "rootlessCommon.h"
|
#include "rootlessCommon.h"
|
||||||
|
|
||||||
#if ROOTLESS_ACCEL
|
|
||||||
#include "rlAccel.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// GC functions
|
// GC functions
|
||||||
static void RootlessValidateGC(GCPtr pGC, unsigned long changes,
|
static void RootlessValidateGC(GCPtr pGC, unsigned long changes,
|
||||||
|
@ -165,7 +161,7 @@ static GCOps rootlessGCOps = {
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
if (can_accel_xxx(..) && otherwise-suitable)
|
if (canAccelxxx(..) && otherwise-suitable)
|
||||||
GC_UNSET_PM(gc, dst);
|
GC_UNSET_PM(gc, dst);
|
||||||
|
|
||||||
gc->funcs->OP(gc, ...);
|
gc->funcs->OP(gc, ...);
|
||||||
|
@ -283,13 +279,6 @@ RootlessCreateGC(GCPtr pGC)
|
||||||
devPrivates[rootlessScreenPrivateIndex].ptr;
|
devPrivates[rootlessScreenPrivateIndex].ptr;
|
||||||
result = s->CreateGC(pGC);
|
result = s->CreateGC(pGC);
|
||||||
|
|
||||||
#if ROOTLESS_ACCEL
|
|
||||||
pGC->ops->FillSpans = rlFillSpans;
|
|
||||||
pGC->ops->CopyArea = rlCopyArea;
|
|
||||||
pGC->ops->PolyFillRect = rlPolyFillRect;
|
|
||||||
pGC->ops->ImageGlyphBlt = rlImageGlyphBlt;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gcrec = (RootlessGCRec *) pGC->devPrivates[rootlessGCPrivateIndex].ptr;
|
gcrec = (RootlessGCRec *) pGC->devPrivates[rootlessGCPrivateIndex].ptr;
|
||||||
gcrec->originalOps = NULL; // don't wrap ops yet
|
gcrec->originalOps = NULL; // don't wrap ops yet
|
||||||
gcrec->originalFuncs = pGC->funcs;
|
gcrec->originalFuncs = pGC->funcs;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user