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

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

?? blt.cpp

?? Sm501 VGA芯片wince下驅動代碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.
Copyright (c) 1995, 1996, 1997, 1998  Microsoft Corporation
Copyright (c) 1999-2000  Silicon Motion, Inc.

Module Name:	blt.cpp

Abstract:		bitblt/rectangle for SMI

Functions:


Notes:
--*/

#include "precomp.h"
#define DISPPERF_DECLARE
#include "dispperf.h"
#include <emul.h>

#ifdef CMDLIST
#undef CMDLISTHBLT  //disable host blt cmdlist
#endif

int RotBLT_Width=9; //strip width. Copy strip by strip to work around rotationBLT garbage issue. No visible garbage if <=9, but only =1 can pass CETK4.2 so far.
extern GPESurf	*g_pbuffer180;

#define GPETYPE (SCODE (GPE::*) (struct GPEBltParms*))
SCODE SMI::WrapBlt(GPEBltParms *pBltParms)
{
	//WaitForNotBusy();
	DispPerfType(DISPPERF_ACCEL_GPE);
    WaitForNotBusy(); //in case code inside GPE does not wait sometimes.
	SCODE status = EmulatedBlt(pBltParms);

	return(status);
}

SCODE SMI::BltPrepare(GPEBltParms *pBltParms)
{
	DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("SMI::BltPrepare rop4=0x%04X\r\n"),	pBltParms->rop4));
	DEBUGMSG(GPE_ZONE_BLT_LO,
			(TEXT("+Dest Format=%d Rect=%d,%d-%d,%d GPESurf=%08X\r\n"),
			pBltParms->pDst->Format(), pBltParms->prclDst->left,
			pBltParms->prclDst->top, pBltParms->prclDst->right,
			pBltParms->prclDst->bottom, pBltParms->pDst));

	// Make sure 2D Engine is on and the current power state is appropriate
	POWER_HOOK(2D, VGXPowerMinimal);

	if (pBltParms->prclSrc && pBltParms->pSrc)
		DEBUGMSG(GPE_ZONE_BLT_LO,
				(TEXT("+Src Format=%d Rect=%d,%d-%d,%d GPESurf=%08X\r\n"),
				pBltParms->pSrc->Format(), pBltParms->prclSrc->left,
				pBltParms->prclSrc->top, pBltParms->prclSrc->right,
				pBltParms->prclSrc->bottom, pBltParms->pSrc));

	DispPerfStart (pBltParms->rop4);
	/*
	if ((((DWORD)pBltParms->pDst) == 0x00121650) && 
		(pBltParms->rop4 == 0xF0F0) &&
		(pBltParms->prclDst->left == 0) &&
		(pBltParms->prclDst->top == 0) &&
		(pBltParms->prclDst->bottom == 480) &&
		(pBltParms->prclDst->right == 640) &&
		1)
		{
			DebugBreak();
			//DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("SMI::BltPrepare BREAK rop4=0x%04X\r\n"),	pBltParms->rop4));
		} 
	*/		
	pBltParms->pBlt = GPETYPE &SMI::WrapBlt;

//	return S_OK;
#ifdef ROTATION_ENABLE

	if ((m_iRotate) &&
	    (((pBltParms->pDst) && (pBltParms->pDst->Buffer() == m_pPrimarySurface->Buffer())) ||	// only care if dest is main display surface
	     ((pBltParms->pSrc) && (pBltParms->pSrc->Buffer() == m_pPrimarySurface->Buffer())))	// only care if source is main display surface
	   )
	{
		pBltParms->pBlt = GPETYPE EmulatedBltRotate;

		switch( pBltParms->rop4 )
		{
		case 0x0000:	// BLACKNESS
			pBltParms->solidColor = 0x000000;
			pBltParms->pBlt = GPETYPE FillRect;
			break;

		case 0xFFFF:	// WHITENESS
			pBltParms->solidColor = 0xFFFFFF;
			pBltParms->pBlt = GPETYPE FillRect;
			break;

		case 0x5555:	// DSTINVERT
		case 0xAAAA:	// DSTCOPY
			pBltParms->pBlt = GPETYPE DestBlt;
			break;

		case 0xF0F0:	// PATCOPY
		case 0x5A5A:	// PATINVERT
			if (pBltParms->solidColor != -1)
			{
				DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+PATCOPY - solid brush\r\n")));
				pBltParms->pBlt = GPETYPE FillRect;
			}
			break;

        case 0xCCCC:	// SRCCOPY
            if (pBltParms->pLookup || pBltParms->pConvert)
            {
                DEBUGMSG(GPE_ZONE_BLT_LO,
                    (TEXT("-Color conversion not supported\r\n")));
                break;
            }
            
            if (pBltParms->bltFlags & BLT_STRETCH)
            {
                DEBUGMSG(GPE_ZONE_BLT_LO,
                    (TEXT("-Stretch BLT flags NOT supported\r\n")));
                break;
            }
            if ((pBltParms->pDst) && (pBltParms->pSrc))
            {
                if ((pBltParms->pDst->Buffer() == m_pPrimarySurface->Buffer()) &&	
                    (pBltParms->pSrc->Buffer() == m_pPrimarySurface->Buffer()))	//on-screen to on-screen
                {
#if 0 //left GPE handle at this time

                    DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+SrcCopy\r\n")));
                    switch (m_iRotate)
                    {
                        LONG tmp;
                    case DMDO_90:
                        tmp = pBltParms->prclDst->left;
                        pBltParms->prclDst->left = pBltParms->prclDst->top;
                        pBltParms->prclDst->top = pBltParms->pDst->Width()-tmp;
                        tmp = pBltParms->prclDst->right;
                        pBltParms->prclDst->right = pBltParms->prclDst->bottom;
                        pBltParms->prclDst->bottom = pBltParms->pDst->Width()-tmp;
                        tmp = pBltParms->prclSrc->left;
                        pBltParms->prclSrc->left = pBltParms->prclSrc->top;
                        pBltParms->prclSrc->top = pBltParms->pSrc->Width()-tmp;
                        break;
                    case DMDO_180:
                        pBltParms->prclDst->left = pBltParms->pDst->Width() - pBltParms->prclDst->left;
                        pBltParms->prclDst->top = pBltParms->pDst->Height()- pBltParms->prclDst->top;
                        pBltParms->prclDst->right = pBltParms->pDst->Width() - pBltParms->prclDst->right;
                        pBltParms->prclDst->bottom = pBltParms->pDst->Height() - pBltParms->prclDst->bottom;
                        pBltParms->prclSrc->left = pBltParms->pDst->Width() - pBltParms->prclSrc->left;
                        pBltParms->prclSrc->top = pBltParms->pSrc->Height() - pBltParms->prclSrc->top;
                        break;
                    case DMDO_270:
                        tmp = pBltParms->prclDst->bottom;
                        pBltParms->prclDst->top = pBltParms->prclDst->left;
                        pBltParms->prclDst->left = pBltParms->pDst->Height()-tmp;
                        tmp = pBltParms->prclDst->top;
                        pBltParms->prclDst->bottom = pBltParms->prclDst->right;
                        pBltParms->prclDst->right = pBltParms->pDst->Height()-tmp;
                        tmp = pBltParms->prclSrc->bottom;
                        pBltParms->prclSrc->top = pBltParms->prclSrc->left;
                        pBltParms->prclSrc->left = pBltParms->pSrc->Height()-tmp;
                        break;
                    }
                    
                    pBltParms->pBlt = GPETYPE SrcCopy; //Primary surface to primary surface
#endif
                }
                else if ((pBltParms->pDst->Buffer() == m_pPrimarySurface->Buffer()) &&	
                    pBltParms->pSrc->InVideoMemory() &&
                    !(pBltParms->bltFlags & BLT_TRANSPARENT))
                {
                    switch (m_iRotate)
                    {
                    case DMDO_90:
                        DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+SrcCopyRotation90\r\n")));
                        pBltParms->pBlt = GPETYPE SrcCopyRotation90; //off-screen surface to primary surface at 90 degree
                        break;
                    case DMDO_180:
                        DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+SrcCopyRotation180\r\n")));
                        pBltParms->pBlt = GPETYPE SrcCopyRotation180; //off-screen surface to primary surface at 180 degree
                        break;
                    case DMDO_270:
                        DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+SrcCopyRotation270\r\n")));
                        pBltParms->pBlt = GPETYPE SrcCopyRotation270; //off-screen surface to primary surface at 270 degree
                        break;
                    }
                }

                break;
            }
        default:
			// CHECK IF MASK IS NOT USED
			// The mask is not used if the upper byte of the rop4 equals the
			// lower byte of the rop4.  XOR them together and check if zero.

			if ((pBltParms->rop4 & 0x00FF) == ((pBltParms->rop4 >> 8) & 0x00FF))
			{
				// CHECK IF PATTERN DATA ONLY (SOURCE DATA NOT USED)
				// Source data is not used in the ROP if bits[1:0] equal
				// bits[3:2] and bits[5:4] equal bits[7:6].

				if ((pBltParms->rop4 & 0x33) == ((pBltParms->rop4 >> 2) & 0x33))
				{
					// CHECK IF PATTERN DATA OR SOLID COLOR

					if( pBltParms->solidColor != -1 )
					{
						// NORMAL SOLID RECTANGLE FILL

						DEBUGMSG(GPE_ZONE_BLT_LO,(TEXT("SMI::Blt - PAT with DST - solid brush\n")));
						//RETAILMSG(1,(TEXT("SMI::Blt - PAT with DST - solid brush\n")));
						pBltParms->pBlt = GPETYPE FillRect;
						break;
					}
				}
			}
			break;
		}

		// see if there are any optimized software blits available
		//EmulatedBltSelect02(pBltParms);
		//EmulatedBltSelect08(pBltParms);
		//EmulatedBltSelect16(pBltParms);

		if (pBltParms->pBlt == EmulatedBltRotate) //in case some code in EmulatedBltRotate() does not waitfor hw idle
			WaitForNotBusy();

		return S_OK;
	} 
	else
	{	
		// If rotation set and not 0 degrees return.
		if(m_iRotate != DMDO_0)
		{
			return S_OK;
		}
	}

#endif // ROTATION_ENABLE

	if (!pBltParms->pDst->InVideoMemory())
	{
		DEBUGMSG(GPE_ZONE_BLT_LO,
				(TEXT("-Destination not in video memory\r\n")));
		return(S_OK);
	}

    //Work around some customers reported SetPixel/GetPixel issues. Let GPE to draw for small size bitmaps (ysize<2, xsize<32).
    if (pBltParms->prclDst)
	if ((pBltParms->prclDst->bottom-pBltParms->prclDst->top<2) && (pBltParms->prclDst->right-pBltParms->prclDst->left<32))
	{
		DEBUGMSG(GPE_ZONE_BLT_LO,
				(TEXT("-Small size Blt, let CPU handle it\r\n")));
		return(S_OK);
	}

	switch (pBltParms->rop4)
	{
		case 0x0000:	// BLACKNESS
			pBltParms->solidColor = 0x000000;
			pBltParms->pBlt = GPETYPE &SMI::FillRect;
			break;

		case 0xFFFF:	// WHITENESS
			pBltParms->solidColor = 0xFFFFFFFF;
			pBltParms->pBlt = GPETYPE &SMI::FillRect;
			break;

		case 0xF0F0:	// PATCOPY
		case 0x5A5A:	// PATINVERT
			if (pBltParms->solidColor != -1)
			{
				DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+PATCOPY - solid brush\r\n")));
				pBltParms->pBlt = GPETYPE &SMI::FillRect;
			}
			else
			{
				if (pBltParms->pLookup || pBltParms->pConvert)
				{
					DEBUGMSG(GPE_ZONE_BLT_LO,
							(TEXT("-Color conversion not supported\r\n")));
					break;
				}

				EGPEFormat format = pBltParms->pBrush->Format();
				if (   (format != pBltParms->pDst->Format())
					|| (format == gpe32Bpp) //|| (format == gpe24Bpp) 
				)
				{

					DEBUGMSG(GPE_ZONE_BLT_LO,
							(TEXT("-Brush format %d not supported\r\n"),
							format));
					break;
				}

				if (   (pBltParms->pBrush->Width() != 8)
					&& (pBltParms->pBrush->Height() != 8)
				)
				{

					DEBUGMSG(GPE_ZONE_BLT_LO,
							(TEXT("-Brush size %d x %d not supported\r\n"),
							pBltParms->pBrush->Width(),
							pBltParms->pBrush->Height()));
					break;
				}

				DEBUGMSG(GPE_ZONE_BLT_LO,
						(TEXT("+PATCOPY - patterned brush\r\n")));

				// Currently PatFill is commented out due to CreatePatternBrush problem in CETK...20030509
				pBltParms->pBlt = GPETYPE &SMI::PatFill;
			}
			break;
// If handle 0xAAF0 in Blt, System hangs during CE TK at GDI test (DrawTextW, test ID 112). 9/19/02
		case 0xAAF0:	// TRANSPARENTPATCOPY
		{
#ifdef UMA
			if (m_SMISettings.m_bUMA)
			{
				break;
			}
#endif
			DEBUGMSG(GPE_ZONE_BLT_LO,
					(TEXT("+IMAGEPATCOPY - image patterned mask\r\n")));
			if (pBltParms->solidColor == -1)
			{
				DEBUGMSG(GPE_ZONE_BLT_LO,
						(TEXT("-Patterned brush not supported\r\n")));
				break;
			}

			EGPEFormat format = pBltParms->pMask->Format();
			if (format != gpe1Bpp)
			{
				DEBUGMSG(GPE_ZONE_BLT_LO,
						(TEXT("-Mask format %d not supported\r\n"), format));
				break;
			}
			DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+TRANSPARENTPATCOPY\r\n")));
            
            if (rev() != 0xA0)
                pBltParms->pBlt = GPETYPE &SMI::MaskedImage;

			break;
		}

		case 0x5555:	// DSTINVERT
		case 0xAAAA:	// DSTCOPY
			DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+DSTCOPY\r\n")));
			pBltParms->pBlt = GPETYPE &SMI::DestBlt;
			break;

		case 0xCCCC:	// SRCCOPY
		case 0x6666:	// SRCINVERT
		case 0x8888:	// SRCAND
		case 0xEEEE:	// SRCPAINT
			if (!pBltParms->pSrc->InVideoMemory())
			{
#if 1
#ifdef UMA
				if (m_SMISettings.m_bUMA)
				{
					break;
				}
#endif
				if (pBltParms->rop4 == 0xCCCC)
				{
					DEBUGMSG(GPE_ZONE_BLT_LO,
							(TEXT("-Source is not in video memory\r\n")));
					if (pBltParms->pLookup || pBltParms->pConvert)
					{
						DEBUGMSG(GPE_ZONE_BLT_LO,
							(TEXT("-Color conversion not supported\r\n")));
						break;
					}
	
					if (pBltParms->bltFlags & BLT_STRETCH)
					{
						DEBUGMSG(GPE_ZONE_BLT_LO,
					  		(TEXT("-Stretch BLT flags NOT supported\r\n")));
						break;
					}

					DEBUGMSG(GPE_ZONE_BLT_LO, (TEXT("+SRCCOPYHOST\r\n")));
					pBltParms->pBlt = GPETYPE &SMI::SrcCopyHost;
				}
#else
				DEBUGMSG(GPE_ZONE_BLT_LO,
                    (TEXT("-Source is not in video memory\r\n")));
#endif
				break;
			}
			if (pBltParms->pLookup || pBltParms->pConvert)
			{
				DEBUGMSG(GPE_ZONE_BLT_LO,
						(TEXT("-Color conversion not supported\r\n")));
				break;
			}

			if (pBltParms->bltFlags & BLT_STRETCH)
			{
				DEBUGMSG(GPE_ZONE_BLT_LO,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品黄色片免费大全| 亚洲成av人片www| 欧美二区三区的天堂| 在线观看成人小视频| 成人午夜av电影| 成人综合婷婷国产精品久久免费| 日本亚洲天堂网| 美脚の诱脚舐め脚责91| 免费观看在线色综合| 激情五月激情综合网| 国产成人综合网站| 91亚洲精华国产精华精华液| 欧美女孩性生活视频| 在线不卡免费av| 9人人澡人人爽人人精品| av综合在线播放| 欧美影视一区二区三区| 777xxx欧美| 久久亚洲精品国产精品紫薇| 欧美激情综合五月色丁香小说| 精品国产欧美一区二区| 中文字幕精品综合| 一区二区三区四区亚洲| 天天综合日日夜夜精品| 国产一区免费电影| 不卡视频免费播放| 欧美中文字幕久久| 久久久美女毛片| 亚洲视频在线一区二区| 午夜精品久久久久久久蜜桃app| 日韩黄色在线观看| 成人午夜激情在线| 欧美日韩精品一区二区三区四区 | 日本韩国一区二区| 欧美理论片在线| 久久久久久久久一| 一区二区三区丝袜| 激情国产一区二区| 91久久久免费一区二区| 欧美大片免费久久精品三p| 中文字幕一区二区不卡| 香蕉久久一区二区不卡无毒影院| 精品一区二区久久| 欧美三级电影网站| 成人免费一区二区三区视频| 日本一道高清亚洲日美韩| www.66久久| 精品久久久久一区| 亚洲成人高清在线| 9久草视频在线视频精品| 精品国产一区二区在线观看| 亚洲精品乱码久久久久久久久 | 日日噜噜夜夜狠狠视频欧美人| 国产一区二区三区免费看| 在线观看亚洲精品| 中文字幕高清一区| 精品综合久久久久久8888| 在线亚洲人成电影网站色www| 久久毛片高清国产| 日韩精品乱码av一区二区| 91欧美一区二区| 国产精品亲子伦对白| 日本午夜精品一区二区三区电影| 91福利在线免费观看| 中文一区二区在线观看| 九色porny丨国产精品| 在线观看亚洲专区| 亚洲国产日韩a在线播放性色| 国产99精品视频| 2021中文字幕一区亚洲| 美国一区二区三区在线播放| 欧美日韩精品一区二区天天拍小说 | 1区2区3区精品视频| 国产91精品久久久久久久网曝门| 久久综合色鬼综合色| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩视频在线一区二区| 亚洲视频中文字幕| 91久久久免费一区二区| 亚洲自拍偷拍麻豆| 欧美日韩成人综合在线一区二区| 亚洲激情av在线| 欧美性猛交xxxxxx富婆| 亚洲午夜电影网| 欧美日韩国产精选| 欧美96一区二区免费视频| 欧美日韩专区在线| 免费在线看一区| 精品三级在线观看| 国产白丝精品91爽爽久久| 国产精品嫩草影院av蜜臀| 成年人国产精品| 亚洲综合清纯丝袜自拍| 欧美日韩国产中文| 久久国内精品视频| 久久精品日产第一区二区三区高清版| 国产成人免费9x9x人网站视频| 欧美极品另类videosde| 91免费看`日韩一区二区| 亚洲国产人成综合网站| 欧美一区二区三区白人| 国产女主播视频一区二区| 99久久伊人网影院| 亚洲欧美激情小说另类| 亚洲国产一区二区视频| 色婷婷久久久亚洲一区二区三区| 国产精品麻豆网站| 91精选在线观看| 成人欧美一区二区三区1314| 欧美日韩dvd在线观看| 国产麻豆成人精品| 午夜av区久久| 日本一区二区三区国色天香 | 国产精品亚洲综合一区在线观看| 国产女主播视频一区二区| 91在线播放网址| 一区二区三区在线视频播放 | 亚洲三级在线免费观看| 欧美午夜电影网| 麻豆精品视频在线观看视频| 精品国产露脸精彩对白| 成人一区二区三区| 裸体一区二区三区| 中文字幕亚洲电影| 91精品一区二区三区久久久久久| 国产在线日韩欧美| 亚洲大片一区二区三区| 91麻豆精品国产91久久久久久| 国模少妇一区二区三区| 亚洲欧洲精品成人久久奇米网| 欧美日韩国产一级| 看片网站欧美日韩| 亚洲电影一级片| 久久久久久久久久久99999| 日本韩国精品一区二区在线观看| 日韩精品色哟哟| 日本一区二区动态图| 日韩免费视频一区| 在线观看免费成人| 国产精品亚洲专一区二区三区 | 亚洲精品老司机| 日韩视频在线永久播放| 国产精品一级在线| 免费看欧美女人艹b| 国产精品国产成人国产三级 | 中文字幕一区二区视频| 精品国产91亚洲一区二区三区婷婷| 国产高清视频一区| 日韩高清在线观看| 亚洲国产精品人人做人人爽| 国产精品丝袜在线| 国产精品久久久久久户外露出| 欧美成人福利视频| 91精品国产福利在线观看| 91国内精品野花午夜精品| 久久er99热精品一区二区| 免费成人小视频| 亚洲成人av中文| 亚洲精品写真福利| 欧美一区二区视频观看视频| 在线视频综合导航| 欧美久久一区二区| 欧美日韩国产一二三| 欧美午夜视频网站| 在线精品视频一区二区三四| 欧美在线观看18| 欧美色图天堂网| 欧美日韩综合在线| 欧美日韩极品在线观看一区| 色噜噜狠狠成人中文综合| 欧美日韩精品系列| 欧美日韩免费在线视频| 欧美美女一区二区在线观看| 91官网在线免费观看| 欧美日精品一区视频| 久久综合久久综合久久| 国产亚洲人成网站| 国产精品天美传媒沈樵| 亚洲精品日日夜夜| 日本在线不卡视频| 国产综合色产在线精品| 国产激情视频一区二区三区欧美| 国产精品一区专区| 国产在线视频精品一区| 色综合中文综合网| 中文字幕一区二区三区四区不卡| 国产精品女主播在线观看| 亚洲三级免费电影| 日韩精品一区第一页| 国产高清视频一区| 色94色欧美sute亚洲线路二| 欧美日韩亚洲综合一区| 精品久久一区二区| 精品国产3级a| 婷婷久久综合九色国产成人| 久久精品国产99| 97精品久久久午夜一区二区三区 | 久久精品亚洲乱码伦伦中文| 国产精品福利一区| 亚洲成a人片综合在线|