⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atiscreen.c

📁 x.org上有关ati系列显卡最新驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
    /* Re-initialise mi's visual list */    miClearVisualTypes();    if ((pATI->depth > 8) && (pATI->DAC == ATI_DAC_INTERNAL))        VisualMask = TrueColorMask;    else        VisualMask = miGetDefaultVisualMask(pATI->depth);    if (!miSetVisualTypes(pATI->depth, VisualMask, pATI->rgbBits,                          pScreenInfo->defaultVisual))        return FALSE;    if (!miSetPixmapDepths())        return FALSE;    pFB = pATI->pMemory;    pATI->FBPitch = PixmapBytePad(pATI->displayWidth, pATI->depth);    if (pATI->OptionShadowFB)    {        pATI->FBBytesPerPixel = pATI->bitsPerPixel >> 3;        pATI->FBPitch = PixmapBytePad(pATI->displayWidth, pATI->depth);        if ((pATI->pShadow = xalloc(pATI->FBPitch * pScreenInfo->virtualY)))        {            pFB = pATI->pShadow;        }        else        {            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,                "Insufficient virtual memory for shadow frame buffer.\n");            pATI->OptionShadowFB = FALSE;        }    }#ifdef XF86DRI_DEVEL    /* Setup DRI after visuals have been established, but before     * fbScreenInit is called.  fbScreenInit will eventually call the     * driver's InitGLXVisuals call back.     */    /* According to atiregs.h, GTPro (3D Rage Pro) is the first chip type with     * 3D triangle setup (the VERTEX_* registers)     */    if (pATI->Chip < ATI_CHIP_264GTPRO) {	xf86DrvMsg(iScreen, X_WARNING,		   "Direct rendering is not supported for ATI chips earlier than "		   "the ATI 3D Rage Pro.\n");	pATI->directRenderingEnabled = FALSE;    } else {	/* FIXME: When we move to dynamic allocation of back and depth	 * buffers, we will want to revisit the following check for 3	 * times the virtual size (or 2.5 times for 24-bit depth) of the screen below.	 */	int cpp = pATI->bitsPerPixel >> 3;	int maxY = pScreenInfo->videoRam * 1024 / (pATI->displayWidth * cpp);	int requiredY;	requiredY = pScreenInfo->virtualY * 2     /* front, back buffers */	    + (pScreenInfo->virtualY * 2 / cpp);  /* depth buffer (always 16-bit) */	if (!pATI->OptionAccel) {	    xf86DrvMsg(iScreen, X_WARNING,		       "Acceleration disabled, not initializing the DRI\n");	    pATI->directRenderingEnabled = FALSE;	} else if ( maxY > requiredY ) {	    pATI->directRenderingEnabled = ATIDRIScreenInit(pScreen);	} else {	    xf86DrvMsg(iScreen, X_WARNING,		       "DRI static buffer allocation failed -- "		       "need at least %d kB video memory\n",		       (pScreenInfo->displayWidth * requiredY * cpp ) / 1024);	    pATI->directRenderingEnabled = FALSE;	}    }#endif /* XF86DRI_DEVEL */    /* Initialise framebuffer layer */    switch (pATI->bitsPerPixel)    {#ifndef AVOID_CPIO        case 1:            pATI->Closeable = xf1bppScreenInit(pScreen, pFB,                pScreenInfo->virtualX, pScreenInfo->virtualY,                pScreenInfo->xDpi, pScreenInfo->yDpi, pATI->displayWidth);            break;        case 4:            pATI->Closeable = xf4bppScreenInit(pScreen, pFB,                pScreenInfo->virtualX, pScreenInfo->virtualY,                pScreenInfo->xDpi, pScreenInfo->yDpi, pATI->displayWidth);            break;#endif /* AVOID_CPIO */        case 8:        case 16:        case 24:        case 32:            pATI->Closeable = fbScreenInit(pScreen, pFB,                pScreenInfo->virtualX, pScreenInfo->virtualY,                pScreenInfo->xDpi, pScreenInfo->yDpi, pATI->displayWidth,                pATI->bitsPerPixel);            break;        default:            return FALSE;    }    if (!pATI->Closeable)        return FALSE;    /* Fixup RGB ordering */    if (pATI->depth > 8)    {        VisualPtr pVisual = pScreen->visuals + pScreen->numVisuals;        while (--pVisual >= pScreen->visuals)        {            if ((pVisual->class | DynamicClass) != DirectColor)                continue;            pVisual->offsetRed = pScreenInfo->offset.red;            pVisual->offsetGreen = pScreenInfo->offset.green;            pVisual->offsetBlue = pScreenInfo->offset.blue;            pVisual->redMask = pScreenInfo->mask.red;            pVisual->greenMask = pScreenInfo->mask.green;            pVisual->blueMask = pScreenInfo->mask.blue;        }    }    /* If applicable, initialise RENDER extension */    if (pATI->bitsPerPixel > 4)    {        if (pATI->OptionShadowFB)        {            if (serverGeneration == 1)                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,                    "RENDER extension not supported with a shadowed"                    " framebuffer.\n");        }#ifndef AVOID_CPIO        else if (pATI->BankInfo.BankSize)        {            if (serverGeneration == 1)                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,                    "RENDER extension not supported with a banked"                    " framebuffer.\n");        }#endif /* AVOID_CPIO */        else if (!fbPictureInit(pScreen, NULL, 0) &&                 (serverGeneration == 1))        {            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,                "RENDER extension initialisation failed.\n");        }    }    xf86SetBlackWhitePixels(pScreen);#ifndef AVOID_CPIO    /* Initialise banking if needed */    if (!miInitializeBanking(pScreen,                             pScreenInfo->virtualX, pScreenInfo->virtualY,                             pATI->displayWidth, &pATI->BankInfo))        return FALSE;#endif /* AVOID_CPIO */#ifdef USE_XAA    if (!pATI->useEXA) {    /* Memory manager setup */#ifdef XF86DRI_DEVEL    if (pATI->directRenderingEnabled)    {        if (!ATIMach64SetupMemXAA(iScreen, pScreen))            return FALSE;    }    else#endif /* XF86DRI_DEVEL */    {        if (!ATIMach64SetupMemXAA_NoDRI(iScreen, pScreen))            return FALSE;    }    /* Setup acceleration */    if (!ATIInitializeAcceleration(pScreen, pScreenInfo, pATI))        return FALSE;    }#endif /* USE_XAA */#ifdef USE_EXA    if (pATI->useEXA) {        /* EXA setups both memory manager and acceleration here */        if (pATI->OptionAccel && !ATIMach64ExaInit(pScreen))            return FALSE;    }#endif /* USE_EXA */#ifndef AVOID_DGA    /* Initialise DGA support */    (void)ATIDGAInit(pScreen, pScreenInfo, pATI);#endif /* AVOID_DGA */    /* Initialise backing store */    miInitializeBackingStore(pScreen);    xf86SetBackingStore(pScreen);    /* Initialise cursor */    if (!ATIInitializeCursor(pScreen, pATI))        return FALSE;    /* Create default colourmap */    if (!miCreateDefColormap(pScreen))        return FALSE;#ifdef AVOID_CPIO    if (!xf86HandleColormaps(pScreen, 256, pATI->rgbBits, ATILoadPalette, NULL,                             CMAP_PALETTED_TRUECOLOR |                             CMAP_LOAD_EVEN_IF_OFFSCREEN))            return FALSE;#else /* AVOID_CPIO */    if (pATI->depth > 1)        if (!xf86HandleColormaps(pScreen, (pATI->depth == 4) ? 16 : 256,                                 pATI->rgbBits, ATILoadPalette, NULL,                                 CMAP_PALETTED_TRUECOLOR |                                 CMAP_LOAD_EVEN_IF_OFFSCREEN))            return FALSE;#endif /* AVOID_CPIO */    /* Initialise shadow framebuffer */    if (pATI->OptionShadowFB &&        !ShadowFBInit(pScreen, ATIRefreshArea))        return FALSE;    /* Initialise DPMS support */    (void)xf86DPMSInit(pScreen, ATISetDPMSMode, 0);    /* Initialise XVideo support */    (void)ATIInitializeXVideo(pScreen, pScreenInfo, pATI);    /* Set pScreen->SaveScreen and wrap CloseScreen vector */    pScreen->SaveScreen = ATISaveScreen;    pATI->CloseScreen = pScreen->CloseScreen;    pScreen->CloseScreen = ATICloseScreen;    if (serverGeneration == 1)        xf86ShowUnusedOptions(pScreenInfo->scrnIndex, pScreenInfo->options);#ifdef TV_OUT    /* Fix-up TV out after ImpacTV probe */    if (pATI->OptionTvOut && pATI->Chip < ATI_CHIP_264GTPRO)        ATISwitchMode(0, pScreenInfo->currentMode, 0);#endif /* TV_OUT */#ifdef XF86DRI_DEVEL    /* DRI finalization */    if (pATI->directRenderingEnabled) {	/* Now that mi, fb, drm and others have done their thing,	 * complete the DRI setup.	 */	pATI->directRenderingEnabled = ATIDRIFinishScreenInit(pScreen);    }    if (pATI->directRenderingEnabled) {	xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,		   "Direct rendering enabled\n");    } else {        /* FIXME: Release unused offscreen mem here? */	xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,		   "Direct rendering disabled\n");    }#endif /* XF86DRI_DEVEL */    return TRUE;}/* * ATICloseScreen -- * * This function is called by DIX to close the screen. */BoolATICloseScreen(    int       iScreen,    ScreenPtr pScreen){    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];    ATIPtr      pATI        = ATIPTR(pScreenInfo);    Bool        Closed      = TRUE;#ifdef XF86DRI_DEVEL    /* Disable direct rendering */    if (pATI->directRenderingEnabled)    {	ATIDRICloseScreen(pScreen);	pATI->directRenderingEnabled = FALSE;    }#endif /* XF86DRI_DEVEL */    ATICloseXVideo(pScreen, pScreenInfo, pATI);#ifdef USE_EXA    if (pATI->pExa)    {        exaDriverFini(pScreen);        xfree(pATI->pExa);        pATI->pExa = NULL;    }#endif#ifdef USE_XAA    if (pATI->pXAAInfo)    {        XAADestroyInfoRec(pATI->pXAAInfo);        pATI->pXAAInfo = NULL;    }#endif    if ((pScreen->CloseScreen = pATI->CloseScreen))    {        pATI->CloseScreen = NULL;        Closed = (*pScreen->CloseScreen)(iScreen, pScreen);    }    pATI->Closeable = FALSE;    if (pATI->pCursorInfo)    {        xf86DestroyCursorInfoRec(pATI->pCursorInfo);        pATI->pCursorInfo = NULL;    }    ATILeaveGraphics(pScreenInfo, pATI);#ifdef USE_XAA    if (!pATI->useEXA)    {        xfree(pATI->ExpansionBitmapScanlinePtr[1]);        pATI->ExpansionBitmapScanlinePtr[0] = NULL;        pATI->ExpansionBitmapScanlinePtr[1] = NULL;    }#endif    xfree(pATI->pShadow);    pATI->pShadow = NULL;    pScreenInfo->pScreen = NULL;    return Closed;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -