コード例 #1
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
void
kaaMoveInPixmap (PixmapPtr pPixmap)
{
    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
    KaaScreenPriv (pScreen);
    KaaPixmapPriv (pPixmap);
    int dst_pitch, src_pitch, bytes;
    unsigned char *dst, *src;
    int i;

    DBG_MIGRATE (("-> 0x%08x (0x%x) (%dx%d)\n",
		  pPixmap->drawable.id,
		  KaaGetPixmapPriv(pPixmap)->area ? 
		  KaaGetPixmapPriv(pPixmap)->area->offset : -1,
		  pPixmap->drawable.width,
		  pPixmap->drawable.height));

    src = pPixmap->devPrivate.ptr;
    src_pitch = pPixmap->devKind;
    
    if (!kaaPixmapAllocArea (pPixmap))
	return;

    pKaaPixmap->dirty = FALSE;

    if (pKaaScr->info->UploadToScreen)
    {
	if (pKaaScr->info->UploadToScreen(pPixmap, (char *) src, src_pitch))
	    return;
    }

    dst = pPixmap->devPrivate.ptr;
    dst_pitch = pPixmap->devKind;
    
    bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;

    kaaWaitSync (pPixmap->drawable.pScreen);

    i = pPixmap->drawable.height;
    while (i--) {
	memcpy (dst, src, bytes);
	dst += dst_pitch;
	src += src_pitch;
    }
}
コード例 #2
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
static void
kaaMoveOutPixmap (PixmapPtr pPixmap)
{
    KaaPixmapPriv (pPixmap);
    KdOffscreenArea *area = pKaaPixmap->area;

    DBG_MIGRATE (("<- 0x%08x (0x%x) (%dx%d)\n",
		  pPixmap->drawable.id,
		  KaaGetPixmapPriv(pPixmap)->area ? 
		  KaaGetPixmapPriv(pPixmap)->area->offset : -1,
		  pPixmap->drawable.width,
		  pPixmap->drawable.height));
    if (area)
    {
	kaaPixmapSave (pPixmap->drawable.pScreen, area);
	KdOffscreenFree (pPixmap->drawable.pScreen, area);
    }
}
コード例 #3
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
static void
kaaPixmapSave (ScreenPtr pScreen, KdOffscreenArea *area)
{
    PixmapPtr pPixmap = area->privData;
    KaaPixmapPriv(pPixmap);
    int dst_pitch, src_pitch, bytes;
    unsigned char *dst, *src;
    int i; 
    
    DBG_MIGRATE (("Save 0x%08x (0x%x) (%dx%d)\n",
		  pPixmap->drawable.id,
		  KaaGetPixmapPriv(pPixmap)->area ? 
		  KaaGetPixmapPriv(pPixmap)->area->offset : -1,
		  pPixmap->drawable.width,
		  pPixmap->drawable.height));
		  
    src_pitch = pPixmap->devKind;
    dst_pitch = pKaaPixmap->devKind;

    src = pPixmap->devPrivate.ptr;
    dst = pKaaPixmap->devPrivate.ptr;
    
    pPixmap->devKind = dst_pitch;
    pPixmap->devPrivate.ptr = dst;
    pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
    pKaaPixmap->area = NULL;

#if 0
    if (!pKaaPixmap->dirty)
	return;
#endif

    kaaWaitSync (pPixmap->drawable.pScreen);

    bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;

    i = pPixmap->drawable.height;
    while (i--) {
	memcpy (dst, src, bytes);
	dst += dst_pitch;
	src += src_pitch;
    }
}
コード例 #4
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
void
kaaPixmapUseMemory (PixmapPtr pPixmap)
{
    KaaPixmapPriv (pPixmap);

    if (pKaaPixmap->score == KAA_PIXMAP_SCORE_PINNED)
	return;

    if (pKaaPixmap->score == KAA_PIXMAP_SCORE_INIT)
	pKaaPixmap->score = 0;

    if (pKaaPixmap->score > KAA_PIXMAP_SCORE_MIN)
    {
	pKaaPixmap->score--;
	if (pKaaPixmap->area &&
	    pKaaPixmap->score <= KAA_PIXMAP_SCORE_MOVE_OUT)
	    kaaMoveOutPixmap (pPixmap);
    }
}
コード例 #5
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
static Bool
kaaDestroyPixmap (PixmapPtr pPixmap)
{
    if (pPixmap->refcnt == 1)
    {
	KaaPixmapPriv (pPixmap);
	if (pKaaPixmap->area)
	{
	    DBG_PIXMAP(("-- 0x%08x (0x%x) (%dx%d)\n",
			 pPixmap->drawable.id,
			 KaaGetPixmapPriv(pPixmap)->area->offset,
			 pPixmap->drawable.width,
			 pPixmap->drawable.height));
	    /* Free the offscreen area */
	    KdOffscreenFree (pPixmap->drawable.pScreen, pKaaPixmap->area);
	    pPixmap->devPrivate = pKaaPixmap->devPrivate;
	    pPixmap->devKind = pKaaPixmap->devKind;
	}
    }
    return fbDestroyPixmap (pPixmap);
}
コード例 #6
0
ファイル: koffscreen.c プロジェクト: Magister/x11rdp_xorg71
void
KdOffscreenMarkUsed (PixmapPtr pPixmap)
{
    KaaPixmapPriv (pPixmap);
    KdScreenPriv (pPixmap->drawable.pScreen);
    static int iter = 0;

    if (!pKaaPixmap->area)
	return;

    /* The numbers here are arbitrary.  We may want to tune these. */
    pKaaPixmap->area->score += 100;
    if (++iter == 10) {
	KdOffscreenArea *area;
	for (area = pScreenPriv->off_screen_areas; area != NULL;
	     area = area->next)
	{
	    if (area->state == KdOffscreenRemovable)
		area->score = (area->score * 7) / 8;
	}
    }
}
コード例 #7
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
void
kaaPixmapUseScreen (PixmapPtr pPixmap)
{
    KaaPixmapPriv (pPixmap);

    if (pKaaPixmap->score == KAA_PIXMAP_SCORE_PINNED)
	return;

    if (pKaaPixmap->score == KAA_PIXMAP_SCORE_INIT) {
	kaaMoveInPixmap(pPixmap);
	pKaaPixmap->score = 0;
    }

    if (pKaaPixmap->score < KAA_PIXMAP_SCORE_MAX)
    {
	pKaaPixmap->score++;
	if (!kaaPixmapIsOffscreen(pPixmap) &&
	    pKaaPixmap->score >= KAA_PIXMAP_SCORE_MOVE_IN)
	    kaaMoveInPixmap (pPixmap);
    }
    KdOffscreenMarkUsed (pPixmap);
}
コード例 #8
0
ファイル: kaa.c プロジェクト: GrahamCobb/maemo-xsisusb
static Bool
kaaPixmapAllocArea (PixmapPtr pPixmap)
{
    ScreenPtr	pScreen = pPixmap->drawable.pScreen;
    KaaScreenPriv (pScreen);
    KaaPixmapPriv (pPixmap);
    KdScreenPriv  (pScreen);
    int		bpp = pPixmap->drawable.bitsPerPixel;
    CARD16	h = pPixmap->drawable.height;
    CARD16	w = pPixmap->drawable.width;
    int		pitch;

    if (pKaaScr->info->flags & KAA_OFFSCREEN_ALIGN_POT && w != 1)
	w = 1 << (kaaLog2(w - 1) + 1);
    pitch = (w * bpp / 8 + pKaaScr->info->pitchAlign - 1) &
            ~(pKaaScr->info->pitchAlign - 1);
    
    pKaaPixmap->devKind = pPixmap->devKind;
    pKaaPixmap->devPrivate = pPixmap->devPrivate;
    pKaaPixmap->area = KdOffscreenAlloc (pScreen, pitch * h,
					 pKaaScr->info->offsetAlign,
					 FALSE, 
					 kaaPixmapSave, (pointer) pPixmap);
    if (!pKaaPixmap->area)
	return FALSE;
    
    DBG_PIXMAP(("++ 0x%08x (0x%x) (%dx%d)\n",
		  pPixmap->drawable.id,
		  KaaGetPixmapPriv(pPixmap)->area ? 
		  KaaGetPixmapPriv(pPixmap)->area->offset : -1,
		  pPixmap->drawable.width,
		  pPixmap->drawable.height));
    pPixmap->devKind = pitch;
    pPixmap->devPrivate.ptr = (pointer) ((CARD8 *) pScreenPriv->screen->memory_base + pKaaPixmap->area->offset);
    pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
    return TRUE;
}