怎么样测试VGA12H写屏速度?
File: VGASpeed.txt
Name: 测试VGA12H模式的速度
Author: zyl910
Blog: http://blog.csdn.net/zyl910/
Version: V1.1
Updata: 2006-11-23
下载(注意修改下载后的扩展名)
经过上一次的测试后,发现读显存的速度比写显存的速度慢得多。
很多资料建议我们使用写模式1来实现显存内的位图传送。当使用写模式1进行位图传送时,是一边读一边写的形式。而现在内存读速度很慢,那么会不会影响位图传送速度呢?于是我做了个测试。
测试结果
~~~~~~~~
CPU : AMD Athlon XP 1700+(实际频率:1463 MHz (11 x 133))
内存: DDR266 256MB
显卡: NVIDIA GeForce2 MX/MX 400(AGP 4X)
显存带宽: 125MHz * 128bit = 2000MB/s
操作系统: Windows XP SP2
[FPS: C]
Video to System: 11.3000
System to Video : 51.0807
OffScr to System: 11.7646
System to OffScr: 51.6840
Video to OffScr: 37.1039
OffScr to Video : 37.0033
[FPS: movsb]
Video to System: 11.9657
System to Video : 85.5702
OffScr to System: 11.9657
System to OffScr: 85.5702
Video to OffScr: 37.2044
OffScr to Video : 37.3050
[FPS: movsw]
Video to System: 23.5293
System to Video : 122.4729
OffScr to System: 23.6298
System to OffScr: 122.2718
[FPS: movsd]
Video to System: 44.7459
System to Video : 152.7392
OffScr to System: 44.8464
System to OffScr: 152.4376
CPU : AMD Athlon XP 1700+(实际频率:1463 MHz (11 x 133))
内存: DDR266 256MB
显卡: NVIDIA GeForce2 MX/MX 400(AGP 4X)
显存带宽: 125MHz * 128bit = 2000MB/s
操作系统: Windows 98SE
[FPS: C]
Video to System: 11.6641
System to Video : 60.7337
OffScr to System: 11.7000
System to OffScr: 60.5326
Video to OffScr: 35.3945
OffScr to Video : 35.4950
[FPS: movsb]
Video to System: 11.9657
System to Video : 98.9436
OffScr to System: 11.9657
System to OffScr: 99.2453
Video to OffScr: 35.6961
OffScr to Video : 35.6961
[FPS: movsw]
Video to System: 23.4287
System to Video : 173.4530
OffScr to System: 23.5293
System to OffScr: 173.4530
[FPS: movsd]
Video to System: 44.4442
System to Video : 268.1735
OffScr to System: 44.4442
System to OffScr: 269.5812
CPU : AMD Athlon XP 1700+(实际频率:1463 MHz (11 x 133))
内存: DDR266 256MB
显卡: NVIDIA GeForce2 MX/MX 400(AGP 4X)
显存带宽: 125MHz * 128bit = 2000MB/s
操作系统: DOS实模式
[FPS: C]
Video to System: 11.7646
System to Video : 61.2365
OffScr to System: 11.8652
System to OffScr: 61.1359
Video to OffScr: 37.2044
OffScr to Video : 37.2044
[FPS: movsb]
Video to System: 12.0663
System to Video : 108.0939
OffScr to System: 12.0663
System to OffScr: 108.3956
Video to OffScr: 37.4055
OffScr to Video : 37.3050
[FPS: movsw]
Video to System: 23.6298
System to Video : 190.4464
OffScr to System: 23.7304
System to OffScr: 190.5470
[FPS: movsd]
Video to System: 44.9470
System to Video : 278.9326
OffScr to System: 44.9470
System to OffScr: 279.4354
CPU : Intel Celeron, 1000 MHz (10 x 100)
内存: SDRAM 256MB
显卡: ATI Radeon 9550(AGP 4X)
显存带宽: 392MHz * 128bit = 6272MB/s
操作系统: Windows XP SP2
[FPS: C]
Video to System: 11.5000
System to Video : 52.0862
OffScr to System: 11.6641
System to OffScr: 52.0862
Video to OffScr: 32.6796
OffScr to Video : 32.5790
[FPS: movsb]
Video to System: 11.6641
System to Video : 51.8851
OffScr to System: 11.6000
System to OffScr: 52.0862
Video to OffScr: 32.6796
OffScr to Video : 32.5790
[FPS: movsw]
Video to System: 22.2221
System to Video : 76.4199
OffScr to System: 22.1215
System to OffScr: 76.7215
[FPS: movsd]
Video to System: 40.5227
System to Video : 100.3514
OffScr to System: 40.5227
System to OffScr: 100.3514
分析
~~~~
一、用写模式1实现的位图传送的确不够快
跟我们猜想的一样,位图传送的确不够快,才30多郑
让我们理论分析一下。
每一次是先读再写,且每次硬件会利用锁存器一次性复制4个字节,所以速度为:1/(1/11.3000 + 1/51.0807)*4 = 9.25305 * 4 = 37.0122
与测试结果相符。
看来不能在VGA12H下利用显存内位图传送实现高速动画。最佳方案是先在内存中将屏幕画好,再一次性传送到显存。反正现在CPU主频够高,DDR内存条访问速度够快。
估计写模式1只能用作填充(如清屏)。
二、访问离屏显存并没有比访问主表面显存快
受某些早期资料的误导,曾以为访问离屏显存会比较快。可是现代的显卡都有缓冲机制,所以无论是访问主表面显存,还是访问离屏显存,速度都一样快。
当然在有条件的时候,应该使用离屏显存来实现双缓冲平滑动画。
测试代码
~~~~~~~~
/* File: VGA12H.c Name: 测试VGA12H模式的速度 Author: zyl910 Blog: http://blog.csdn.net/zyl910/ Version: V1.0 Updata: 2006-11-23 S: system memory. 系统内存 V: video memory(primary surface). 主表面显存 O: offscreen video memory. 离屏显存 */ #include <stdio.h> #include <conio.h> #include <mem.h> #include <dos.h> typedef unsigned char BYTE; typedef unsigned int WORD; typedef unsigned long DWORD; typedefvoid far* LPVOID; #define SCR_W640 #define SCR_H480 #define SCR_PLANES4 #define SCANSIZE_DIB((SCR_W)/2) #define SCANSIZE_VGA((SCR_W)/8) #defineSEG_VIDEO0xA000 #define LPOFFSCREEN(MK_FP(SEG_VIDEO, (unsigned)0xF000)) #define WaitVR() while(!(inportb(0x3da)&0x08)) static volatile DWORD far* const pbiosclock = MK_FP(0x0040, 0x6C); #define BIOSCLOCK_F((double)18.2) typedef void (*TESTFUNC)(DWORD iF); #define TESTFPS_WAITVR1 static BYTEbyVGA[SCR_PLANES][SCANSIZE_VGA]; voidrepmovsb(LPVOIDlpD, LPVOIDlpS, WORDcBytes) { _asm{ pushds pushes movcx, cBytes lesdi, lpD ldssi, lpS cld repmovsb popes popds } } voidrepmovsw(LPVOIDlpD, LPVOIDlpS, WORDcWords) { _asm{ pushds pushes movcx, cWords lesdi, lpD ldssi, lpS cld repmovsw popes popds; } } voidrepmovsd(LPVOIDlpD, LPVOIDlpS, WORDcDWords) { _asm{ pushds pushes movcx, cDWords lesdi, lpD ldssi, lpS cld db 0x66;repmovsw; /* rep movsd */ popes popds } } voidvgasetvideomode(BYTEbymode) { _asm{ moval, bymode; movah, 0x00; int0x10; } } intvgasetwritemode(intmode) { BYTEby; outportb(0x3CE, 5); by = inportb(0x3CF); outportb(0x3CF, (by & 0xFC) | (mode & 0x03)); returnmode & 0x03; } voidvgasetreadplane(BYTEn) { _asm{ movdx, 0x3CE;/* gc[4]:Read Map Select */ moval, 4; outdx, al; incdx; mov al, n; out dx, al; } } voidvgasetplanemask(BYTEbymask) { _asm{ movdx, 0x3C4;/* sc[2]:Map Mask */ moval, 2; outdx, al; incdx; mov al, bymask; out dx, al; } } doubleTestFps(TESTFUNCpfun, intnFlags) { DWORDcntF; DWORD tmrold, tmrcur, tmrover; do{ cntF = 0; tmrold = *pbiosclock; tmrover = tmrold + (DWORD)(BIOSCLOCK_F * 10); /* 10s */ do{ if (nFlags & TESTFPS_WAITVR)WaitVR(); pfun(cntF); cntF++; tmrcur = *pbiosclock; }while((tmrcur<tmrover)&&(tmrcur>=tmrold)); if (tmrcur < tmrold)continue; }while(0); return cntF / ((tmrcur-tmrold)/BIOSCLOCK_F); } void filloffscreen(intc) { BYTEiP; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(c>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(c>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(c>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(c>>3)), SCANSIZE_VGA); bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsd(LPOFFSCREEN, byVGA[iP], SCANSIZE_VGA/sizeof(DWORD)); bymask <<= 1; } } void Test_C_V2S(DWORD iF) { intiX, iY; intiP; WORDpscan; BYTE far*pbyV; BYTE*pbyS; vgasetwritemode(0); pscan = 0; for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); pbyS = byVGA[iP]; pbyV = MK_FP(SEG_VIDEO, pscan); for(iX=0; iX<SCANSIZE_VGA; iX++) { *pbyS++ = *pbyV++; } } pscan += SCANSIZE_VGA; } } void Test_C_S2V(DWORD iF) { intiX, iY; BYTEiP; WORDpscan; BYTE far*pbyV; BYTE*pbyS; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); pscan = 0; for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); pbyS = byVGA[iP]; pbyV = MK_FP(SEG_VIDEO, pscan); for(iX=0; iX<SCANSIZE_VGA; iX++) { *pbyV++ = *pbyS++; } bymask <<= 1; } pscan += SCANSIZE_VGA; } } void Test_C_O2S(DWORD iF) { intiX, iY; BYTEiP; BYTE far*pbyV; BYTE*pbyS; vgasetwritemode(0); for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); pbyS = byVGA[iP]; pbyV = LPOFFSCREEN; for(iX=0; iX<SCANSIZE_VGA; iX++) { *pbyS++ = *pbyV++; } } } } void Test_C_S2O(DWORD iF) { intiX, iY; BYTEiP; BYTE far*pbyV; BYTE*pbyS; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); pbyS = byVGA[iP]; pbyV = LPOFFSCREEN; for(iX=0; iX<SCANSIZE_VGA; iX++) { *pbyV++ = *pbyS++; } bymask <<= 1; } } } void Test_C_V2O(DWORD iF) { intiX, iY; WORDpscan; BYTE far*pbyV; BYTE far*pbyO; vgasetwritemode(1); vgasetplanemask(0xFF); pscan = 0; for(iY=0; iY<SCR_H; iY++) { pbyO = LPOFFSCREEN; pbyV = MK_FP(SEG_VIDEO, pscan); for(iX=0; iX<SCANSIZE_VGA; iX++) { *pbyO++ = *pbyV++; } pscan += SCANSIZE_VGA; } } void Test_C_O2V(DWORD iF) { intiX, iY; WORDpscan; BYTE far*pbyV; BYTE far*pbyO; filloffscreen(iF & 0xF); vgasetwritemode(1); vgasetplanemask(0xFF); pscan = 0; for(iY=0; iY<SCR_H; iY++) { pbyO = LPOFFSCREEN; pbyV = MK_FP(SEG_VIDEO, pscan); for(iX=0; iX<SCANSIZE_VGA; iX++) { *pbyV++ = *pbyO++; } pscan += SCANSIZE_VGA; } } void Test_SB_V2S(DWORD iF) { intiY; intiP; WORDpscan; vgasetwritemode(0); pscan = 0; for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); repmovsb(byVGA[iP], MK_FP(SEG_VIDEO, pscan), SCANSIZE_VGA/sizeof(BYTE)); } pscan += SCANSIZE_VGA; } } void Test_SB_S2V(DWORD iF) { intiY; BYTEiP; WORDpscan; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); pscan = 0; for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsb(MK_FP(SEG_VIDEO, pscan), byVGA[iP], SCANSIZE_VGA/sizeof(BYTE)); bymask <<= 1; } pscan += SCANSIZE_VGA; } } void Test_SB_O2S(DWORD iF) { intiY; BYTEiP; vgasetwritemode(0); for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); repmovsb(byVGA[iP], LPOFFSCREEN, SCANSIZE_VGA/sizeof(BYTE)); } } } void Test_SB_S2O(DWORD iF) { intiY; BYTEiP; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsb(LPOFFSCREEN, byVGA[iP], SCANSIZE_VGA/sizeof(BYTE)); bymask <<= 1; } } } void Test_SB_V2O(DWORD iF) { intiY; WORDpscan; vgasetwritemode(1); vgasetplanemask(0xFF); pscan = 0; for(iY=0; iY<SCR_H; iY++) { repmovsb(LPOFFSCREEN, MK_FP(SEG_VIDEO, pscan), SCANSIZE_VGA/sizeof(BYTE)); pscan += SCANSIZE_VGA; } } void Test_SB_O2V(DWORD iF) { intiY; WORDpscan; filloffscreen(iF & 0xF); vgasetwritemode(1); vgasetplanemask(0xFF); pscan = 0; for(iY=0; iY<SCR_H; iY++) { repmovsb(MK_FP(SEG_VIDEO, pscan), LPOFFSCREEN, SCANSIZE_VGA/sizeof(BYTE)); pscan += SCANSIZE_VGA; } } void Test_SW_V2S(DWORD iF) { intiY; intiP; WORDpscan; vgasetwritemode(0); pscan = 0; for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); repmovsw(byVGA[iP], MK_FP(SEG_VIDEO, pscan), SCANSIZE_VGA/sizeof(WORD)); } pscan += SCANSIZE_VGA; } } void Test_SW_S2V(DWORD iF) { intiY; BYTEiP; WORDpscan; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); pscan = 0; for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsw(MK_FP(SEG_VIDEO, pscan), byVGA[iP], SCANSIZE_VGA/sizeof(WORD)); bymask <<= 1; } pscan += SCANSIZE_VGA; } } void Test_SW_O2S(DWORD iF) { intiY; BYTEiP; vgasetwritemode(0); for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); repmovsw(byVGA[iP], LPOFFSCREEN, SCANSIZE_VGA/sizeof(WORD)); } } } void Test_SW_S2O(DWORD iF) { intiY; BYTEiP; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsw(LPOFFSCREEN, byVGA[iP], SCANSIZE_VGA/sizeof(WORD)); bymask <<= 1; } } } void Test_SD_V2S(DWORD iF) { intiY; intiP; WORDpscan; vgasetwritemode(0); pscan = 0; for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); repmovsd(byVGA[iP], MK_FP(SEG_VIDEO, pscan), SCANSIZE_VGA/sizeof(DWORD)); } pscan += SCANSIZE_VGA; } } void Test_SD_S2V(DWORD iF) { intiY; BYTEiP; WORDpscan; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); pscan = 0; for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsd(MK_FP(SEG_VIDEO, pscan), byVGA[iP], SCANSIZE_VGA/sizeof(DWORD)); bymask <<= 1; } pscan += SCANSIZE_VGA; } } void Test_SD_O2S(DWORD iF) { intiY; BYTEiP; vgasetwritemode(0); for(iY=0; iY<SCR_H; iY++) { for(iP=0; iP<SCR_PLANES; iP++) { vgasetreadplane(iP); repmovsd(byVGA[iP], LPOFFSCREEN, SCANSIZE_VGA/sizeof(DWORD)); } } } void Test_SD_S2O(DWORD iF) { intiY; BYTEiP; BYTEbymask; vgasetwritemode(0); memset(byVGA[0], -(1&(((int)iF)>>0)), SCANSIZE_VGA); memset(byVGA[1], -(1&(((int)iF)>>1)), SCANSIZE_VGA); memset(byVGA[2], -(1&(((int)iF)>>2)), SCANSIZE_VGA); memset(byVGA[3], -(1&(((int)iF)>>3)), SCANSIZE_VGA); for(iY=0; iY<SCR_H; iY++) { bymask = 1; for(iP=0; iP<SCR_PLANES; iP++) { vgasetplanemask(bymask); repmovsd(LPOFFSCREEN, byVGA[iP], SCANSIZE_VGA/sizeof(DWORD)); bymask <<= 1; } } } intmain(void) { doublefpsC_V2S, fpsC_S2V, fpsC_O2S, fpsC_S2O, fpsC_V2O, fpsC_O2V; doublefpsSB_V2S, fpsSB_S2V, fpsSB_O2S, fpsSB_S2O, fpsSB_V2O, fpsSB_O2V; doublefpsSW_V2S, fpsSW_S2V, fpsSW_O2S, fpsSW_S2O; doublefpsSD_V2S, fpsSD_S2V, fpsSD_O2S, fpsSD_S2O; /* VGA 12h: 640*480*4bit */ vgasetvideomode(0x12); /* C language */ fpsC_V2S = TestFps((TESTFUNC)Test_C_V2S, 0); fpsC_S2V = TestFps((TESTFUNC)Test_C_S2V, 0); fpsC_O2S = TestFps((TESTFUNC)Test_C_O2S, 0); fpsC_S2O = TestFps((TESTFUNC)Test_C_S2O, 0); fpsC_V2O = TestFps((TESTFUNC)Test_C_V2O, 0); fpsC_O2V = TestFps((TESTFUNC)Test_C_O2V, 0); /* movsb */ fpsSB_V2S = TestFps((TESTFUNC)Test_SB_V2S, 0); fpsSB_S2V = TestFps((TESTFUNC)Test_SB_S2V, 0); fpsSB_O2S = TestFps((TESTFUNC)Test_SB_O2S, 0); fpsSB_S2O = TestFps((TESTFUNC)Test_SB_S2O, 0); fpsSB_V2O = TestFps((TESTFUNC)Test_SB_V2O, 0); fpsSB_O2V = TestFps((TESTFUNC)Test_SB_O2V, 0); /* movsw */ fpsSW_V2S = TestFps((TESTFUNC)Test_SW_V2S, 0); fpsSW_S2V = TestFps((TESTFUNC)Test_SW_S2V, 0); fpsSW_O2S = TestFps((TESTFUNC)Test_SW_O2S, 0); fpsSW_S2O = TestFps((TESTFUNC)Test_SW_S2O, 0); /* movsd */ fpsSD_V2S = TestFps((TESTFUNC)Test_SD_V2S, 0); fpsSD_S2V = TestFps((TESTFUNC)Test_SD_S2V, 0); fpsSD_O2S = TestFps((TESTFUNC)Test_SD_O2S, 0); fpsSD_S2O = TestFps((TESTFUNC)Test_SD_S2O, 0); /* Text Mode */ vgasetvideomode(0x3); /* out */ printf("[FPS: C]/n"); printf("Video to System:%16.4f/n", fpsC_V2S); printf("System to Video :%16.4f/n", fpsC_S2V); printf("OffScr to System:%16.4f/n", fpsC_O2S); printf("System to OffScr:%16.4f/n", fpsC_S2O); printf("Video to OffScr:%16.4f/n", fpsC_V2O); printf("OffScr to Video :%16.4f/n", fpsC_O2V); printf("[FPS: movsb]/n"); printf("Video to System:%16.4f/n", fpsSB_V2S); printf("System to Video :%16.4f/n", fpsSB_S2V); printf("OffScr to System:%16.4f/n", fpsSB_O2S); printf("System to OffScr:%16.4f/n", fpsSB_S2O); printf("Video to OffScr:%16.4f/n", fpsSB_V2O); printf("OffScr to Video :%16.4f/n", fpsSB_O2V); printf("[FPS: movsw]/n"); printf("Video to System:%16.4f/n", fpsSW_V2S); printf("System to Video :%16.4f/n", fpsSW_S2V); printf("OffScr to System:%16.4f/n", fpsSW_O2S); printf("System to OffScr:%16.4f/n", fpsSW_S2O); printf("[FPS: movsd]/n"); printf("Video to System:%16.4f/n", fpsSD_V2S); printf("System to Video :%16.4f/n", fpsSD_S2V); printf("OffScr to System:%16.4f/n", fpsSD_O2S); printf("System to OffScr:%16.4f/n", fpsSD_S2O); return 0; } |
本文地址:http://www.45fan.com/dnjc/73651.html