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

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

?? radeon_mergedfb.c

?? x.org上有關ati系列顯卡最新驅動
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* $XFree86$ *//* * Copyright 2003 Alex Deucher. * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation on the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT.  IN NO EVENT SHALL ALEX DEUCHER, OR ANY OTHER  * CONTRIBUTORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */#ifdef HAVE_CONFIG_H#include "config.h"#endif/* * Authors: *   Alex Deucher <agd5f@yahoo.com> *   Based, in large part, on the sis driver by Thomas Winischhofer. */#include <string.h>#include <stdio.h>#include "xf86.h"#include "xf86Priv.h"#include "xf86Resources.h"#include "xf86_OSproc.h"#include "extnsionst.h"  	/* required */#include <X11/extensions/panoramiXproto.h>  	/* required */#include "dixstruct.h"#include "vbe.h"#include "radeon.h"#include "radeon_reg.h"#include "radeon_macros.h"#include "radeon_mergedfb.h"/* psuedo xinerama support */static unsigned char 	RADEONXineramaReqCode = 0;int 			RADEONXineramaPixWidth = 0;int 			RADEONXineramaPixHeight = 0;int 			RADEONXineramaNumScreens = 0;RADEONXineramaData	*RADEONXineramadataPtr = NULL;static int 		RADEONXineramaGeneration;Bool 		RADEONnoPanoramiXExtension = TRUE;int RADEONProcXineramaQueryVersion(ClientPtr client);int RADEONProcXineramaGetState(ClientPtr client);int RADEONProcXineramaGetScreenCount(ClientPtr client);int RADEONProcXineramaGetScreenSize(ClientPtr client);int RADEONProcXineramaIsActive(ClientPtr client);int RADEONProcXineramaQueryScreens(ClientPtr client);int RADEONSProcXineramaDispatch(ClientPtr client);static voidRADEONChooseCursorCRTC(ScrnInfoPtr pScrn1, int x, int y);/* mergedfb functions *//* Helper function for CRT2 monitor vrefresh/hsync options * (Taken from mga, sis drivers) */intRADEONStrToRanges(range *r, char *s, int max){   float num = 0.0;   int rangenum = 0;   Bool gotdash = FALSE;   Bool nextdash = FALSE;   char* strnum = NULL;   do {     switch(*s) {     case '0':     case '1':     case '2':     case '3':     case '4':     case '5':     case '6':     case '7':     case '8':     case '9':     case '.':        if(strnum == NULL) {           strnum = s;           gotdash = nextdash;           nextdash = FALSE;        }        break;     case '-':     case ' ':     case 0:        if(strnum == NULL) break;	sscanf(strnum, "%f", &num);	strnum = NULL;        if(gotdash)           r[rangenum - 1].hi = num;        else {           r[rangenum].lo = num;           r[rangenum].hi = num;           rangenum++;        }        if(*s == '-') nextdash = (rangenum != 0);        else if(rangenum >= max) return rangenum;        break;     default :        return 0;     }   } while(*(s++) != 0);   return rangenum;}/* Copy and link two modes (i, j) for merged-fb mode * (Taken from mga, sis drivers) * Copys mode i, merges j to copy of i, links the result to dest, and returns it. * Links i and j in Private record. * If dest is NULL, return value is copy of i linked to itself. * For mergedfb auto-config, we only check the dimension * against virtualX/Y, if they were user-provided. */static DisplayModePtrRADEONCopyModeNLink(ScrnInfoPtr pScrn, DisplayModePtr dest,                 DisplayModePtr i, DisplayModePtr j,		 RADEONScrn2Rel srel){    DisplayModePtr mode;    int dx = 0,dy = 0;    RADEONInfoPtr  info       = RADEONPTR(pScrn);    if(!((mode = xalloc(sizeof(DisplayModeRec))))) return dest;    memcpy(mode, i, sizeof(DisplayModeRec));    if(!((mode->Private = xalloc(sizeof(RADEONMergedDisplayModeRec))))) {       xfree(mode);       return dest;    }    ((RADEONMergedDisplayModePtr)mode->Private)->CRT1 = i;    ((RADEONMergedDisplayModePtr)mode->Private)->CRT2 = j;    ((RADEONMergedDisplayModePtr)mode->Private)->CRT2Position = srel;    mode->PrivSize = 0;    switch(srel) {    case radeonLeftOf:    case radeonRightOf:       if(!(pScrn->display->virtualX)) {          dx = i->HDisplay + j->HDisplay;       } else {          dx = min(pScrn->virtualX, i->HDisplay + j->HDisplay);       }       dx -= mode->HDisplay;       if(!(pScrn->display->virtualY)) {          dy = max(i->VDisplay, j->VDisplay);       } else {          dy = min(pScrn->virtualY, max(i->VDisplay, j->VDisplay));       }       dy -= mode->VDisplay;       break;    case radeonAbove:    case radeonBelow:       if(!(pScrn->display->virtualY)) {          dy = i->VDisplay + j->VDisplay;       } else {          dy = min(pScrn->virtualY, i->VDisplay + j->VDisplay);       }       dy -= mode->VDisplay;       if(!(pScrn->display->virtualX)) {          dx = max(i->HDisplay, j->HDisplay);       } else {          dx = min(pScrn->virtualX, max(i->HDisplay, j->HDisplay));       }       dx -= mode->HDisplay;       break;    case radeonClone:       if(!(pScrn->display->virtualX)) {          dx = max(i->HDisplay, j->HDisplay);       } else {          dx = min(pScrn->virtualX, max(i->HDisplay, j->HDisplay));       }       dx -= mode->HDisplay;       if(!(pScrn->display->virtualY)) {          dy = max(i->VDisplay, j->VDisplay);       } else {	  dy = min(pScrn->virtualY, max(i->VDisplay, j->VDisplay));       }       dy -= mode->VDisplay;       break;    }    mode->HDisplay += dx;    mode->HSyncStart += dx;    mode->HSyncEnd += dx;    mode->HTotal += dx;    mode->VDisplay += dy;    mode->VSyncStart += dy;    mode->VSyncEnd += dy;    mode->VTotal += dy;    /* This is needed for not generating negative refesh rates in xrandr with the       faked DotClock below     */    if (!(mode->VRefresh))        mode->VRefresh = mode->Clock * 1000.0 / mode->HTotal / mode->VTotal;     /* Provide a sophisticated fake DotClock in order to trick the vidmode      * extension to allow selecting among a number of modes whose merged result      * looks identical but consists of different modes for CRT1 and CRT2      */    mode->Clock = (((i->Clock >> 3) + i->HTotal) << 16) | ((j->Clock >> 2) + j->HTotal);    mode->Clock ^= ((i->VTotal << 19) | (j->VTotal << 3));    if( ((mode->HDisplay * ((pScrn->bitsPerPixel + 7) / 8) * mode->VDisplay) > 	(pScrn->videoRam * 1024)) ||        (mode->HDisplay > 8191) ||	(mode->VDisplay > 8191) ) {       xf86DrvMsg(pScrn->scrnIndex, X_ERROR,	        "Skipped \"%s\" (%dx%d), not enough video RAM or beyond hardware specs\n",		mode->name, mode->HDisplay, mode->VDisplay);       xfree(mode->Private);       xfree(mode);       return dest;    }    if(srel != radeonClone) {       info->AtLeastOneNonClone = TRUE;    }    xf86DrvMsg(pScrn->scrnIndex, X_INFO,    	"Merged \"%s\" (%dx%d) and \"%s\" (%dx%d) to %dx%d%s\n",	i->name, i->HDisplay, i->VDisplay, j->name, j->HDisplay, j->VDisplay,	mode->HDisplay, mode->VDisplay, (srel == radeonClone) ? " (Clone)" : "");    mode->next = mode;    mode->prev = mode;    if(dest) {        mode->next = dest->next; 	/* Insert node after "dest" */        dest->next->prev = mode;        mode->prev = dest;        dest->next = mode;    }    return mode;}/* Helper function to find a mode from a given name * (Taken from mga, sis drivers) */static DisplayModePtrRADEONGetModeFromName(char* str, DisplayModePtr i){    DisplayModePtr c = i;    if(!i) return NULL;    do {       if(strcmp(str, c->name) == 0) return c;       c = c->next;    } while(c != i);    return NULL;}static DisplayModePtrRADEONFindWidestTallestMode(DisplayModePtr i, Bool tallest){    DisplayModePtr c = i, d = NULL;    int max = 0;    if(!i) return NULL;    do {       if(tallest) {          if(c->VDisplay > max) {             max = c->VDisplay;	     d = c;          }       } else {          if(c->HDisplay > max) {             max = c->HDisplay;	     d = c;          }       }       c = c->next;    } while(c != i);    return d;}static voidRADEONFindWidestTallestCommonMode(DisplayModePtr i, DisplayModePtr j, Bool tallest,				DisplayModePtr *a, DisplayModePtr *b){    DisplayModePtr c = i, d;    int max = 0;    Bool foundone;    (*a) = (*b) = NULL;    if(!i || !j) return;    do {       d = j;       foundone = FALSE;       do {	  if( (c->HDisplay == d->HDisplay) &&	      (c->VDisplay == d->VDisplay) ) {	     foundone = TRUE;	     break;	  }	  d = d->next;       } while(d != j);       if(foundone) {	  if(tallest) {	     if(c->VDisplay > max) {		max = c->VDisplay;		(*a) = c;		(*b) = d;	     }	  } else {	     if(c->HDisplay > max) {		max = c->HDisplay;		(*a) = c;		(*b) = d;	     }	  }       }       c = c->next;    } while(c != i);}static DisplayModePtrRADEONGenerateModeListFromLargestModes(ScrnInfoPtr pScrn,		    DisplayModePtr i, DisplayModePtr j,		    RADEONScrn2Rel srel){    RADEONInfoPtr  info       = RADEONPTR(pScrn);    DisplayModePtr mode1 = NULL;    DisplayModePtr mode2 = NULL;    DisplayModePtr mode3 = NULL;    DisplayModePtr mode4 = NULL;    DisplayModePtr result = NULL;    info->AtLeastOneNonClone = FALSE;    /* Now build a default list of MetaModes.     * - Non-clone: If the user enabled NonRectangular, we use the     * largest mode for each CRT1 and CRT2. If not, we use the largest     * common mode for CRT1 and CRT2 (if available). Additionally, and     * regardless if the above, we produce a clone mode consisting of     * the largest common mode (if available) in order to use DGA.     * - Clone: If the (global) CRT2Position is Clone, we use the     * largest common mode if available, otherwise the first two modes     * in each list.     */    switch(srel) {    case radeonLeftOf:    case radeonRightOf:       mode1 = RADEONFindWidestTallestMode(i, FALSE);       mode2 = RADEONFindWidestTallestMode(j, FALSE);       RADEONFindWidestTallestCommonMode(i, j, FALSE, &mode3, &mode4);       break;    case radeonAbove:    case radeonBelow:       mode1 = RADEONFindWidestTallestMode(i, TRUE);       mode2 = RADEONFindWidestTallestMode(j, TRUE);       RADEONFindWidestTallestCommonMode(i, j, TRUE, &mode3, &mode4);       break;    case radeonClone:       RADEONFindWidestTallestCommonMode(i, j, FALSE, &mode3, &mode4);       if(mode3 && mode4) {	  mode1 = mode3;	  mode2 = mode4;       } else {	  mode1 = i;	  mode2 = j;       }    }    if(srel != radeonClone) {       if(mode3 && mode4 && !info->NonRect) {	  mode1 = mode3;	  mode2 = mode2;       }    }    if(mode1 && mode2) {       result = RADEONCopyModeNLink(pScrn, result, mode1, mode2, srel);    }    if(srel != radeonClone) {       if(mode3 && mode4) {	  result = RADEONCopyModeNLink(pScrn, result, mode3, mode4, radeonClone);       }    }    return result;}/* Generate the merged-fb mode modelist * (Taken from mga, sis drivers) */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产电影一区在线| 91精品国产色综合久久不卡蜜臀| 成人动漫一区二区在线| 在线欧美一区二区| 国产亚洲一区二区三区四区| 亚洲日本免费电影| 狠狠v欧美v日韩v亚洲ⅴ| 91国偷自产一区二区开放时间| 精品久久久久久久久久久久久久久| 亚洲日本在线观看| 国产·精品毛片| 精品日产卡一卡二卡麻豆| 亚洲欧美日韩在线不卡| 国产成人在线电影| 日韩免费观看高清完整版| 亚洲欧洲精品一区二区精品久久久| 久久精品国产在热久久| 欧美日韩三级在线| 一区二区三区四区亚洲| 成人理论电影网| 久久久av毛片精品| 另类小说一区二区三区| 欧美日本在线看| 亚洲一区二区三区视频在线播放| a亚洲天堂av| 久久久国际精品| 国产一区二区美女诱惑| 欧美一级理论性理论a| 亚洲永久免费视频| 日本韩国一区二区| 亚洲欧美日本在线| av色综合久久天堂av综合| 久久久美女毛片| 国产在线播放一区三区四| 日韩精品一区二区三区三区免费 | 成人动漫一区二区三区| 久久天天做天天爱综合色| 蜜臀av一区二区在线观看| 欧美片在线播放| 青青青爽久久午夜综合久久午夜| 欧美另类高清zo欧美| 日韩精品成人一区二区三区| 欧美美女一区二区三区| 日韩电影在线观看网站| 日韩视频不卡中文| 久久9热精品视频| 久久久久久久综合狠狠综合| 成年人国产精品| 亚洲视频在线一区二区| 欧美日韩在线三级| 日韩成人精品在线观看| 日韩精品中午字幕| 国产精品一区免费视频| 亚洲国产成人私人影院tom| 成人中文字幕电影| 亚洲乱码一区二区三区在线观看| 91成人在线观看喷潮| 日日夜夜一区二区| 久久精品在线免费观看| 91小视频免费观看| 亚洲成人资源网| 久久久久久夜精品精品免费| k8久久久一区二区三区 | 国产婷婷色一区二区三区四区| 国产精品一区二区久久精品爱涩| 中日韩免费视频中文字幕| 在线观看不卡一区| 老汉av免费一区二区三区 | 国产精品夜夜嗨| 中文字幕日韩av资源站| 日本韩国欧美在线| 久久精品国产99国产| 国产精品丝袜一区| 欧美一卡二卡三卡四卡| 不卡av免费在线观看| 欧美aa在线视频| 国产精品不卡在线| 欧美一区二区人人喊爽| 成人福利视频在线看| 丝袜a∨在线一区二区三区不卡| 精品sm在线观看| 欧美影院一区二区| 国产成人av一区二区| 亚洲国产精品一区二区久久| 久久精品在这里| 欧美精品电影在线播放| 99国产精品久久久| 激情综合网av| 奇米色一区二区| 亚洲黄色尤物视频| 欧美国产精品专区| 日韩三级免费观看| 色婷婷久久一区二区三区麻豆| 久久99精品国产.久久久久久| 亚洲视频在线一区观看| 久久伊99综合婷婷久久伊| 在线观看欧美精品| 成人视屏免费看| 精品一区二区精品| 日韩高清一区二区| 丝袜亚洲精品中文字幕一区| 亚洲精品乱码久久久久久日本蜜臀| 久久久影视传媒| 日韩欧美国产午夜精品| 欧美日韩成人综合天天影院| 色婷婷av一区| 色综合久久久久| 色屁屁一区二区| 色噜噜久久综合| av中文字幕一区| 岛国精品在线观看| 国产精品一线二线三线精华| 久久精品国产免费| 九九国产精品视频| 狠狠色丁香久久婷婷综合丁香| 日韩电影在线观看一区| 日韩精品三区四区| 日韩电影一二三区| 蜜臀av亚洲一区中文字幕| 日本va欧美va瓶| 日韩国产成人精品| 青青草国产精品97视觉盛宴| 男女性色大片免费观看一区二区| 午夜精品影院在线观看| 免费在线观看一区二区三区| 免费人成网站在线观看欧美高清| 午夜av一区二区| 蜜桃视频一区二区| 黄色资源网久久资源365| 国产精品资源在线观看| 成人一级片网址| 91女厕偷拍女厕偷拍高清| 色婷婷综合五月| 欧美群妇大交群的观看方式| 日韩三级在线观看| 欧美国产激情一区二区三区蜜月| 欧美国产精品一区二区| 中文字幕一区二区三区在线播放| 国产校园另类小说区| 日韩理论片在线| 亚洲国产精品精华液网站| 蜜芽一区二区三区| 成人亚洲一区二区一| 一本大道久久a久久综合| 欧美精品成人一区二区三区四区| 久久综合久久综合九色| 亚洲精品五月天| 五月天婷婷综合| 国产精品夜夜嗨| 欧美色综合久久| 久久久亚洲国产美女国产盗摄 | 欧美日本视频在线| 欧美大片免费久久精品三p| 国产精品天天看| 亚洲成av人片一区二区梦乃| 国产精品一区免费在线观看| 91免费版在线看| 欧美xxx久久| 亚洲另类色综合网站| 蜜桃一区二区三区在线| av一区二区久久| 欧美一区二区三区白人| 亚洲日本丝袜连裤袜办公室| 日韩中文字幕不卡| av亚洲精华国产精华| 欧美一区二区久久久| 成人免费在线视频观看| 日本麻豆一区二区三区视频| 91免费看`日韩一区二区| 精品久久人人做人人爽| 亚洲综合免费观看高清完整版在线 | 亚洲国产视频a| 成人免费毛片嘿嘿连载视频| 日韩一区二区三区精品视频| 又紧又大又爽精品一区二区| 国产精品性做久久久久久| 欧美日韩国产在线播放网站| 亚洲欧美在线aaa| 国产老妇另类xxxxx| 91精品国产色综合久久不卡电影 | 亚洲电影中文字幕在线观看| 国产98色在线|日韩| 欧美一级片在线看| 亚洲大片精品永久免费| 91麻豆.com| 国产精品五月天| 国产高清久久久| 久久综合国产精品| 麻豆精品一区二区av白丝在线| 91豆麻精品91久久久久久| 中文字幕日本乱码精品影院| 丁香另类激情小说| 国产午夜精品一区二区| 国内偷窥港台综合视频在线播放| 日韩一区二区在线看| 五月激情丁香一区二区三区| 91福利精品视频| 亚洲成在人线在线播放| 欧美福利电影网| 日韩精品1区2区3区|