2 * This code was stolen from RAC and adapted to control the legacy vga
6 * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
8 * Permission is hereby granted, free of charge, to any person
9 * obtaining a copy of this software and associated documentation
10 * files (the "Software"), to deal in the Software without
11 * restriction, including without limitation the rights to use,
12 * copy, modify, merge, publish, distribute, sublicense, and/or sell
13 * copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following
17 * The above copyright notice and this permission notice shall be
18 * included in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
22 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27 * OTHER DEALINGS IN THE SOFTWARE.
31 #include "xorg-config.h"
33 #include "xf86VGAarbiter.h"
34 #include "xf86VGAarbiterPriv.h"
37 #include "pciaccess.h"
39 static GCFuncs VGAarbiterGCFuncs
= {
40 VGAarbiterValidateGC
, VGAarbiterChangeGC
, VGAarbiterCopyGC
,
41 VGAarbiterDestroyGC
, VGAarbiterChangeClip
, VGAarbiterDestroyClip
,
45 static GCOps VGAarbiterGCOps
= {
46 VGAarbiterFillSpans
, VGAarbiterSetSpans
, VGAarbiterPutImage
,
47 VGAarbiterCopyArea
, VGAarbiterCopyPlane
, VGAarbiterPolyPoint
,
48 VGAarbiterPolylines
, VGAarbiterPolySegment
, VGAarbiterPolyRectangle
,
49 VGAarbiterPolyArc
, VGAarbiterFillPolygon
, VGAarbiterPolyFillRect
,
50 VGAarbiterPolyFillArc
, VGAarbiterPolyText8
, VGAarbiterPolyText16
,
51 VGAarbiterImageText8
, VGAarbiterImageText16
, VGAarbiterImageGlyphBlt
,
52 VGAarbiterPolyGlyphBlt
, VGAarbiterPushPixels
,
55 static miPointerSpriteFuncRec VGAarbiterSpriteFuncs
= {
56 VGAarbiterSpriteRealizeCursor
, VGAarbiterSpriteUnrealizeCursor
,
57 VGAarbiterSpriteSetCursor
, VGAarbiterSpriteMoveCursor
,
58 VGAarbiterDeviceCursorInitialize
, VGAarbiterDeviceCursorCleanup
61 static DevPrivateKeyRec VGAarbiterScreenKeyRec
;
63 #define VGAarbiterScreenKey (&VGAarbiterScreenKeyRec)
64 static DevPrivateKeyRec VGAarbiterGCKeyRec
;
66 #define VGAarbiterGCKey (&VGAarbiterGCKeyRec)
68 static int vga_no_arb
= 0;
70 xf86VGAarbiterInit(void)
72 if (pci_device_vgaarb_init() != 0) {
75 "VGA arbiter: cannot open kernel arbiter, no multi-card support\n");
80 xf86VGAarbiterFini(void)
84 pci_device_vgaarb_fini();
88 xf86VGAarbiterLock(ScrnInfoPtr pScrn
)
92 pci_device_vgaarb_set_target(pScrn
->vgaDev
);
93 pci_device_vgaarb_lock();
97 xf86VGAarbiterUnlock(ScrnInfoPtr pScrn
)
101 pci_device_vgaarb_unlock();
105 xf86VGAarbiterAllowDRI(ScreenPtr pScreen
)
109 ScrnInfoPtr pScrn
= xf86ScreenToScrn(pScreen
);
114 pci_device_vgaarb_get_info(pScrn
->vgaDev
, &vga_count
, &rsrc_decodes
);
124 xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn
)
126 struct pci_device
*dev
;
132 pEnt
= xf86Entities
[pScrn
->entityList
[0]];
133 if (pEnt
->bus
.type
!= BUS_PCI
)
136 dev
= pEnt
->bus
.id
.pci
;
141 xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn
, int rsrc
)
145 pci_device_vgaarb_set_target(pScrn
->vgaDev
);
146 pci_device_vgaarb_decodes(rsrc
);
150 xf86VGAarbiterWrapFunctions(void)
153 VGAarbiterScreenPtr pScreenPriv
;
154 miPointerScreenPtr PointPriv
;
163 * we need to wrap the arbiter if we have more than
164 * one VGA card - hotplug cries.
166 pci_device_vgaarb_get_info(NULL
, &vga_count
, NULL
);
167 if (vga_count
< 2 || !xf86Screens
)
170 xf86Msg(X_INFO
, "Found %d VGA devices: arbiter wrapping enabled\n",
173 for (i
= 0; i
< xf86NumScreens
; i
++) {
174 pScreen
= xf86Screens
[i
]->pScreen
;
175 ps
= GetPictureScreenIfSet(pScreen
);
176 pScrn
= xf86ScreenToScrn(pScreen
);
177 PointPriv
= dixLookupPrivate(&pScreen
->devPrivates
, miPointerScreenKey
);
179 if (!dixRegisterPrivateKey
180 (&VGAarbiterGCKeyRec
, PRIVATE_GC
, sizeof(VGAarbiterGCRec
)))
183 if (!dixRegisterPrivateKey(&VGAarbiterScreenKeyRec
, PRIVATE_SCREEN
, 0))
186 if (!(pScreenPriv
= malloc(sizeof(VGAarbiterScreenRec
))))
189 dixSetPrivate(&pScreen
->devPrivates
, VGAarbiterScreenKey
, pScreenPriv
);
191 WRAP_SCREEN(CloseScreen
, VGAarbiterCloseScreen
);
192 WRAP_SCREEN(SaveScreen
, VGAarbiterSaveScreen
);
193 WRAP_SCREEN(WakeupHandler
, VGAarbiterWakeupHandler
);
194 WRAP_SCREEN(BlockHandler
, VGAarbiterBlockHandler
);
195 WRAP_SCREEN(CreateGC
, VGAarbiterCreateGC
);
196 WRAP_SCREEN(GetImage
, VGAarbiterGetImage
);
197 WRAP_SCREEN(GetSpans
, VGAarbiterGetSpans
);
198 WRAP_SCREEN(SourceValidate
, VGAarbiterSourceValidate
);
199 WRAP_SCREEN(CopyWindow
, VGAarbiterCopyWindow
);
200 WRAP_SCREEN(ClearToBackground
, VGAarbiterClearToBackground
);
201 WRAP_SCREEN(CreatePixmap
, VGAarbiterCreatePixmap
);
202 WRAP_SCREEN(StoreColors
, VGAarbiterStoreColors
);
203 WRAP_SCREEN(DisplayCursor
, VGAarbiterDisplayCursor
);
204 WRAP_SCREEN(RealizeCursor
, VGAarbiterRealizeCursor
);
205 WRAP_SCREEN(UnrealizeCursor
, VGAarbiterUnrealizeCursor
);
206 WRAP_SCREEN(RecolorCursor
, VGAarbiterRecolorCursor
);
207 WRAP_SCREEN(SetCursorPosition
, VGAarbiterSetCursorPosition
);
208 WRAP_PICT(Composite
, VGAarbiterComposite
);
209 WRAP_PICT(Glyphs
, VGAarbiterGlyphs
);
210 WRAP_PICT(CompositeRects
, VGAarbiterCompositeRects
);
211 WRAP_SCREEN_INFO(AdjustFrame
, VGAarbiterAdjustFrame
);
212 WRAP_SCREEN_INFO(SwitchMode
, VGAarbiterSwitchMode
);
213 WRAP_SCREEN_INFO(EnterVT
, VGAarbiterEnterVT
);
214 WRAP_SCREEN_INFO(LeaveVT
, VGAarbiterLeaveVT
);
215 WRAP_SCREEN_INFO(FreeScreen
, VGAarbiterFreeScreen
);
224 VGAarbiterCloseScreen(ScreenPtr pScreen
)
227 ScrnInfoPtr pScrn
= xf86ScreenToScrn(pScreen
);
228 VGAarbiterScreenPtr pScreenPriv
=
229 (VGAarbiterScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
230 VGAarbiterScreenKey
);
231 miPointerScreenPtr PointPriv
=
232 (miPointerScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
234 PictureScreenPtr ps
= GetPictureScreenIfSet(pScreen
);
236 UNWRAP_SCREEN(CreateGC
);
237 UNWRAP_SCREEN(CloseScreen
);
238 UNWRAP_SCREEN(GetImage
);
239 UNWRAP_SCREEN(GetSpans
);
240 UNWRAP_SCREEN(SourceValidate
);
241 UNWRAP_SCREEN(CopyWindow
);
242 UNWRAP_SCREEN(ClearToBackground
);
243 UNWRAP_SCREEN(SaveScreen
);
244 UNWRAP_SCREEN(StoreColors
);
245 UNWRAP_SCREEN(DisplayCursor
);
246 UNWRAP_SCREEN(RealizeCursor
);
247 UNWRAP_SCREEN(UnrealizeCursor
);
248 UNWRAP_SCREEN(RecolorCursor
);
249 UNWRAP_SCREEN(SetCursorPosition
);
250 UNWRAP_PICT(Composite
);
252 UNWRAP_PICT(CompositeRects
);
253 UNWRAP_SCREEN_INFO(AdjustFrame
);
254 UNWRAP_SCREEN_INFO(SwitchMode
);
255 UNWRAP_SCREEN_INFO(EnterVT
);
256 UNWRAP_SCREEN_INFO(LeaveVT
);
257 UNWRAP_SCREEN_INFO(FreeScreen
);
260 free((pointer
) pScreenPriv
);
261 xf86VGAarbiterLock(xf86ScreenToScrn(pScreen
));
262 val
= (*pScreen
->CloseScreen
) (pScreen
);
263 xf86VGAarbiterUnlock(xf86ScreenToScrn(pScreen
));
268 VGAarbiterBlockHandler(ScreenPtr pScreen
,
269 pointer pTimeout
, pointer pReadmask
)
271 SCREEN_PROLOG(BlockHandler
);
273 pScreen
->BlockHandler(pScreen
, pTimeout
, pReadmask
);
275 SCREEN_EPILOG(BlockHandler
, VGAarbiterBlockHandler
);
279 VGAarbiterWakeupHandler(ScreenPtr pScreen
, unsigned long result
,
282 SCREEN_PROLOG(WakeupHandler
);
284 pScreen
->WakeupHandler(pScreen
, result
, pReadmask
);
286 SCREEN_EPILOG(WakeupHandler
, VGAarbiterWakeupHandler
);
290 VGAarbiterGetImage(DrawablePtr pDrawable
,
291 int sx
, int sy
, int w
, int h
,
292 unsigned int format
, unsigned long planemask
, char *pdstLine
)
294 ScreenPtr pScreen
= pDrawable
->pScreen
;
296 SCREEN_PROLOG(GetImage
);
298 (*pScreen
->GetImage
) (pDrawable
, sx
, sy
, w
, h
, format
, planemask
, pdstLine
);
300 SCREEN_EPILOG(GetImage
, VGAarbiterGetImage
);
304 VGAarbiterGetSpans(DrawablePtr pDrawable
,
306 DDXPointPtr ppt
, int *pwidth
, int nspans
, char *pdstStart
)
308 ScreenPtr pScreen
= pDrawable
->pScreen
;
310 SCREEN_PROLOG(GetSpans
);
312 (*pScreen
->GetSpans
) (pDrawable
, wMax
, ppt
, pwidth
, nspans
, pdstStart
);
314 SCREEN_EPILOG(GetSpans
, VGAarbiterGetSpans
);
318 VGAarbiterSourceValidate(DrawablePtr pDrawable
,
319 int x
, int y
, int width
, int height
,
320 unsigned int subWindowMode
)
322 ScreenPtr pScreen
= pDrawable
->pScreen
;
324 SCREEN_PROLOG(SourceValidate
);
326 if (pScreen
->SourceValidate
)
327 (*pScreen
->SourceValidate
) (pDrawable
, x
, y
, width
, height
,
330 SCREEN_EPILOG(SourceValidate
, VGAarbiterSourceValidate
);
334 VGAarbiterCopyWindow(WindowPtr pWin
, DDXPointRec ptOldOrg
, RegionPtr prgnSrc
)
336 ScreenPtr pScreen
= pWin
->drawable
.pScreen
;
338 SCREEN_PROLOG(CopyWindow
);
340 (*pScreen
->CopyWindow
) (pWin
, ptOldOrg
, prgnSrc
);
342 SCREEN_EPILOG(CopyWindow
, VGAarbiterCopyWindow
);
346 VGAarbiterClearToBackground(WindowPtr pWin
,
347 int x
, int y
, int w
, int h
, Bool generateExposures
)
349 ScreenPtr pScreen
= pWin
->drawable
.pScreen
;
351 SCREEN_PROLOG(ClearToBackground
);
353 (*pScreen
->ClearToBackground
) (pWin
, x
, y
, w
, h
, generateExposures
);
355 SCREEN_EPILOG(ClearToBackground
, VGAarbiterClearToBackground
);
359 VGAarbiterCreatePixmap(ScreenPtr pScreen
, int w
, int h
, int depth
,
364 SCREEN_PROLOG(CreatePixmap
);
366 pPix
= (*pScreen
->CreatePixmap
) (pScreen
, w
, h
, depth
, usage_hint
);
368 SCREEN_EPILOG(CreatePixmap
, VGAarbiterCreatePixmap
);
374 VGAarbiterSaveScreen(ScreenPtr pScreen
, Bool unblank
)
378 SCREEN_PROLOG(SaveScreen
);
380 val
= (*pScreen
->SaveScreen
) (pScreen
, unblank
);
382 SCREEN_EPILOG(SaveScreen
, VGAarbiterSaveScreen
);
388 VGAarbiterStoreColors(ColormapPtr pmap
, int ndef
, xColorItem
* pdefs
)
390 ScreenPtr pScreen
= pmap
->pScreen
;
392 SCREEN_PROLOG(StoreColors
);
394 (*pScreen
->StoreColors
) (pmap
, ndef
, pdefs
);
396 SCREEN_EPILOG(StoreColors
, VGAarbiterStoreColors
);
400 VGAarbiterRecolorCursor(DeviceIntPtr pDev
,
401 ScreenPtr pScreen
, CursorPtr pCurs
, Bool displayed
)
403 SCREEN_PROLOG(RecolorCursor
);
405 (*pScreen
->RecolorCursor
) (pDev
, pScreen
, pCurs
, displayed
);
407 SCREEN_EPILOG(RecolorCursor
, VGAarbiterRecolorCursor
);
411 VGAarbiterRealizeCursor(DeviceIntPtr pDev
, ScreenPtr pScreen
, CursorPtr pCursor
)
415 SCREEN_PROLOG(RealizeCursor
);
417 val
= (*pScreen
->RealizeCursor
) (pDev
, pScreen
, pCursor
);
419 SCREEN_EPILOG(RealizeCursor
, VGAarbiterRealizeCursor
);
424 VGAarbiterUnrealizeCursor(DeviceIntPtr pDev
,
425 ScreenPtr pScreen
, CursorPtr pCursor
)
429 SCREEN_PROLOG(UnrealizeCursor
);
431 val
= (*pScreen
->UnrealizeCursor
) (pDev
, pScreen
, pCursor
);
433 SCREEN_EPILOG(UnrealizeCursor
, VGAarbiterUnrealizeCursor
);
438 VGAarbiterDisplayCursor(DeviceIntPtr pDev
, ScreenPtr pScreen
, CursorPtr pCursor
)
442 SCREEN_PROLOG(DisplayCursor
);
444 val
= (*pScreen
->DisplayCursor
) (pDev
, pScreen
, pCursor
);
446 SCREEN_EPILOG(DisplayCursor
, VGAarbiterDisplayCursor
);
451 VGAarbiterSetCursorPosition(DeviceIntPtr pDev
,
452 ScreenPtr pScreen
, int x
, int y
, Bool generateEvent
)
456 SCREEN_PROLOG(SetCursorPosition
);
458 val
= (*pScreen
->SetCursorPosition
) (pDev
, pScreen
, x
, y
, generateEvent
);
460 SCREEN_EPILOG(SetCursorPosition
, VGAarbiterSetCursorPosition
);
465 VGAarbiterAdjustFrame(ScrnInfoPtr pScrn
, int x
, int y
)
467 ScreenPtr pScreen
= xf86ScrnToScreen(pScrn
);
468 VGAarbiterScreenPtr pScreenPriv
=
469 (VGAarbiterScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
470 VGAarbiterScreenKey
);
473 (*pScreenPriv
->AdjustFrame
) (pScrn
, x
, y
);
478 VGAarbiterSwitchMode(ScrnInfoPtr pScrn
, DisplayModePtr mode
)
481 ScreenPtr pScreen
= xf86ScrnToScreen(pScrn
);
482 VGAarbiterScreenPtr pScreenPriv
=
483 (VGAarbiterScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
484 VGAarbiterScreenKey
);
487 val
= (*pScreenPriv
->SwitchMode
) (pScrn
, mode
);
493 VGAarbiterEnterVT(ScrnInfoPtr pScrn
)
496 ScreenPtr pScreen
= xf86ScrnToScreen(pScrn
);
497 VGAarbiterScreenPtr pScreenPriv
=
498 (VGAarbiterScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
499 VGAarbiterScreenKey
);
502 pScrn
->EnterVT
= pScreenPriv
->EnterVT
;
503 val
= (*pScrn
->EnterVT
) (pScrn
);
504 pScreenPriv
->EnterVT
= pScrn
->EnterVT
;
505 pScrn
->EnterVT
= VGAarbiterEnterVT
;
511 VGAarbiterLeaveVT(ScrnInfoPtr pScrn
)
513 ScreenPtr pScreen
= xf86ScrnToScreen(pScrn
);
514 VGAarbiterScreenPtr pScreenPriv
=
515 (VGAarbiterScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
516 VGAarbiterScreenKey
);
519 pScrn
->LeaveVT
= pScreenPriv
->LeaveVT
;
520 (*pScreenPriv
->LeaveVT
) (pScrn
);
521 pScreenPriv
->LeaveVT
= pScrn
->LeaveVT
;
522 pScrn
->LeaveVT
= VGAarbiterLeaveVT
;
527 VGAarbiterFreeScreen(ScrnInfoPtr pScrn
)
529 ScreenPtr pScreen
= xf86ScrnToScreen(pScrn
);
530 VGAarbiterScreenPtr pScreenPriv
=
531 (VGAarbiterScreenPtr
) dixLookupPrivate(&pScreen
->devPrivates
,
532 VGAarbiterScreenKey
);
535 (*pScreenPriv
->FreeScreen
) (pScrn
);
540 VGAarbiterCreateGC(GCPtr pGC
)
542 ScreenPtr pScreen
= pGC
->pScreen
;
543 VGAarbiterGCPtr pGCPriv
=
544 (VGAarbiterGCPtr
) dixLookupPrivate(&pGC
->devPrivates
, VGAarbiterGCKey
);
547 SCREEN_PROLOG(CreateGC
);
548 ret
= (*pScreen
->CreateGC
) (pGC
);
550 SCREEN_EPILOG(CreateGC
, VGAarbiterCreateGC
);
557 VGAarbiterValidateGC(GCPtr pGC
, unsigned long changes
, DrawablePtr pDraw
)
560 (*pGC
->funcs
->ValidateGC
) (pGC
, changes
, pDraw
);
565 VGAarbiterDestroyGC(GCPtr pGC
)
568 (*pGC
->funcs
->DestroyGC
) (pGC
);
573 VGAarbiterChangeGC(GCPtr pGC
, unsigned long mask
)
576 (*pGC
->funcs
->ChangeGC
) (pGC
, mask
);
581 VGAarbiterCopyGC(GCPtr pGCSrc
, unsigned long mask
, GCPtr pGCDst
)
584 (*pGCDst
->funcs
->CopyGC
) (pGCSrc
, mask
, pGCDst
);
589 VGAarbiterChangeClip(GCPtr pGC
, int type
, pointer pvalue
, int nrects
)
592 (*pGC
->funcs
->ChangeClip
) (pGC
, type
, pvalue
, nrects
);
597 VGAarbiterCopyClip(GCPtr pgcDst
, GCPtr pgcSrc
)
600 (*pgcDst
->funcs
->CopyClip
) (pgcDst
, pgcSrc
);
605 VGAarbiterDestroyClip(GCPtr pGC
)
608 (*pGC
->funcs
->DestroyClip
) (pGC
);
614 VGAarbiterFillSpans(DrawablePtr pDraw
,
617 DDXPointPtr pptInit
, int *pwidthInit
, int fSorted
)
619 ScreenPtr pScreen
= pGC
->pScreen
;
623 (*pGC
->ops
->FillSpans
) (pDraw
, pGC
, nInit
, pptInit
, pwidthInit
, fSorted
);
629 VGAarbiterSetSpans(DrawablePtr pDraw
,
632 register DDXPointPtr ppt
,
633 int *pwidth
, int nspans
, int fSorted
)
635 ScreenPtr pScreen
= pGC
->pScreen
;
639 (*pGC
->ops
->SetSpans
) (pDraw
, pGC
, pcharsrc
, ppt
, pwidth
, nspans
, fSorted
);
645 VGAarbiterPutImage(DrawablePtr pDraw
,
648 int x
, int y
, int w
, int h
,
649 int leftPad
, int format
, char *pImage
)
651 ScreenPtr pScreen
= pGC
->pScreen
;
655 (*pGC
->ops
->PutImage
) (pDraw
, pGC
, depth
, x
, y
, w
, h
,
656 leftPad
, format
, pImage
);
662 VGAarbiterCopyArea(DrawablePtr pSrc
,
666 int width
, int height
, int dstx
, int dsty
)
669 ScreenPtr pScreen
= pGC
->pScreen
;
673 ret
= (*pGC
->ops
->CopyArea
) (pSrc
, pDst
,
674 pGC
, srcx
, srcy
, width
, height
, dstx
, dsty
);
681 VGAarbiterCopyPlane(DrawablePtr pSrc
,
685 int width
, int height
,
686 int dstx
, int dsty
, unsigned long bitPlane
)
689 ScreenPtr pScreen
= pGC
->pScreen
;
693 ret
= (*pGC
->ops
->CopyPlane
) (pSrc
, pDst
, pGC
, srcx
, srcy
,
694 width
, height
, dstx
, dsty
, bitPlane
);
701 VGAarbiterPolyPoint(DrawablePtr pDraw
,
702 GCPtr pGC
, int mode
, int npt
, xPoint
* pptInit
)
704 ScreenPtr pScreen
= pGC
->pScreen
;
708 (*pGC
->ops
->PolyPoint
) (pDraw
, pGC
, mode
, npt
, pptInit
);
714 VGAarbiterPolylines(DrawablePtr pDraw
,
715 GCPtr pGC
, int mode
, int npt
, DDXPointPtr pptInit
)
717 ScreenPtr pScreen
= pGC
->pScreen
;
721 (*pGC
->ops
->Polylines
) (pDraw
, pGC
, mode
, npt
, pptInit
);
727 VGAarbiterPolySegment(DrawablePtr pDraw
, GCPtr pGC
, int nseg
, xSegment
* pSeg
)
729 ScreenPtr pScreen
= pGC
->pScreen
;
733 (*pGC
->ops
->PolySegment
) (pDraw
, pGC
, nseg
, pSeg
);
739 VGAarbiterPolyRectangle(DrawablePtr pDraw
,
740 GCPtr pGC
, int nRectsInit
, xRectangle
*pRectsInit
)
742 ScreenPtr pScreen
= pGC
->pScreen
;
746 (*pGC
->ops
->PolyRectangle
) (pDraw
, pGC
, nRectsInit
, pRectsInit
);
752 VGAarbiterPolyArc(DrawablePtr pDraw
, GCPtr pGC
, int narcs
, xArc
* parcs
)
754 ScreenPtr pScreen
= pGC
->pScreen
;
758 (*pGC
->ops
->PolyArc
) (pDraw
, pGC
, narcs
, parcs
);
764 VGAarbiterFillPolygon(DrawablePtr pDraw
,
766 int shape
, int mode
, int count
, DDXPointPtr ptsIn
)
768 ScreenPtr pScreen
= pGC
->pScreen
;
772 (*pGC
->ops
->FillPolygon
) (pDraw
, pGC
, shape
, mode
, count
, ptsIn
);
778 VGAarbiterPolyFillRect(DrawablePtr pDraw
,
779 GCPtr pGC
, int nrectFill
, xRectangle
*prectInit
)
781 ScreenPtr pScreen
= pGC
->pScreen
;
785 (*pGC
->ops
->PolyFillRect
) (pDraw
, pGC
, nrectFill
, prectInit
);
791 VGAarbiterPolyFillArc(DrawablePtr pDraw
, GCPtr pGC
, int narcs
, xArc
* parcs
)
793 ScreenPtr pScreen
= pGC
->pScreen
;
797 (*pGC
->ops
->PolyFillArc
) (pDraw
, pGC
, narcs
, parcs
);
803 VGAarbiterPolyText8(DrawablePtr pDraw
,
804 GCPtr pGC
, int x
, int y
, int count
, char *chars
)
807 ScreenPtr pScreen
= pGC
->pScreen
;
811 ret
= (*pGC
->ops
->PolyText8
) (pDraw
, pGC
, x
, y
, count
, chars
);
818 VGAarbiterPolyText16(DrawablePtr pDraw
,
819 GCPtr pGC
, int x
, int y
, int count
, unsigned short *chars
)
822 ScreenPtr pScreen
= pGC
->pScreen
;
826 ret
= (*pGC
->ops
->PolyText16
) (pDraw
, pGC
, x
, y
, count
, chars
);
833 VGAarbiterImageText8(DrawablePtr pDraw
,
834 GCPtr pGC
, int x
, int y
, int count
, char *chars
)
836 ScreenPtr pScreen
= pGC
->pScreen
;
840 (*pGC
->ops
->ImageText8
) (pDraw
, pGC
, x
, y
, count
, chars
);
846 VGAarbiterImageText16(DrawablePtr pDraw
,
847 GCPtr pGC
, int x
, int y
, int count
, unsigned short *chars
)
849 ScreenPtr pScreen
= pGC
->pScreen
;
853 (*pGC
->ops
->ImageText16
) (pDraw
, pGC
, x
, y
, count
, chars
);
859 VGAarbiterImageGlyphBlt(DrawablePtr pDraw
,
861 int xInit
, int yInit
,
863 CharInfoPtr
* ppci
, pointer pglyphBase
)
865 ScreenPtr pScreen
= pGC
->pScreen
;
869 (*pGC
->ops
->ImageGlyphBlt
) (pDraw
, pGC
, xInit
, yInit
,
870 nglyph
, ppci
, pglyphBase
);
876 VGAarbiterPolyGlyphBlt(DrawablePtr pDraw
,
878 int xInit
, int yInit
,
880 CharInfoPtr
* ppci
, pointer pglyphBase
)
882 ScreenPtr pScreen
= pGC
->pScreen
;
886 (*pGC
->ops
->PolyGlyphBlt
) (pDraw
, pGC
, xInit
, yInit
,
887 nglyph
, ppci
, pglyphBase
);
893 VGAarbiterPushPixels(GCPtr pGC
,
895 DrawablePtr pDraw
, int dx
, int dy
, int xOrg
, int yOrg
)
897 ScreenPtr pScreen
= pGC
->pScreen
;
901 (*pGC
->ops
->PushPixels
) (pGC
, pBitMap
, pDraw
, dx
, dy
, xOrg
, yOrg
);
908 VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev
, ScreenPtr pScreen
,
915 val
= PointPriv
->spriteFuncs
->RealizeCursor(pDev
, pScreen
, pCur
);
922 VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev
, ScreenPtr pScreen
,
929 val
= PointPriv
->spriteFuncs
->UnrealizeCursor(pDev
, pScreen
, pCur
);
936 VGAarbiterSpriteSetCursor(DeviceIntPtr pDev
, ScreenPtr pScreen
, CursorPtr pCur
,
941 PointPriv
->spriteFuncs
->SetCursor(pDev
, pScreen
, pCur
, x
, y
);
947 VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev
, ScreenPtr pScreen
, int x
, int y
)
951 PointPriv
->spriteFuncs
->MoveCursor(pDev
, pScreen
, x
, y
);
957 VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev
, ScreenPtr pScreen
)
963 val
= PointPriv
->spriteFuncs
->DeviceCursorInitialize(pDev
, pScreen
);
970 VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev
, ScreenPtr pScreen
)
974 PointPriv
->spriteFuncs
->DeviceCursorCleanup(pDev
, pScreen
);
980 VGAarbiterComposite(CARD8 op
, PicturePtr pSrc
, PicturePtr pMask
,
981 PicturePtr pDst
, INT16 xSrc
, INT16 ySrc
, INT16 xMask
,
982 INT16 yMask
, INT16 xDst
, INT16 yDst
, CARD16 width
,
985 ScreenPtr pScreen
= pDst
->pDrawable
->pScreen
;
986 PictureScreenPtr ps
= GetPictureScreen(pScreen
);
988 PICTURE_PROLOGUE(Composite
);
991 (*ps
->Composite
) (op
, pSrc
, pMask
, pDst
, xSrc
, ySrc
, xMask
, yMask
, xDst
,
992 yDst
, width
, height
);
994 PICTURE_EPILOGUE(Composite
, VGAarbiterComposite
);
998 VGAarbiterGlyphs(CARD8 op
, PicturePtr pSrc
, PicturePtr pDst
,
999 PictFormatPtr maskFormat
, INT16 xSrc
, INT16 ySrc
, int nlist
,
1000 GlyphListPtr list
, GlyphPtr
* glyphs
)
1002 ScreenPtr pScreen
= pDst
->pDrawable
->pScreen
;
1003 PictureScreenPtr ps
= GetPictureScreen(pScreen
);
1005 PICTURE_PROLOGUE(Glyphs
);
1008 (*ps
->Glyphs
) (op
, pSrc
, pDst
, maskFormat
, xSrc
, ySrc
, nlist
, list
, glyphs
);
1010 PICTURE_EPILOGUE(Glyphs
, VGAarbiterGlyphs
);
1014 VGAarbiterCompositeRects(CARD8 op
, PicturePtr pDst
, xRenderColor
* color
,
1015 int nRect
, xRectangle
*rects
)
1017 ScreenPtr pScreen
= pDst
->pDrawable
->pScreen
;
1018 PictureScreenPtr ps
= GetPictureScreen(pScreen
);
1020 PICTURE_PROLOGUE(CompositeRects
);
1023 (*ps
->CompositeRects
) (op
, pDst
, color
, nRect
, rects
);
1025 PICTURE_EPILOGUE(CompositeRects
, VGAarbiterCompositeRects
);