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

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

?? r128_cursor.c

?? x.org上有關ati系列顯卡最新驅動
?? C
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/r128_cursor.c,v 1.5tsi Exp $ *//* * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario, *                      Precision Insight, Inc., Cedar Park, Texas, and *                      VA Linux Systems Inc., Fremont, California. * * 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 ATI, PRECISION INSIGHT, VA LINUX * SYSTEMS AND/OR THEIR SUPPLIERS 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. *//* * Authors: *   Rickard E. Faith <faith@valinux.com> *   Kevin E. Martin <martin@valinux.com> * * References: * *   RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical *   Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April *   1999. * *   RAGE 128 Software Development Manual (Technical Reference Manual P/N *   SDK-G04000 Rev. 0.01), ATI Technologies: June 1999. * */#ifdef HAVE_CONFIG_H#include "config.h"#endif				/* Driver data structures */#include "r128.h"#include "r128_reg.h"				/* X and server generic header files */#include "xf86.h"#if X_BYTE_ORDER == X_BIG_ENDIAN#define P_SWAP32( a , b )                \       ((char *)a)[0] = ((char *)b)[3];  \       ((char *)a)[1] = ((char *)b)[2];  \       ((char *)a)[2] = ((char *)b)[1];  \       ((char *)a)[3] = ((char *)b)[0]#define P_SWAP16( a , b )                \       ((char *)a)[0] = ((char *)b)[1];  \       ((char *)a)[1] = ((char *)b)[0];  \       ((char *)a)[2] = ((char *)b)[3];  \       ((char *)a)[3] = ((char *)b)[2]#endif/* Set cursor foreground and background colors. */static void R128SetCursorColors(ScrnInfoPtr pScrn, int bg, int fg){    R128InfoPtr   info      = R128PTR(pScrn);    unsigned char *R128MMIO = info->MMIO;    if(info->IsSecondary)    {        OUTREG(R128_CUR2_CLR0, bg);        OUTREG(R128_CUR2_CLR1, fg);    }    else    {    	OUTREG(R128_CUR_CLR0, bg);    	OUTREG(R128_CUR_CLR1, fg);    }}/* Set cursor position to (x,y) with offset into cursor bitmap at   (xorigin,yorigin). */static void R128SetCursorPosition(ScrnInfoPtr pScrn, int x, int y){    R128InfoPtr           info      = R128PTR(pScrn);    unsigned char         *R128MMIO = info->MMIO;    xf86CursorInfoPtr     cursor    = info->cursor;    int                   xorigin   = 0;    int                   yorigin   = 0;    int                   total_y   = pScrn->frameY1 - pScrn->frameY0;    if (x < 0)                        xorigin = -x;    if (y < 0)                        yorigin = -y;    if (y > total_y)                  y       = total_y;    if (info->Flags & V_DBLSCAN)      y       *= 2;    if (xorigin >= cursor->MaxWidth)  xorigin = cursor->MaxWidth - 1;    if (yorigin >= cursor->MaxHeight) yorigin = cursor->MaxHeight - 1;    if(!info->IsSecondary)    {    	OUTREG(R128_CUR_HORZ_VERT_OFF,  R128_CUR_LOCK | (xorigin << 16) | yorigin);    	OUTREG(R128_CUR_HORZ_VERT_POSN, (R128_CUR_LOCK				     | ((xorigin ? 0 : x) << 16)				     | (yorigin ? 0 : y)));    	OUTREG(R128_CUR_OFFSET,         info->cursor_start + yorigin * 16);    }     else     {        OUTREG(R128_CUR2_HORZ_VERT_OFF,  (R128_CUR2_LOCK				       | (xorigin << 16)				       | yorigin));        OUTREG(R128_CUR2_HORZ_VERT_POSN, (R128_CUR2_LOCK				       | ((xorigin ? 0 : x) << 16)				       | (yorigin ? 0 : y)));        OUTREG(R128_CUR2_OFFSET,         			info->cursor_start + pScrn->fbOffset + yorigin * 16);    }}/* Copy cursor image from `image' to video memory.  R128SetCursorPosition   will be called after this, so we can ignore xorigin and yorigin. */static void R128LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image){    R128InfoPtr   info      = R128PTR(pScrn);    unsigned char *R128MMIO = info->MMIO;    CARD32        *s        = (pointer)image;    CARD32        *d        = (pointer)(info->FB + info->cursor_start);    int           y;    CARD32        save;    if(!info->IsSecondary)    {    	save = INREG(R128_CRTC_GEN_CNTL);    	OUTREG(R128_CRTC_GEN_CNTL, save & (CARD32)~R128_CRTC_CUR_EN);    }    else    {        save = INREG(R128_CRTC2_GEN_CNTL);        OUTREG(R128_CRTC2_GEN_CNTL, save & (CARD32)~R128_CRTC2_CUR_EN);    }#if X_BYTE_ORDER == X_BIG_ENDIAN    switch(info->CurrentLayout.pixel_bytes) {    case 4:    case 3:	for (y = 0; y < 64; y++) {	    P_SWAP32(d,s);	    d++; s++;	    P_SWAP32(d,s);	    d++; s++;	    P_SWAP32(d,s);	    d++; s++;	    P_SWAP32(d,s);	    d++; s++;	}	break;    case 2:	for (y = 0; y < 64; y++) {	    P_SWAP16(d,s);	    d++; s++;	    P_SWAP16(d,s);	    d++; s++;	    P_SWAP16(d,s);	    d++; s++;	    P_SWAP16(d,s);	    d++; s++;	}	break;    default:	for (y = 0; y < 64; y++) {	    *d++ = *s++;	    *d++ = *s++;	    *d++ = *s++;	    *d++ = *s++;	}    }#else    for (y = 0; y < 64; y++) {	*d++ = *s++;	*d++ = *s++;	*d++ = *s++;	*d++ = *s++;    }#endif    /* Set the area after the cursor to be all transparent so that we       won't display corrupted cursors on the screen */    for (y = 0; y < 64; y++) {	*d++ = 0xffffffff; /* The AND bits */	*d++ = 0xffffffff;	*d++ = 0x00000000; /* The XOR bits */	*d++ = 0x00000000;    }    if(!info->IsSecondary)    	OUTREG(R128_CRTC_GEN_CNTL, save);    else        OUTREG(R128_CRTC2_GEN_CNTL, save);}/* Hide hardware cursor. */static void R128HideCursor(ScrnInfoPtr pScrn){    R128InfoPtr   info      = R128PTR(pScrn);    unsigned char *R128MMIO = info->MMIO;     if(info->IsSecondary)        OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_CUR_EN);     else    	OUTREGP(R128_CRTC_GEN_CNTL, 0, ~R128_CRTC_CUR_EN);}/* Show hardware cursor. */static void R128ShowCursor(ScrnInfoPtr pScrn){    R128InfoPtr   info      = R128PTR(pScrn);    unsigned char *R128MMIO = info->MMIO;    if(info->IsSecondary)    {         OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_CUR_EN,               ~R128_CRTC2_CUR_EN);    }    else    {    	OUTREGP(R128_CRTC_GEN_CNTL, R128_CRTC_CUR_EN, ~R128_CRTC_CUR_EN);    }}/* Determine if hardware cursor is in use. */static Bool R128UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs){    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];    R128InfoPtr info  = R128PTR(pScrn);    return info->cursor_start ? TRUE : FALSE;}/* Initialize hardware cursor support. */Bool R128CursorInit(ScreenPtr pScreen){    ScrnInfoPtr           pScrn   = xf86Screens[pScreen->myNum];    R128InfoPtr           info    = R128PTR(pScrn);    xf86CursorInfoPtr     cursor;    FBAreaPtr             fbarea;    int                   width;    int                   height;    int                   size;    if (!(cursor = info->cursor = xf86CreateCursorInfoRec())) return FALSE;    cursor->MaxWidth          = 64;    cursor->MaxHeight         = 64;    cursor->Flags             = (HARDWARE_CURSOR_TRUECOLOR_AT_8BPP				 | HARDWARE_CURSOR_SHOW_TRANSPARENT				 | HARDWARE_CURSOR_UPDATE_UNHIDDEN#if X_BYTE_ORDER == X_LITTLE_ENDIAN				 | HARDWARE_CURSOR_BIT_ORDER_MSBFIRST#endif				 | HARDWARE_CURSOR_INVERT_MASK				 | HARDWARE_CURSOR_AND_SOURCE_WITH_MASK				 | HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64				 | HARDWARE_CURSOR_SWAP_SOURCE_AND_MASK);    cursor->SetCursorColors   = R128SetCursorColors;    cursor->SetCursorPosition = R128SetCursorPosition;    cursor->LoadCursorImage   = R128LoadCursorImage;    cursor->HideCursor        = R128HideCursor;    cursor->ShowCursor        = R128ShowCursor;    cursor->UseHWCursor       = R128UseHWCursor;    size                      = (cursor->MaxWidth/4) * cursor->MaxHeight;    width                     = pScrn->displayWidth;    height                    = (size*2 + 1023) / pScrn->displayWidth;    fbarea                    = xf86AllocateOffscreenArea(pScreen,							  width,							  height,							  16,							  NULL,							  NULL,							  NULL);    if (!fbarea) {	info->cursor_start    = 0;	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,		   "Hardware cursor disabled"		   " due to insufficient offscreen memory\n");    } else {	info->cursor_start    = R128_ALIGN((fbarea->box.x1					    + width * fbarea->box.y1)					   * info->CurrentLayout.pixel_bytes, 16);	info->cursor_end      = info->cursor_start + size;    }    R128TRACE(("R128CursorInit (0x%08x-0x%08x)\n",	       info->cursor_start, info->cursor_end));    return xf86InitCursor(pScreen, cursor);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本伦理一区二区| 午夜精品久久久| 欧美久久久久免费| 色欲综合视频天天天| 成人av在线资源| 成人国产精品视频| 不卡的av在线| 在线日韩国产精品| 欧美性色欧美a在线播放| 欧美色网一区二区| 欧美精品在线观看一区二区| 在线成人av网站| 精品国产91乱码一区二区三区| 精品国产免费人成在线观看| 中文字幕欧美国产| 亚洲色图在线播放| 天天影视涩香欲综合网| 精品中文字幕一区二区小辣椒| 粉嫩13p一区二区三区| eeuss鲁片一区二区三区 | 国产精品区一区二区三区| 日本一区二区成人| 亚洲va韩国va欧美va精品| 麻豆视频一区二区| 成年人网站91| 欧美高清精品3d| 国产日韩视频一区二区三区| 亚洲一区二区高清| 国产一区二区电影| 在线观看精品一区| 精品成人一区二区三区四区| 国产精品国产成人国产三级| 婷婷国产v国产偷v亚洲高清| 成人丝袜18视频在线观看| 色94色欧美sute亚洲13| 精品福利视频一区二区三区| 中文字幕一区二区三| 美日韩黄色大片| 色域天天综合网| www激情久久| 亚洲高清免费视频| 国产成人综合亚洲91猫咪| 欧美中文字幕一二三区视频| 久久久久国产成人精品亚洲午夜| 亚洲综合在线五月| 国产99一区视频免费| 欧美男男青年gay1069videost| 国产精品福利影院| 久久99精品国产.久久久久| 在线免费观看日本欧美| 欧美激情中文字幕| 美女视频黄a大片欧美| 色哟哟一区二区三区| 久久久亚洲午夜电影| 另类综合日韩欧美亚洲| 欧美在线观看一二区| 欧美国产激情一区二区三区蜜月| 蜜桃久久久久久| 欧美日韩国产123区| 亚洲精品国产无天堂网2021| av日韩在线网站| 日本一区二区免费在线观看视频| 日本不卡视频在线| 欧美电影在哪看比较好| 丝袜美腿成人在线| 欧美亚洲高清一区| 亚洲图片一区二区| 欧美日韩一区二区三区免费看 | 欧美片在线播放| 亚洲国产综合91精品麻豆| 99久久99久久精品免费看蜜桃| 国产女主播视频一区二区| 国产在线看一区| 欧美激情在线一区二区三区| 国产精品一区2区| 国产午夜精品久久久久久免费视| 国产一区在线观看视频| 国产亚洲欧美色| av网站一区二区三区| 亚洲三级久久久| 欧美性欧美巨大黑白大战| 日日摸夜夜添夜夜添亚洲女人| 欧美一区二区三区视频在线| 免费成人在线观看| 精品乱人伦小说| 国产成人综合在线观看| 综合分类小说区另类春色亚洲小说欧美| 成人精品亚洲人成在线| 亚洲欧美乱综合| 在线看国产一区二区| 亚洲成年人影院| 精品久久久久久久一区二区蜜臀| 国产成a人无v码亚洲福利| 国产精品久久99| 欧美性生活影院| 激情综合五月婷婷| 亚洲三级在线免费| 在线综合+亚洲+欧美中文字幕| 麻豆91在线播放免费| 日本一区二区三区在线观看| 91久久精品一区二区三区| 日本中文在线一区| 中文字幕国产一区二区| 欧美特级限制片免费在线观看| 日韩 欧美一区二区三区| 欧美精品一区二区三区很污很色的| 成人h版在线观看| 亚洲第一会所有码转帖| 精品国产精品一区二区夜夜嗨| 91免费看片在线观看| 男人的j进女人的j一区| 中文字幕五月欧美| 欧美成人a在线| 色哟哟在线观看一区二区三区| 久久99精品国产.久久久久| 亚洲欧美另类久久久精品| 日韩午夜av电影| 一本色道**综合亚洲精品蜜桃冫| 蜜臀99久久精品久久久久久软件| 中文字幕欧美一| 欧美电影免费观看高清完整版在线观看 | 亚洲天堂精品在线观看| 91精品黄色片免费大全| 91国模大尺度私拍在线视频| 国产乱淫av一区二区三区| 日韩成人免费电影| 亚洲欧美视频在线观看视频| 国产亚洲一区字幕| 欧美tk丨vk视频| 欧美日韩大陆在线| 在线中文字幕一区二区| 成人短视频下载| 国产高清成人在线| 狠狠色丁香久久婷婷综合丁香| 亚洲电影在线免费观看| 亚洲欧洲精品天堂一级| 中文字幕欧美三区| 久久久久国产成人精品亚洲午夜 | 中文久久乱码一区二区| 日韩免费电影一区| 在线不卡a资源高清| 欧美三级中文字| 欧美性三三影院| 欧美伊人精品成人久久综合97| 色综合久久99| 欧美中文字幕亚洲一区二区va在线 | 色噜噜狠狠色综合中国| 99精品国产99久久久久久白柏| 丁香婷婷深情五月亚洲| 成人午夜精品一区二区三区| 成人综合激情网| 成人av资源网站| 99国产精品国产精品久久| 91小视频免费观看| 色94色欧美sute亚洲线路一久| 一本久久精品一区二区| 色综合久久中文字幕综合网| 色婷婷精品大在线视频| 欧美调教femdomvk| 91精品免费在线观看| 精品国产欧美一区二区| 国产日韩av一区二区| 国产精品久久福利| 一区二区三区四区不卡在线| 亚洲一区二区美女| 免费欧美日韩国产三级电影| 精品夜夜嗨av一区二区三区| 国产伦理精品不卡| 91在线国产观看| 欧美日韩一级视频| 欧美一级二级三级蜜桃| 国产欧美日韩在线看| 亚洲精品欧美激情| 丝袜诱惑亚洲看片| 国产在线不卡一区| 92国产精品观看| 91精品在线免费| 国产亚洲成aⅴ人片在线观看| 亚洲欧洲三级电影| 日韩专区欧美专区| 国产精品一二三四区| 在线亚洲人成电影网站色www| 在线成人高清不卡| 国产精品久久久久久妇女6080 | 久久综合九色综合97_久久久| 综合色天天鬼久久鬼色| 青青草国产精品亚洲专区无| 成人av电影在线观看| 777xxx欧美| 18成人在线视频| 久久99国产精品久久| 一本一道波多野结衣一区二区| 91精品国产福利在线观看| 国产精品久久夜| 美女脱光内衣内裤视频久久影院| 波多野结衣精品在线| 欧美一区二区三区思思人| 亚洲视频免费看| 国产电影一区二区三区| 欧美人狂配大交3d怪物一区|