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 = xf86Screens[pScreen->myNum];
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 = xf86Screens[pScreen->myNum];
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(int i, ScreenPtr pScreen)
227 ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
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(xf86Screens[i]);
262 val = (*pScreen->CloseScreen) (i, pScreen);
263 xf86VGAarbiterUnlock(xf86Screens[i]);
268 VGAarbiterBlockHandler(int i,
269 pointer blockData, pointer pTimeout, pointer pReadmask)
271 ScreenPtr pScreen = screenInfo.screens[i];
273 SCREEN_PROLOG(BlockHandler);
275 pScreen->BlockHandler(i, blockData, pTimeout, pReadmask);
277 SCREEN_EPILOG(BlockHandler, VGAarbiterBlockHandler);
281 VGAarbiterWakeupHandler(int i, pointer blockData, unsigned long result,
284 ScreenPtr pScreen = screenInfo.screens[i];
286 SCREEN_PROLOG(WakeupHandler);
288 pScreen->WakeupHandler(i, blockData, result, pReadmask);
290 SCREEN_EPILOG(WakeupHandler, VGAarbiterWakeupHandler);
294 VGAarbiterGetImage(DrawablePtr pDrawable,
295 int sx, int sy, int w, int h,
296 unsigned int format, unsigned long planemask, char *pdstLine)
298 ScreenPtr pScreen = pDrawable->pScreen;
300 SCREEN_PROLOG(GetImage);
301 // if (xf86Screens[pScreen->myNum]->vtSema) {
304 (*pScreen->GetImage) (pDrawable, sx, sy, w, h, format, planemask, pdstLine);
306 SCREEN_EPILOG(GetImage, VGAarbiterGetImage);
310 VGAarbiterGetSpans(DrawablePtr pDrawable,
312 DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)
314 ScreenPtr pScreen = pDrawable->pScreen;
316 SCREEN_PROLOG(GetSpans);
318 (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
320 SCREEN_EPILOG(GetSpans, VGAarbiterGetSpans);
324 VGAarbiterSourceValidate(DrawablePtr pDrawable,
325 int x, int y, int width, int height,
326 unsigned int subWindowMode)
328 ScreenPtr pScreen = pDrawable->pScreen;
330 SCREEN_PROLOG(SourceValidate);
332 if (pScreen->SourceValidate)
333 (*pScreen->SourceValidate) (pDrawable, x, y, width, height,
336 SCREEN_EPILOG(SourceValidate, VGAarbiterSourceValidate);
340 VGAarbiterCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
342 ScreenPtr pScreen = pWin->drawable.pScreen;
344 SCREEN_PROLOG(CopyWindow);
346 (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
348 SCREEN_EPILOG(CopyWindow, VGAarbiterCopyWindow);
352 VGAarbiterClearToBackground(WindowPtr pWin,
353 int x, int y, int w, int h, Bool generateExposures)
355 ScreenPtr pScreen = pWin->drawable.pScreen;
357 SCREEN_PROLOG(ClearToBackground);
359 (*pScreen->ClearToBackground) (pWin, x, y, w, h, generateExposures);
361 SCREEN_EPILOG(ClearToBackground, VGAarbiterClearToBackground);
365 VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
370 SCREEN_PROLOG(CreatePixmap);
372 pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
374 SCREEN_EPILOG(CreatePixmap, VGAarbiterCreatePixmap);
380 VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank)
384 SCREEN_PROLOG(SaveScreen);
386 val = (*pScreen->SaveScreen) (pScreen, unblank);
388 SCREEN_EPILOG(SaveScreen, VGAarbiterSaveScreen);
394 VGAarbiterStoreColors(ColormapPtr pmap, int ndef, xColorItem * pdefs)
396 ScreenPtr pScreen = pmap->pScreen;
398 SCREEN_PROLOG(StoreColors);
400 (*pScreen->StoreColors) (pmap, ndef, pdefs);
402 SCREEN_EPILOG(StoreColors, VGAarbiterStoreColors);
406 VGAarbiterRecolorCursor(DeviceIntPtr pDev,
407 ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
409 SCREEN_PROLOG(RecolorCursor);
411 (*pScreen->RecolorCursor) (pDev, pScreen, pCurs, displayed);
413 SCREEN_EPILOG(RecolorCursor, VGAarbiterRecolorCursor);
417 VGAarbiterRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
421 SCREEN_PROLOG(RealizeCursor);
423 val = (*pScreen->RealizeCursor) (pDev, pScreen, pCursor);
425 SCREEN_EPILOG(RealizeCursor, VGAarbiterRealizeCursor);
430 VGAarbiterUnrealizeCursor(DeviceIntPtr pDev,
431 ScreenPtr pScreen, CursorPtr pCursor)
435 SCREEN_PROLOG(UnrealizeCursor);
437 val = (*pScreen->UnrealizeCursor) (pDev, pScreen, pCursor);
439 SCREEN_EPILOG(UnrealizeCursor, VGAarbiterUnrealizeCursor);
444 VGAarbiterDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
448 SCREEN_PROLOG(DisplayCursor);
450 val = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
452 SCREEN_EPILOG(DisplayCursor, VGAarbiterDisplayCursor);
457 VGAarbiterSetCursorPosition(DeviceIntPtr pDev,
458 ScreenPtr pScreen, int x, int y, Bool generateEvent)
462 SCREEN_PROLOG(SetCursorPosition);
464 val = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent);
466 SCREEN_EPILOG(SetCursorPosition, VGAarbiterSetCursorPosition);
471 VGAarbiterAdjustFrame(int index, int x, int y, int flags)
473 ScreenPtr pScreen = screenInfo.screens[index];
474 VGAarbiterScreenPtr pScreenPriv =
475 (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
476 VGAarbiterScreenKey);
479 (*pScreenPriv->AdjustFrame) (index, x, y, flags);
484 VGAarbiterSwitchMode(int index, DisplayModePtr mode, int flags)
487 ScreenPtr pScreen = screenInfo.screens[index];
488 VGAarbiterScreenPtr pScreenPriv =
489 (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
490 VGAarbiterScreenKey);
493 val = (*pScreenPriv->SwitchMode) (index, mode, flags);
499 VGAarbiterEnterVT(int index, int flags)
502 ScrnInfoPtr pScrn = xf86Screens[index];
503 ScreenPtr pScreen = screenInfo.screens[index];
504 VGAarbiterScreenPtr pScreenPriv =
505 (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
506 VGAarbiterScreenKey);
509 pScrn->EnterVT = pScreenPriv->EnterVT;
510 val = (*pScrn->EnterVT) (index, flags);
511 pScreenPriv->EnterVT = pScrn->EnterVT;
512 pScrn->EnterVT = VGAarbiterEnterVT;
518 VGAarbiterLeaveVT(int index, int flags)
520 ScrnInfoPtr pScrn = xf86Screens[index];
521 ScreenPtr pScreen = screenInfo.screens[index];
522 VGAarbiterScreenPtr pScreenPriv =
523 (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
524 VGAarbiterScreenKey);
527 pScrn->LeaveVT = pScreenPriv->LeaveVT;
528 (*pScreenPriv->LeaveVT) (index, flags);
529 pScreenPriv->LeaveVT = pScrn->LeaveVT;
530 pScrn->LeaveVT = VGAarbiterLeaveVT;
535 VGAarbiterFreeScreen(int index, int flags)
537 ScreenPtr pScreen = screenInfo.screens[index];
538 VGAarbiterScreenPtr pScreenPriv =
539 (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
540 VGAarbiterScreenKey);
543 (*pScreenPriv->FreeScreen) (index, flags);
548 VGAarbiterCreateGC(GCPtr pGC)
550 ScreenPtr pScreen = pGC->pScreen;
551 VGAarbiterGCPtr pGCPriv =
552 (VGAarbiterGCPtr) dixLookupPrivate(&pGC->devPrivates, VGAarbiterGCKey);
555 SCREEN_PROLOG(CreateGC);
556 ret = (*pScreen->CreateGC) (pGC);
558 SCREEN_EPILOG(CreateGC, VGAarbiterCreateGC);
565 VGAarbiterValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
568 (*pGC->funcs->ValidateGC) (pGC, changes, pDraw);
573 VGAarbiterDestroyGC(GCPtr pGC)
576 (*pGC->funcs->DestroyGC) (pGC);
581 VGAarbiterChangeGC(GCPtr pGC, unsigned long mask)
584 (*pGC->funcs->ChangeGC) (pGC, mask);
589 VGAarbiterCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst)
592 (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
597 VGAarbiterChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
600 (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
605 VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
608 (*pgcDst->funcs->CopyClip) (pgcDst, pgcSrc);
613 VGAarbiterDestroyClip(GCPtr pGC)
616 (*pGC->funcs->DestroyClip) (pGC);
622 VGAarbiterFillSpans(DrawablePtr pDraw,
625 DDXPointPtr pptInit, int *pwidthInit, int fSorted)
627 ScreenPtr pScreen = pGC->pScreen;
631 (*pGC->ops->FillSpans) (pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
637 VGAarbiterSetSpans(DrawablePtr pDraw,
640 register DDXPointPtr ppt,
641 int *pwidth, int nspans, int fSorted)
643 ScreenPtr pScreen = pGC->pScreen;
647 (*pGC->ops->SetSpans) (pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
653 VGAarbiterPutImage(DrawablePtr pDraw,
656 int x, int y, int w, int h,
657 int leftPad, int format, char *pImage)
659 ScreenPtr pScreen = pGC->pScreen;
663 (*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h,
664 leftPad, format, pImage);
670 VGAarbiterCopyArea(DrawablePtr pSrc,
674 int width, int height, int dstx, int dsty)
677 ScreenPtr pScreen = pGC->pScreen;
681 ret = (*pGC->ops->CopyArea) (pSrc, pDst,
682 pGC, srcx, srcy, width, height, dstx, dsty);
689 VGAarbiterCopyPlane(DrawablePtr pSrc,
693 int width, int height,
694 int dstx, int dsty, unsigned long bitPlane)
697 ScreenPtr pScreen = pGC->pScreen;
701 ret = (*pGC->ops->CopyPlane) (pSrc, pDst, pGC, srcx, srcy,
702 width, height, dstx, dsty, bitPlane);
709 VGAarbiterPolyPoint(DrawablePtr pDraw,
710 GCPtr pGC, int mode, int npt, xPoint * pptInit)
712 ScreenPtr pScreen = pGC->pScreen;
716 (*pGC->ops->PolyPoint) (pDraw, pGC, mode, npt, pptInit);
722 VGAarbiterPolylines(DrawablePtr pDraw,
723 GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)
725 ScreenPtr pScreen = pGC->pScreen;
729 (*pGC->ops->Polylines) (pDraw, pGC, mode, npt, pptInit);
735 VGAarbiterPolySegment(DrawablePtr pDraw, GCPtr pGC, int nseg, xSegment * pSeg)
737 ScreenPtr pScreen = pGC->pScreen;
741 (*pGC->ops->PolySegment) (pDraw, pGC, nseg, pSeg);
747 VGAarbiterPolyRectangle(DrawablePtr pDraw,
748 GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
750 ScreenPtr pScreen = pGC->pScreen;
754 (*pGC->ops->PolyRectangle) (pDraw, pGC, nRectsInit, pRectsInit);
760 VGAarbiterPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
762 ScreenPtr pScreen = pGC->pScreen;
766 (*pGC->ops->PolyArc) (pDraw, pGC, narcs, parcs);
772 VGAarbiterFillPolygon(DrawablePtr pDraw,
774 int shape, int mode, int count, DDXPointPtr ptsIn)
776 ScreenPtr pScreen = pGC->pScreen;
780 (*pGC->ops->FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
786 VGAarbiterPolyFillRect(DrawablePtr pDraw,
787 GCPtr pGC, int nrectFill, xRectangle *prectInit)
789 ScreenPtr pScreen = pGC->pScreen;
793 (*pGC->ops->PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
799 VGAarbiterPolyFillArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
801 ScreenPtr pScreen = pGC->pScreen;
805 (*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, parcs);
811 VGAarbiterPolyText8(DrawablePtr pDraw,
812 GCPtr pGC, int x, int y, int count, char *chars)
815 ScreenPtr pScreen = pGC->pScreen;
819 ret = (*pGC->ops->PolyText8) (pDraw, pGC, x, y, count, chars);
826 VGAarbiterPolyText16(DrawablePtr pDraw,
827 GCPtr pGC, int x, int y, int count, unsigned short *chars)
830 ScreenPtr pScreen = pGC->pScreen;
834 ret = (*pGC->ops->PolyText16) (pDraw, pGC, x, y, count, chars);
841 VGAarbiterImageText8(DrawablePtr pDraw,
842 GCPtr pGC, int x, int y, int count, char *chars)
844 ScreenPtr pScreen = pGC->pScreen;
848 (*pGC->ops->ImageText8) (pDraw, pGC, x, y, count, chars);
854 VGAarbiterImageText16(DrawablePtr pDraw,
855 GCPtr pGC, int x, int y, int count, unsigned short *chars)
857 ScreenPtr pScreen = pGC->pScreen;
861 (*pGC->ops->ImageText16) (pDraw, pGC, x, y, count, chars);
867 VGAarbiterImageGlyphBlt(DrawablePtr pDraw,
869 int xInit, int yInit,
871 CharInfoPtr * ppci, pointer pglyphBase)
873 ScreenPtr pScreen = pGC->pScreen;
877 (*pGC->ops->ImageGlyphBlt) (pDraw, pGC, xInit, yInit,
878 nglyph, ppci, pglyphBase);
884 VGAarbiterPolyGlyphBlt(DrawablePtr pDraw,
886 int xInit, int yInit,
888 CharInfoPtr * ppci, pointer pglyphBase)
890 ScreenPtr pScreen = pGC->pScreen;
894 (*pGC->ops->PolyGlyphBlt) (pDraw, pGC, xInit, yInit,
895 nglyph, ppci, pglyphBase);
901 VGAarbiterPushPixels(GCPtr pGC,
903 DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
905 ScreenPtr pScreen = pGC->pScreen;
909 (*pGC->ops->PushPixels) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
916 VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
923 val = PointPriv->spriteFuncs->RealizeCursor(pDev, pScreen, pCur);
930 VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
937 val = PointPriv->spriteFuncs->UnrealizeCursor(pDev, pScreen, pCur);
944 VGAarbiterSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur,
949 PointPriv->spriteFuncs->SetCursor(pDev, pScreen, pCur, x, y);
955 VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
959 PointPriv->spriteFuncs->MoveCursor(pDev, pScreen, x, y);
965 VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
971 val = PointPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
978 VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
982 PointPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
988 VGAarbiterComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
989 PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
990 INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width,
993 ScreenPtr pScreen = pDst->pDrawable->pScreen;
994 PictureScreenPtr ps = GetPictureScreen(pScreen);
996 PICTURE_PROLOGUE(Composite);
999 (*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst,
1000 yDst, width, height);
1002 PICTURE_EPILOGUE(Composite, VGAarbiterComposite);
1006 VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
1007 PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
1008 GlyphListPtr list, GlyphPtr * glyphs)
1010 ScreenPtr pScreen = pDst->pDrawable->pScreen;
1011 PictureScreenPtr ps = GetPictureScreen(pScreen);
1013 PICTURE_PROLOGUE(Glyphs);
1016 (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
1018 PICTURE_EPILOGUE(Glyphs, VGAarbiterGlyphs);
1022 VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor * color,
1023 int nRect, xRectangle *rects)
1025 ScreenPtr pScreen = pDst->pDrawable->pScreen;
1026 PictureScreenPtr ps = GetPictureScreen(pScreen);
1028 PICTURE_PROLOGUE(CompositeRects);
1031 (*ps->CompositeRects) (op, pDst, color, nRect, rects);
1033 PICTURE_EPILOGUE(CompositeRects, VGAarbiterCompositeRects);