显卡间显示同步阶段性预研小结
2010-08-18 09:22
459 查看
显卡间显示同步阶段性预研小结
1.
问题:
计划通过该预研,解决显卡间显示同步的问题(同步精度1ms以内)。
2.
现状
未解决。
3.
尝试过的思路
3.1
思路:交换显示缓冲区之后,立即获取时间,获取前后两次时间的差,从理论上讲,这个时间就是显卡均匀的垂直同步时间
结果:未解决问题。获取到的时间是非常不均匀的,误差从几MS到十几MS。
参考代码:
3.2
思路:等待显卡视频显示同步信号,通过获取前后两次信号的时间差,从理论上讲,这个差值就是均匀的垂直同步时间。
结果:未解决问题。获取到的时间是非常不均匀的,误差从几MS到十几MS。
参考代码:
3.3
获取显卡设备的信号。通过监听显卡设备/dev/nvidia0的事件,获取显卡的垂直同步信号。从理论上讲,这种方式应该比较理想。
结果:未解决问题。Poll()一直阻塞,说明未检测到设备事件。
参考代码:
3.4
思路:从显卡驱动着手。修改驱动代码,使在垂直同步事件时,对外部应用发出信号。从理论上讲,这种方式最理想,精度可控制在1ms
结果:未解决问题。尝试寻找nvidia显卡驱动开源代码,未果。常规显卡驱动NVIDIA*.run中仅包含了一些头文件,估计仅是针对不同应用平台对模块的一些封装。
4.
目前NVIDIA高端显卡QUADRO系列具有外界垂直同步信号功能,其术语叫做G_Sync或FrameLock/GenLock.。但这样的显卡市价好几万。
NVIDIA Quadro
G-Sync
G-Sync Compatible
Solutions:
Quadro 6000
Quadro 5000
Quadro FX 5800
Quadro FX 4800
5.
小结
从目前的研究来看,从软件上实现显卡间同步的功能目前存在很大挑战。
有兴趣或者有思路,就一起交流吧。
1.
问题:
计划通过该预研,解决显卡间显示同步的问题(同步精度1ms以内)。
2.
现状
未解决。
3.
尝试过的思路
3.1
思路:交换显示缓冲区之后,立即获取时间,获取前后两次时间的差,从理论上讲,这个时间就是显卡均匀的垂直同步时间
结果:未解决问题。获取到的时间是非常不均匀的,误差从几MS到十几MS。
参考代码:
{ TimeUse(“垂直同步时间:”); glutSwapBuffers(); }
3.2
思路:等待显卡视频显示同步信号,通过获取前后两次信号的时间差,从理论上讲,这个差值就是均匀的垂直同步时间。
结果:未解决问题。获取到的时间是非常不均匀的,误差从几MS到十几MS。
参考代码:
while(iLoop<20) { iRet = glXGetVideoSyncSGI(&retraceCount); #if 0 printf("retraceCount = %d,iRet=%d/n", retraceCount,iRet); glXWaitVideoSyncSGI(2, (retraceCount+1)%2, &retraceCount); #else if(retraceCount<=s_retraceCount) { continue; } #endif s_retraceCount = retraceCount; gettimeofday(&tTime2, NULL); ulDiff = (unsigned long)(((int)(tTime2.tv_sec-tTime1.tv_sec))*1000 + ((int)(tTime2.tv_usec-tTime1.tv_usec))/1000); tTime1 = tTime2; printf("垂直同步时间:= %d ", ulDiff); iLoop++; }
3.3
获取显卡设备的信号。通过监听显卡设备/dev/nvidia0的事件,获取显卡的垂直同步信号。从理论上讲,这种方式应该比较理想。
结果:未解决问题。Poll()一直阻塞,说明未检测到设备事件。
参考代码:
{ static struct timeval tTime1, tTime2; while(1) { pollVerticalSync.fd = verticalSyncFD; pollVerticalSync.events = POLLIN; pollVerticalSync.revents = 0xffff; poll(&pollVerticalSync, 1, -1); gettimeofday(&tTime2, NULL); ulDiff = (unsigned long)(((int)(tTime2.tv_sec-tTime1.tv_sec))*1000 + ((int)(tTime2.tv_usec-tTime1.tv_usec))/1000); s_tTime1 = tTime2; printf("垂直同步时间:= %d ms /n", ulDiff); } }
3.4
思路:从显卡驱动着手。修改驱动代码,使在垂直同步事件时,对外部应用发出信号。从理论上讲,这种方式最理想,精度可控制在1ms
结果:未解决问题。尝试寻找nvidia显卡驱动开源代码,未果。常规显卡驱动NVIDIA*.run中仅包含了一些头文件,估计仅是针对不同应用平台对模块的一些封装。
4.
目前NVIDIA高端显卡QUADRO系列具有外界垂直同步信号功能,其术语叫做G_Sync或FrameLock/GenLock.。但这样的显卡市价好几万。
NVIDIA Quadro
G-Sync
NVIDIA Quadro® G-Sync option card enables advanced visualization and collaborative environments. Featuring frame lock, genlock, and swap lock functionality, Quadro G-Sync solution provides synchronized multi-system and multi-display arrangements. Quadro G-Sync card is designed to be combined with a Quadro ultra-high-end professional graphics solution and fits in any available expansion slot within 6 inches of the Quadro G-Sync connector. All data and power to the Quadro G-Sync is directly from the Quadro graphics solution. |
Solutions:
Quadro 6000
Quadro 5000
Quadro FX 5800
Quadro FX 4800
5.
小结
从目前的研究来看,从软件上实现显卡间同步的功能目前存在很大挑战。
有兴趣或者有思路,就一起交流吧。
相关文章推荐
- 使用ATI9550显卡实现显示器和电视同步显示
- 手机站同步后频道页/内容页图片不显示解决办法
- 基于FPGA的LCD+CMOS视频采集显示使用小结
- (实验小结)主从配置不同步的解决(小白踩雷点)
- android手机无法同步google账户,显示您的用户名和密码不匹配解决办法
- ubuntu 关闭显示,关闭显卡,命令与图形切换
- 删除Ati显卡桌面右键菜单(配置可交换显卡,显示卡属性,图形选项,图形属性)
- ”下载到itunes的软件不能同步到iphone5手机里呢?总是显示复制或应用或同步“的解决
- Q盘项目小结――云端传输 轻松同步
- 在Activity中获取AsyncTask中更新progress的值,可用在文件的上传和下载同步显示进度
- repo sync同步下来之后,git branch 显示“no branches”
- 工作小结(二十二)-数字千分位显示
- 解决CxGrid Filter 后,通过 Dataset 循环时得出的结果与 Grid显示不同步的问题.
- xml的格式化显示问题小结
- SQL Server实时同步更新远程数据库遇到的问题小结
- asp.net MVC SignalR 与数据库 实时同步显示
- 在视图中同步显示鼠标的位置
- TerraExplorer_proC#开发阶段性小结
- PHP实现前台同步显示后台任务进度
- [RK3288][Android6.0] Apk设置显示旋转过程小结