diff options
author | Dave Airlie <airlied@redhat.com> | 2011-08-15 16:48:03 +0100 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-08-15 16:52:25 +0100 |
commit | 8018c229d75190e0a16f0b0965ae27d90d0a4aaa (patch) | |
tree | 68964cb4480765d438ed2c09515cd6acd1a67f75 | |
parent | 91b553fe4d8b81132742f656714b765197b5d652 (diff) |
render: start fixing up impedpict code for multiple screens
-rw-r--r-- | drv/impedpict.c | 187 |
1 files changed, 109 insertions, 78 deletions
diff --git a/drv/impedpict.c b/drv/impedpict.c index 19c30ac2e..a425438fe 100644 --- a/drv/impedpict.c +++ b/drv/impedpict.c @@ -49,14 +49,17 @@ static void SyncDrvPicture(PicturePtr pPicture, DrvPicturePtr pDrvPicture, } -static Bool CreateSourcePict(PicturePtr pPicture, PictureScreenPtr ps) +static Bool CreateSourcePict(PicturePtr pPicture, PictureScreenPtr ps, int num_gpu) { impedPictPrivPtr imped_pict = impedGetPict(pPicture); + int i; - if (!imped_pict->gpu[0]) { - imped_pict->gpu[0] = DrvCreatePicture(NULL, pPicture->pFormat, 0, NULL); - if (!imped_pict->gpu[0]) - return FALSE; + for (i = 0; i < num_gpu; i++) { + if (!imped_pict->gpu[i]) { + imped_pict->gpu[i] = DrvCreatePicture(NULL, pPicture->pFormat, 0, NULL); + if (!imped_pict->gpu[i]) + return FALSE; + } } return TRUE; } @@ -69,17 +72,20 @@ impedCreatePicture (PicturePtr pPicture) PixmapPtr pPixmap; impedPictPrivPtr imped_pict = impedGetPict(pPicture); impedPixmapPrivPtr imped_pixmap; + impedScreenPrivPtr imped_screen = impedGetScreen(pPicture->pDrawable->pScreen); ps = GetPictureScreen(pPicture->pDrawable->pScreen); pPixmap = GetDrawablePixmap(pPicture->pDrawable); imped_pixmap = impedGetPixmap(pPixmap); - imped_pict->gpu[0] = DrvCreatePicture(imped_pixmap->gpu[0], pPicture->pFormat, - 0, 0); - if (!imped_pict->gpu[0]) - ErrorF("no gpu 0 picture\n"); - SyncDrvPicture(pPicture, imped_pict->gpu[0], 0); + for (i = 0; i < imped_screen->num_gpu; i++) { + imped_pict->gpu[i] = DrvCreatePicture(imped_pixmap->gpu[i], pPicture->pFormat, + 0, 0); + if (!imped_pict->gpu[i]) + ErrorF("no gpu %d picture\n", i); + SyncDrvPicture(pPicture, imped_pict->gpu[i], i); + } return 0; } @@ -103,11 +109,11 @@ impedComposite (CARD8 op, ScreenPtr pScreen = pDst->pDrawable->pScreen; PictureScreenPtr ps = GetPictureScreen(pDst); impedScreenPrivPtr imped_screen = impedGetScreen(pScreen); - DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); impedPictPrivPtr imped_src; impedPictPrivPtr imped_mask; impedPictPrivPtr imped_dst; impedPixmapPrivPtr imped_src_pixmap, imped_mask_pixmap, imped_dst_pixmap; + int i; if (pSrc->pDrawable) { pSrcPixmap = GetDrawablePixmap(pSrc->pDrawable); @@ -115,7 +121,7 @@ impedComposite (CARD8 op, } else { Bool ret; - ret = CreateSourcePict(pSrc, ps); + ret = CreateSourcePict(pSrc, ps, imped_screen->num_gpu); if (!ret) return; } @@ -150,24 +156,29 @@ impedComposite (CARD8 op, xDst += x_off; yDst += y_off; - pDrvSrc = imped_src->gpu[0]; - SyncDrvPicture(pSrc, pDrvSrc, 0); - if (pMask) { - pDrvMask = imped_mask->gpu[0]; - SyncDrvPicture(pMask, pDrvMask, 0); + for (i = 0; i < imped_screen->num_gpu; i++) { + DrvPictureScreenPtr drv_ps; + + pDrvSrc = imped_src->gpu[i]; + SyncDrvPicture(pSrc, pDrvSrc, i); + if (pMask) { + pDrvMask = imped_mask->gpu[i]; + SyncDrvPicture(pMask, pDrvMask, i); + } + pDrvDst = imped_dst->gpu[i]; + SyncDrvPicture(pDst, pDrvDst, i); + + if (pSrcPixmap) + pDrvSrc->pPixmap = imped_src_pixmap->gpu[i]; + if (pDrvMask) + pDrvMask->pPixmap = imped_mask_pixmap->gpu[i]; + pDrvDst->pPixmap = imped_dst_pixmap->gpu[i]; + + drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + drv_ps->Composite(op, pDrvSrc, pDrvMask, pDrvDst, + xSrc, ySrc, xMask, yMask, + xDst, yDst, width, height); } - pDrvDst = imped_dst->gpu[0]; - SyncDrvPicture(pDst, pDrvDst, 0); - - if (pSrcPixmap) - pDrvSrc->pPixmap = imped_src_pixmap->gpu[0]; - if (pDrvMask) - pDrvMask->pPixmap = imped_mask_pixmap->gpu[0]; - pDrvDst->pPixmap = imped_dst_pixmap->gpu[0]; - - drv_ps->Composite(op, pDrvSrc, pDrvMask, pDrvDst, - xSrc, ySrc, xMask, yMask, - xDst, yDst, width, height); } static void @@ -182,11 +193,14 @@ impedRasterizeTrapezoid (PicturePtr pPicture, DrvPicturePtr pDrvPicture; impedScreenPrivPtr imped_screen = impedGetScreen(pPicture->pDrawable->pScreen); DrvPictureScreenPtr drv_ps; + int i; - pDrvPicture = imped_picture->gpu[0]; - pDrvPicture->pPixmap = imped_pixmap->gpu[0]; - drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); - drv_ps->RasterizeTrapezoid(pDrvPicture, trap, x_off, y_off); + for (i = 0; i < imped_screen->num_gpu; i++) { + pDrvPicture = imped_picture->gpu[i]; + pDrvPicture->pPixmap = imped_pixmap->gpu[i]; + drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + drv_ps->RasterizeTrapezoid(pDrvPicture, trap, x_off, y_off); + } } static void @@ -202,10 +216,13 @@ impedAddTraps (PicturePtr pPicture, DrvPicturePtr pDrvPicture; impedPixmapPrivPtr imped_pixmap = impedGetPixmap(pPixmap); impedPictPrivPtr imped_picture = impedGetPict(pPicture); - pDrvPicture = imped_picture->gpu[0]; - pDrvPicture->pPixmap = imped_pixmap->gpu[0]; - drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); - drv_ps->AddTraps(pDrvPicture, x_off, y_off, ntrap, traps); + int i; + for (i = 0; i < imped_screen->num_gpu; i++) { + pDrvPicture = imped_picture->gpu[i]; + pDrvPicture->pPixmap = imped_pixmap->gpu[i]; + drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + drv_ps->AddTraps(pDrvPicture, x_off, y_off, ntrap, traps); + } } static void @@ -219,10 +236,8 @@ impedTrapezoids (CARD8 op, xTrapezoid *traps) { impedScreenPrivPtr imped_screen = impedGetScreen(pDst->pDrawable->pScreen); - DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); PictureScreenPtr ps = GetPictureScreen(pDst->pDrawable->pScreen); PixmapPtr pSrcPixmap = NULL, pDstPixmap; - DrvPicturePtr pDrvSrc = NULL, pDrvDst; impedPictPrivPtr imped_src = NULL, imped_dst; impedPixmapPrivPtr imped_src_pixmap = NULL, imped_dst_pixmap; int i; @@ -237,7 +252,7 @@ impedTrapezoids (CARD8 op, xSrc += x_off; ySrc += y_off; } else { - ret = CreateSourcePict(pSrc, ps); + ret = CreateSourcePict(pSrc, ps, imped_screen->num_gpu); if (!ret) return; } @@ -261,20 +276,25 @@ impedTrapezoids (CARD8 op, } } - if (pSrc) { - imped_src = impedGetPict(pSrc); - pDrvSrc = imped_src->gpu[0]; - if (imped_src_pixmap) - pDrvSrc->pPixmap = imped_src_pixmap->gpu[0]; - if (pDrvSrc) - SyncDrvPicture(pSrc, pDrvSrc, 0); - } - imped_dst = impedGetPict(pDst); - pDrvDst = imped_dst->gpu[0]; - pDrvDst->pPixmap = imped_dst_pixmap->gpu[0]; - SyncDrvPicture(pDst, pDrvDst, 0); + for (i = 0; i < imped_screen->num_gpu; i++) { + DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + DrvPicturePtr pDrvSrc = NULL, pDrvDst; + + if (pSrc) { + imped_src = impedGetPict(pSrc); + pDrvSrc = imped_src->gpu[i]; + if (imped_src_pixmap) + pDrvSrc->pPixmap = imped_src_pixmap->gpu[i]; + if (pDrvSrc) + SyncDrvPicture(pSrc, pDrvSrc, i); + } + imped_dst = impedGetPict(pDst); + pDrvDst = imped_dst->gpu[i]; + pDrvDst->pPixmap = imped_dst_pixmap->gpu[i]; + SyncDrvPicture(pDst, pDrvDst, i); - drv_ps->Trapezoids(op, pDrvSrc, pDrvDst, maskFormat, xSrc, ySrc, ntrap, traps); + drv_ps->Trapezoids(op, pDrvSrc, pDrvDst, maskFormat, xSrc, ySrc, ntrap, traps); + } } static void @@ -285,19 +305,25 @@ impedAddTriangles (PicturePtr pPicture, xTriangle *tris) { impedScreenPrivPtr imped_screen = impedGetScreen(pPicture->pDrawable->pScreen); - DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); impedPictPrivPtr imped_picture = impedGetPict(pPicture); int x_off, y_off; PixmapPtr pPixmap = GetDrawablePixmap(pPicture->pDrawable); impedPixmapPrivPtr imped_pixmap = impedGetPixmap(pPixmap); - DrvPicturePtr pDrvPicture; + int i; impedGetDrawableDeltas(pPicture->pDrawable, pPixmap, &x_off, &y_off); x_off_orig += x_off; y_off_orig += y_off; - pDrvPicture = imped_picture->gpu[0]; - pDrvPicture->pPixmap = imped_pixmap->gpu[0]; - drv_ps->AddTriangles(pDrvPicture, x_off_orig, y_off_orig, ntri, tris); + + for (i = 0; i < imped_screen->num_gpu; i++) { + DrvPictureScreenPtr drv_ps; + DrvPicturePtr pDrvPicture; + + pDrvPicture = imped_picture->gpu[i]; + pDrvPicture->pPixmap = imped_pixmap->gpu[i]; + drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + drv_ps->AddTriangles(pDrvPicture, x_off_orig, y_off_orig, ntri, tris); + } } static void @@ -311,10 +337,8 @@ impedTriangles (CARD8 op, xTriangle *tris) { impedScreenPrivPtr imped_screen = impedGetScreen(pDst->pDrawable->pScreen); - DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); int x_off, y_off, i; PixmapPtr pSrcPixmap, pDstPixmap; - DrvPicturePtr pDrvSrc = NULL, pDrvDst; impedPixmapPrivPtr imped_src_pixmap, imped_dst_pixmap; impedPictPrivPtr imped_src, imped_dst; @@ -340,14 +364,19 @@ impedTriangles (CARD8 op, } } - pDrvSrc = imped_src->gpu[0]; - pDrvSrc->pPixmap = imped_src_pixmap->gpu[0]; - pDrvDst = imped_dst->gpu[0]; - pDrvDst->pPixmap = imped_dst_pixmap->gpu[0]; + for (i = 0; i < imped_screen->num_gpu; i++) { + DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + DrvPicturePtr pDrvSrc = NULL, pDrvDst; - SyncDrvPicture(pSrc, pDrvSrc, 0); - SyncDrvPicture(pDst, pDrvDst, 0); - drv_ps->Triangles(op, pDrvSrc, pDrvDst, maskFormat, xSrc, ySrc, ntris, tris); + pDrvSrc = imped_src->gpu[i]; + pDrvSrc->pPixmap = imped_src_pixmap->gpu[i]; + pDrvDst = imped_dst->gpu[i]; + pDrvDst->pPixmap = imped_dst_pixmap->gpu[i]; + + SyncDrvPicture(pSrc, pDrvSrc, i); + SyncDrvPicture(pDst, pDrvDst, i); + drv_ps->Triangles(op, pDrvSrc, pDrvDst, maskFormat, xSrc, ySrc, ntris, tris); + } } static void @@ -362,12 +391,11 @@ impedGlyphs(CARD8 op, GlyphPtr *glyphs) { impedScreenPrivPtr imped_screen = impedGetScreen(pDst->pDrawable->pScreen); - DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[0]); PixmapPtr pSrcPixmap, pDstPixmap; int x_off, y_off; - DrvPicturePtr pDrvSrc = NULL, pDrvDst; impedPixmapPrivPtr imped_src_pixmap, imped_dst_pixmap; impedPictPrivPtr imped_src, imped_dst; + int i; imped_src = impedGetPict(pSrc); pSrcPixmap = GetDrawablePixmap(pSrc->pDrawable); @@ -381,15 +409,18 @@ impedGlyphs(CARD8 op, imped_dst_pixmap = impedGetPixmap(pDstPixmap); impedGetDrawableDeltas(pDst->pDrawable, pDstPixmap, &x_off, &y_off); - pDrvSrc = imped_src->gpu[0]; - pDrvSrc->pPixmap = imped_src_pixmap->gpu[0]; - pDrvDst = imped_dst->gpu[0]; - pDrvDst->pPixmap = imped_dst_pixmap->gpu[0]; - - SyncDrvPicture(pSrc, pDrvSrc, 0); - SyncDrvPicture(pDst, pDrvDst, 0); - drv_ps->Glyphs(op, pDrvSrc, pDrvDst, maskFormat, xSrc, ySrc, nlists, lists, glyphs, 0); - + for (i = 0; i < imped_screen->num_gpu; i++) { + DrvPictureScreenPtr drv_ps = DrvGetPictureScreen(imped_screen->gpu[i]); + DrvPicturePtr pDrvSrc = NULL, pDrvDst; + pDrvSrc = imped_src->gpu[i]; + pDrvSrc->pPixmap = imped_src_pixmap->gpu[i]; + pDrvDst = imped_dst->gpu[i]; + pDrvDst->pPixmap = imped_dst_pixmap->gpu[i]; + + SyncDrvPicture(pSrc, pDrvSrc, i); + SyncDrvPicture(pDst, pDrvDst, i); + drv_ps->Glyphs(op, pDrvSrc, pDrvDst, maskFormat, xSrc, ySrc, nlists, lists, glyphs, 0); + } } Bool |