亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atidac.c

?? x.org上有關ati系列顯卡最新驅動
?? C
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atidac.c,v 1.18 2003/02/25 17:58:13 tsi Exp $ *//* * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of Marc Aurele La France not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission.  Marc Aurele La France makes no representations * about the suitability of this software for any purpose.  It is provided * "as-is" without express or implied warranty. * * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <string.h>#include "ati.h"#include "atidac.h"#include "atimach64io.h"#include "atimono.h"/* * RAMDAC-related definitions. */const SymTabRec ATIDACDescriptors[] ={   /* Keep this table in ascending DACType order */    {ATI_DAC_ATI68830,      "ATI 68830 or similar"},    {ATI_DAC_SC11483,       "Sierra 11483 or similar"},    {ATI_DAC_ATI68875,      "ATI 68875 or similar"},    {ATI_DAC_TVP3026_A,     "TI ViewPoint3026 or similar"},    {ATI_DAC_GENERIC,       "Brooktree 476 or similar"},    {ATI_DAC_BT481,         "Brooktree 481 or similar"},    {ATI_DAC_ATT20C491,     "AT&T 20C491 or similar"},    {ATI_DAC_SC15026,       "Sierra 15026 or similar"},    {ATI_DAC_MU9C1880,      "Music 9C1880 or similar"},    {ATI_DAC_IMSG174,       "Inmos G174 or similar"},    {ATI_DAC_ATI68860_B,    "ATI 68860 (Revision B) or similar"},    {ATI_DAC_ATI68860_C,    "ATI 68860 (Revision C) or similar"},    {ATI_DAC_TVP3026_B,     "TI ViewPoint3026 or similar"},    {ATI_DAC_STG1700,       "SGS-Thompson 1700 or similar"},    {ATI_DAC_ATT20C498,     "AT&T 20C498 or similar"},    {ATI_DAC_STG1702,       "SGS-Thompson 1702 or similar"},    {ATI_DAC_SC15021,       "Sierra 15021 or similar"},    {ATI_DAC_ATT21C498,     "AT&T 21C498 or similar"},    {ATI_DAC_STG1703,       "SGS-Thompson 1703 or similar"},    {ATI_DAC_CH8398,        "Chrontel 8398 or similar"},    {ATI_DAC_ATT20C408,     "AT&T 20C408 or similar"},    {ATI_DAC_INTERNAL,      "Internal"},    {ATI_DAC_IBMRGB514,     "IBM RGB 514 or similar"},    {ATI_DAC_UNKNOWN,       "Unknown"}          /* Must be last */};#ifndef AVOID_CPIO/* * ATISetDACIOPorts -- * * This function sets up DAC access I/O port numbers. */voidATISetDACIOPorts(    ATIPtr      pATI,    ATICRTCType crtc){    switch (crtc)    {        case ATI_CRTC_VGA:            pATI->CPIO_DAC_DATA = VGA_DAC_DATA;            pATI->CPIO_DAC_MASK = VGA_DAC_MASK;            pATI->CPIO_DAC_READ = VGA_DAC_READ;            pATI->CPIO_DAC_WRITE = VGA_DAC_WRITE;            pATI->CPIO_DAC_WAIT = GENS1(pATI->CPIO_VGABase);            break;        case ATI_CRTC_8514:            pATI->CPIO_DAC_DATA = IBM_DAC_DATA;            pATI->CPIO_DAC_MASK = IBM_DAC_MASK;            pATI->CPIO_DAC_READ = IBM_DAC_READ;            pATI->CPIO_DAC_WRITE = IBM_DAC_WRITE;            pATI->CPIO_DAC_WAIT = pATI->CPIO_DAC_MASK;            break;        case ATI_CRTC_MACH64:            pATI->CPIO_DAC_DATA = ATIIOPort(DAC_REGS) + 1;            pATI->CPIO_DAC_MASK = ATIIOPort(DAC_REGS) + 2;            pATI->CPIO_DAC_READ = ATIIOPort(DAC_REGS) + 3;            pATI->CPIO_DAC_WRITE = ATIIOPort(DAC_REGS) + 0;            pATI->CPIO_DAC_WAIT = pATI->CPIOBase;            break;        default:            break;    }}#endif /* AVOID_CPIO *//* * ATIGetDACCmdReg -- * * Setup to access a RAMDAC's command register. */CARD8ATIGetDACCmdReg(    ATIPtr pATI){#ifdef AVOID_CPIO    (void)in8(M64_DAC_WRITE);           /* Reset to PEL mode */    (void)in8(M64_DAC_MASK);    (void)in8(M64_DAC_MASK);    (void)in8(M64_DAC_MASK);    return in8(M64_DAC_MASK);#else /* AVOID_CPIO */    (void)inb(pATI->CPIO_DAC_WRITE);    /* Reset to PEL mode */    (void)inb(pATI->CPIO_DAC_MASK);    (void)inb(pATI->CPIO_DAC_MASK);    (void)inb(pATI->CPIO_DAC_MASK);    return inb(pATI->CPIO_DAC_MASK);#endif /* AVOID_CPIO */}/* * ATIDACPreInit -- * * This function initialises the fields in an ATIHWRec that relate to DACs. */voidATIDACPreInit(    ScrnInfoPtr pScreenInfo,    ATIPtr      pATI,    ATIHWPtr    pATIHW){    int Index, Index2;    CARD8 maxColour = (1 << pATI->rgbBits) - 1;    pATIHW->dac_read = pATIHW->dac_write = 0x00U;    pATIHW->dac_mask = 0xFFU;    /*     * Set colour lookup table.  The first entry has already been zeroed out.     */    if (pATI->depth > 8)        for (Index = 1;  Index < (NumberOf(pATIHW->lut) / 3);  Index++)        {            Index2 = Index * 3;            pATIHW->lut[Index2 + 0] =                pATIHW->lut[Index2 + 1] =                pATIHW->lut[Index2 + 2] = Index;        }    else    {        /*         * Initialise hardware colour map so that use of uninitialised         * software colour map entries can easily be seen.  For 256-colour         * modes, this doesn't remain effective for very long...         */        pATIHW->lut[3] = pATIHW->lut[4] = pATIHW->lut[5] = 0xFFU;        for (Index = 2;  Index < (NumberOf(pATIHW->lut) / 3);  Index++)        {            Index2 = Index * 3;            pATIHW->lut[Index2 + 0] = maxColour;            pATIHW->lut[Index2 + 1] = 0x00U;            pATIHW->lut[Index2 + 2] = maxColour;        }#ifndef AVOID_CPIO        if (pATI->depth == 1)        {            rgb blackColour = pScreenInfo->display->blackColour,                whiteColour = pScreenInfo->display->whiteColour;            if (blackColour.red > maxColour)                blackColour.red = maxColour;            if (blackColour.green > maxColour)                blackColour.green = maxColour;            if (blackColour.blue > maxColour)                blackColour.blue = maxColour;            if (whiteColour.red > maxColour)                whiteColour.red = maxColour;            if (whiteColour.green > maxColour)                whiteColour.green = maxColour;            if (whiteColour.blue > maxColour)                whiteColour.blue = maxColour;            if ((blackColour.red == whiteColour.red) &&                (blackColour.green == whiteColour.green) &&                (blackColour.blue == whiteColour.blue))            {                blackColour.red ^= maxColour;                blackColour.green ^= maxColour;                blackColour.blue ^= maxColour;            }            pATIHW->lut[(MONO_BLACK * 3) + 0] = blackColour.red;            pATIHW->lut[(MONO_BLACK * 3) + 1] = blackColour.green;            pATIHW->lut[(MONO_BLACK * 3) + 2] = blackColour.blue;            pATIHW->lut[(MONO_WHITE * 3) + 0] = whiteColour.red;            pATIHW->lut[(MONO_WHITE * 3) + 1] = whiteColour.green;            pATIHW->lut[(MONO_WHITE * 3) + 2] = whiteColour.blue;        }        if (pATIHW->crtc == ATI_CRTC_VGA)        {            /* Initialise overscan to black */            Index = pATIHW->attr[17] * 3;            pATIHW->lut[Index + 0] =                pATIHW->lut[Index + 1] =                pATIHW->lut[Index + 2] = 0x00U;        }#endif /* AVOID_CPIO */    }}/* * ATIDACSave -- * * This function is called to save the current RAMDAC state into an ATIHWRec * structure occurrence. */voidATIDACSave(    ATIPtr   pATI,    ATIHWPtr pATIHW){    int Index;#ifdef AVOID_CPIO    pATIHW->dac_read = in8(M64_DAC_READ);    DACDelay;    pATIHW->dac_write = in8(M64_DAC_WRITE);    DACDelay;    pATIHW->dac_mask = in8(M64_DAC_MASK);    DACDelay;    /* Save DAC's colour lookup table */    out8(M64_DAC_MASK, 0xFFU);    DACDelay;    out8(M64_DAC_READ, 0x00U);    DACDelay;    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)    {        pATIHW->lut[Index] = in8(M64_DAC_DATA);        DACDelay;    }    out8(M64_DAC_MASK, pATIHW->dac_mask);    DACDelay;    out8(M64_DAC_READ, pATIHW->dac_read);    DACDelay;#else /* AVOID_CPIO */    ATISetDACIOPorts(pATI, pATIHW->crtc);    pATIHW->dac_read = inb(pATI->CPIO_DAC_READ);    DACDelay;    pATIHW->dac_write = inb(pATI->CPIO_DAC_WRITE);    DACDelay;    pATIHW->dac_mask = inb(pATI->CPIO_DAC_MASK);    DACDelay;    /* Save DAC's colour lookup table */    outb(pATI->CPIO_DAC_MASK, 0xFFU);    DACDelay;    outb(pATI->CPIO_DAC_READ, 0x00U);    DACDelay;    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)    {        pATIHW->lut[Index] = inb(pATI->CPIO_DAC_DATA);        DACDelay;    }    outb(pATI->CPIO_DAC_MASK, pATIHW->dac_mask);    DACDelay;    outb(pATI->CPIO_DAC_READ, pATIHW->dac_read);    DACDelay;#endif /* AVOID_CPIO */}/* * ATIDACSet -- * * This function loads RAMDAC data from an ATIHWRec structure occurrence. */voidATIDACSet(    ATIPtr   pATI,    ATIHWPtr pATIHW){    int Index;#ifdef AVOID_CPIO    /* Load DAC's colour lookup table */    out8(M64_DAC_MASK, 0xFFU);    DACDelay;    out8(M64_DAC_WRITE, 0x00U);    DACDelay;    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)    {        out8(M64_DAC_DATA, pATIHW->lut[Index]);        DACDelay;    }    out8(M64_DAC_MASK, pATIHW->dac_mask);    DACDelay;    out8(M64_DAC_READ, pATIHW->dac_read);    DACDelay;    out8(M64_DAC_WRITE, pATIHW->dac_write);    DACDelay;#else /* AVOID_CPIO */    ATISetDACIOPorts(pATI, pATIHW->crtc);    /* Load DAC's colour lookup table */    outb(pATI->CPIO_DAC_MASK, 0xFFU);    DACDelay;    outb(pATI->CPIO_DAC_WRITE, 0x00U);    DACDelay;    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)    {        outb(pATI->CPIO_DAC_DATA, pATIHW->lut[Index]);        DACDelay;    }    outb(pATI->CPIO_DAC_MASK, pATIHW->dac_mask);    DACDelay;    outb(pATI->CPIO_DAC_READ, pATIHW->dac_read);    DACDelay;    outb(pATI->CPIO_DAC_WRITE, pATIHW->dac_write);    DACDelay;#endif /* AVOID_CPIO */}/* * ATILoadPalette -- * * This function updates the RAMDAC's LUT and the in-memory copy of it in * NewHW. */voidATILoadPalette(    ScrnInfoPtr pScreenInfo,    int         nColours,    int         *Indices,    LOCO        *Colours,    VisualPtr   pVisual){    ATIPtr pATI = ATIPTR(pScreenInfo);    CARD8  *LUTEntry;    int    i, j, Index;    if (((pVisual->class | DynamicClass) == DirectColor) &&        ((1 << pVisual->nplanes) > (SizeOf(pATI->NewHW.lut) / 3)))    {        int reds = pVisual->redMask >> pVisual->offsetRed;        int greens = pVisual->greenMask >> pVisual->offsetGreen;        int blues = pVisual->blueMask >> pVisual->offsetBlue;        int redShift = 8 - pATI->weight.red;        int greenShift = 8 - pATI->weight.green;        int blueShift = 8 - pATI->weight.blue;        int redMult = 3 << redShift;        int greenMult = 3 << greenShift;        int blueMult = 3 << blueShift;        int minShift;        CARD8 fChanged[SizeOf(pATI->NewHW.lut) / 3];        (void)memset(fChanged, 0, SizeOf(fChanged));        minShift = redShift;        if (minShift > greenShift)            minShift = greenShift;        if (minShift > blueShift)            minShift = blueShift;        for (i = 0;  i < nColours;  i++)        {            if((Index = Indices[i]) < 0)                continue;            if (Index <= reds)            {                j = Index * redMult;                pATI->NewHW.lut[j + 0] = Colours[Index].red;                fChanged[j / 3] = TRUE;            }            if (Index <= greens)            {                j = Index * greenMult;                pATI->NewHW.lut[j + 1] = Colours[Index].green;                fChanged[j / 3] = TRUE;            }            if (Index <= blues)            {                j = Index * blueMult;                pATI->NewHW.lut[j + 2] = Colours[Index].blue;                fChanged[j / 3] = TRUE;            }        }        if (pScreenInfo->vtSema || pATI->currentMode)        {            /* Rewrite LUT entries that could have been changed */            i = 1 << minShift;            LUTEntry = pATI->NewHW.lut;            for (Index = 0;                 Index < (SizeOf(pATI->NewHW.lut) / 3);                 Index += i, LUTEntry += i * 3)            {                if (!fChanged[Index])                    continue;#ifdef AVOID_CPIO                out8(M64_DAC_WRITE, Index);                DACDelay;                out8(M64_DAC_DATA, LUTEntry[0]);                DACDelay;                out8(M64_DAC_DATA, LUTEntry[1]);                DACDelay;                out8(M64_DAC_DATA, LUTEntry[2]);                DACDelay;#else /* AVOID_CPIO */                outb(pATI->CPIO_DAC_WRITE, Index);                DACDelay;                outb(pATI->CPIO_DAC_DATA, LUTEntry[0]);                DACDelay;                outb(pATI->CPIO_DAC_DATA, LUTEntry[1]);                DACDelay;                outb(pATI->CPIO_DAC_DATA, LUTEntry[2]);                DACDelay;#endif /* AVOID_CPIO */            }        }    }    else    {        for (i = 0;  i < nColours;  i++)        {            Index = Indices[i];            if ((Index < 0) || (Index >= (SizeOf(pATI->NewHW.lut) / 3)))                continue;            LUTEntry = &pATI->NewHW.lut[Index * 3];            LUTEntry[0] = Colours[Index].red;            LUTEntry[1] = Colours[Index].green;            LUTEntry[2] = Colours[Index].blue;            if (pScreenInfo->vtSema || pATI->currentMode)            {#ifdef AVOID_CPIO                out8(M64_DAC_WRITE, Index);                DACDelay;                out8(M64_DAC_DATA, LUTEntry[0]);                DACDelay;                out8(M64_DAC_DATA, LUTEntry[1]);                DACDelay;                out8(M64_DAC_DATA, LUTEntry[2]);                DACDelay;#else /* AVOID_CPIO */                outb(pATI->CPIO_DAC_WRITE, Index);                DACDelay;                outb(pATI->CPIO_DAC_DATA, LUTEntry[0]);                DACDelay;                outb(pATI->CPIO_DAC_DATA, LUTEntry[1]);                DACDelay;                outb(pATI->CPIO_DAC_DATA, LUTEntry[2]);                DACDelay;#endif /* AVOID_CPIO */            }        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品视频网| 欧美影院一区二区| 国产色婷婷亚洲99精品小说| 久久精品国产免费| 久久久久久久国产精品影院| 国产九九视频一区二区三区| 国产欧美一区二区三区网站 | 亚洲三级在线播放| 91久久国产最好的精华液| 亚洲免费观看高清完整版在线观看 | 国产精品亚洲第一区在线暖暖韩国| 国产亚洲女人久久久久毛片| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲激情六月丁香| 欧美色网一区二区| 久久福利资源站| 国产精品丝袜久久久久久app| 色综合天天综合在线视频| 性感美女极品91精品| 精品国精品自拍自在线| 成人动漫中文字幕| 寂寞少妇一区二区三区| 日日摸夜夜添夜夜添精品视频| 成人激情图片网| 亚洲激情图片一区| 精品裸体舞一区二区三区| 成人免费电影视频| 性欧美大战久久久久久久久| 久久综合久久99| 色8久久人人97超碰香蕉987| 美女精品自拍一二三四| 中文字幕一区二区三区精华液| 欧美日韩卡一卡二| 国产乱一区二区| 一级精品视频在线观看宜春院| 久久日韩粉嫩一区二区三区| 在线精品视频一区二区| 国产在线精品不卡| 亚洲va国产va欧美va观看| 久久精品欧美一区二区三区不卡| 欧美日韩视频一区二区| 懂色av噜噜一区二区三区av| 日本成人在线不卡视频| 自拍偷拍亚洲激情| 国产日韩影视精品| 日韩一级高清毛片| 欧洲精品一区二区| 丁香桃色午夜亚洲一区二区三区 | 一区二区三区 在线观看视频| 久久这里只有精品首页| 7799精品视频| 一本大道久久a久久精二百| 国产一区二区三区免费在线观看| 亚洲成a人片在线观看中文| 国产精品久久久久婷婷二区次| 欧美v日韩v国产v| 91精品视频网| 欧美日韩一区二区电影| 日本韩国精品在线| jizz一区二区| av一二三不卡影片| 成人免费视频caoporn| 韩国三级中文字幕hd久久精品| 日本亚洲三级在线| 亚洲6080在线| 亚洲国产美国国产综合一区二区| 亚洲欧美中日韩| 国产精品美女一区二区三区| 国产免费观看久久| 欧美韩日一区二区三区四区| 久久精品这里都是精品| 国产偷v国产偷v亚洲高清| 久久久久久亚洲综合影院红桃| 日韩欧美一级在线播放| 日韩三级精品电影久久久 | 国产不卡在线播放| 国产精品一区久久久久| 国产精选一区二区三区| 成人中文字幕电影| aaa欧美日韩| 色综合天天视频在线观看| 91视频免费播放| 欧美日韩中文字幕一区| 欧美日韩国产片| 欧美xxx久久| 国产日韩精品一区二区三区在线| 国产欧美一区二区在线| 中文字幕在线一区| 亚洲美女屁股眼交3| 午夜国产精品一区| 美女诱惑一区二区| 国产麻豆欧美日韩一区| www.日韩在线| 欧美探花视频资源| 日韩欧美一区中文| 国产日韩欧美亚洲| 夜夜精品视频一区二区 | 国产一区999| 波多野结衣一区二区三区| 在线观看国产日韩| 欧美一区二区久久| 国产偷国产偷亚洲高清人白洁| 亚洲精品视频在线看| 日韩电影在线免费看| 国产伦精品一区二区三区免费| yourporn久久国产精品| 欧美日韩激情一区二区三区| 日韩精品在线看片z| 国产精品久久网站| 亚洲午夜私人影院| 国产精品一区二区果冻传媒| 91农村精品一区二区在线| 欧美一区二区大片| 亚洲欧洲日韩女同| 美女视频黄 久久| 97久久精品人人做人人爽50路| 欧美一区二区二区| 亚洲人午夜精品天堂一二香蕉| 日本aⅴ免费视频一区二区三区| 东方欧美亚洲色图在线| 欧美浪妇xxxx高跟鞋交| 中文字幕av一区二区三区高| 日韩电影在线观看网站| 成人激情动漫在线观看| 91精品国产综合久久精品麻豆 | 欧美日韩国产中文| 国产日韩影视精品| 日本视频中文字幕一区二区三区| 成人精品亚洲人成在线| 日韩色视频在线观看| 亚洲毛片av在线| 成人久久视频在线观看| 欧美精品一区二区精品网| 亚洲一区在线观看免费观看电影高清 | 欧美三级蜜桃2在线观看| 国产欧美一区二区精品婷婷| 日韩国产欧美一区二区三区| 91视频免费播放| 日本一区二区三级电影在线观看| 免费在线观看一区| 欧美视频在线播放| 亚洲天堂精品在线观看| 成人午夜视频福利| 精品成人在线观看| 日本亚洲电影天堂| 欧美疯狂做受xxxx富婆| 亚洲午夜国产一区99re久久| www.欧美色图| 国产精品日韩精品欧美在线 | 成人深夜在线观看| 久久人人97超碰com| 麻豆国产精品一区二区三区| 欧美日韩国产一区| 香蕉成人啪国产精品视频综合网| 色狠狠桃花综合| 亚洲日本护士毛茸茸| 99久久国产免费看| 亚洲欧美日韩久久| 色一情一乱一乱一91av| 日韩美女精品在线| 91麻豆免费看| 亚洲主播在线观看| 欧美在线啊v一区| 亚洲成人先锋电影| 欧美丰满一区二区免费视频| 水野朝阳av一区二区三区| 精品视频一区二区三区免费| 亚洲高清免费观看| 欧美剧在线免费观看网站| 日韩精品免费视频人成| 91精品久久久久久久99蜜桃| 人人狠狠综合久久亚洲| 欧美一区二区三区成人| 久久精品国产免费| 久久久久久久久久久久久夜| 岛国精品一区二区| 国产精品福利一区| 91官网在线观看| 日本伊人色综合网| 久久久噜噜噜久久中文字幕色伊伊| 国产精品综合一区二区| 国产精品国产三级国产aⅴ中文| 9人人澡人人爽人人精品| 一区二区三区电影在线播| 欧美日韩免费观看一区三区| 青草av.久久免费一区| 久久一日本道色综合| 99久久婷婷国产综合精品电影| 亚洲伊人色欲综合网| 日韩午夜av一区| 成人国产在线观看| 亚洲午夜一区二区| 精品88久久久久88久久久| 成人激情av网| 亚洲成人动漫在线免费观看| 久久丝袜美腿综合| 在线精品视频免费播放| 精品一区二区日韩| 亚洲欧美视频在线观看视频| 日韩午夜激情电影|