示例#1
0
void Rk30MaliDRI2_Close(ScreenPtr pScreen)
{
    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
    FBDevPtr pMxv = FBDEVPTR(pScrn);

    if (pMxv->Rk30Mali != NULL) {
	OvlHWPtr overlay = pMxv->OvlHW;
	Rk30MaliPtr	rk_3d = pMxv->Rk30Mali;

    /* Unwrap functions */
        pScreen->DestroyWindow    = rk_3d->DestroyWindow;
//    pScreen->PostValidateTree = rk_3d->PostValidateTree;
//    pScreen->GetImage         = rk_3d->GetImage;
        pScreen->DestroyPixmap    = rk_3d->DestroyPixmap;

	OvlFreeMemPg(pScrn, rk_3d->PMemBuf);

//	    Reset_3DOvl(pScreen,1);

	if(rk_3d->buf_back){
	    free(rk_3d->buf_back);
	    rk_3d->buf_back = NULL;
	}
	DRI2CloseScreen(pScreen);
	drmClose(rk_3d->drm_fd);
	free(rk_3d);
	rk_3d = NULL;
    }
}
void vivante_dri2_CloseScreen(CLOSE_SCREEN_ARGS_DECL)
{
	struct vivante *vivante = vivante_get_screen_priv(pScreen);
	struct vivante_dri2_info *dri = vivante->dri2;

	if (dri) {
		DRI2CloseScreen(pScreen);

		vivante->dri2 = NULL;
		drmFree(dri->devname);
		free(dri);
	}
}
示例#3
0
void TegraDRI2ScreenInit(ScreenPtr pScreen)
{
    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
    TegraPtr tegra = TegraPTR(pScrn);
    DRI2InfoRec info = {
        .version = 6,
        .fd = tegra->fd,
        .driverName = "tegra",
        .deviceName = tegra->path,
        .CreateBuffer = TegraDRI2CreateBuffer,
        .DestroyBuffer = TegraDRI2DestroyBuffer,
        .CopyRegion = TegraDRI2CopyRegion,
        .ScheduleSwap = TegraDRI2ScheduleSwap,
        .GetMSC = TegraDRI2GetMSC,
        .ScheduleWaitMSC = TegraDRI2ScheduleWaitMSC,
        .AuthMagic = drmAuthMagic,
    };

    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "> %s(pScreen=%p)\n", __func__,
               pScreen);

    if (xf86LoaderCheckSymbol("DRI2Version")) {
        int major = 0, minor = 0;

        DRI2Version(&major, &minor);

        xf86DrvMsg(pScrn->scrnIndex, X_INFO, "DRI2 v%d.%d\n", major,
                   minor);
    }

    DRI2ScreenInit(pScreen, &info);

    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "< %s()\n", __func__);
}

void TegraDRI2ScreenExit(ScreenPtr pScreen)
{
    ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);

    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "> %s(pScreen=%p)\n", __func__,
               pScreen);

    DRI2CloseScreen(pScreen);

    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "< %s()\n", __func__);
}
void
VBOXDRICloseScreen(ScreenPtr pScreen, VBOXPtr pVBox)
{
    DRI2CloseScreen(pScreen);
}
void VBOXDRICloseScreen(ScreenPtr pScreen, VBOXPtr pVBox)
{
    DRI2CloseScreen(pScreen);
    if (pVBox->drmFD >= 0)
        close(pVBox->drmFD);
}