您的位置:首页 > 其它

显卡间显示同步阶段性预研小结

2010-08-18 09:22 459 查看
显卡间显示同步阶段性预研小结
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.
G-Sync Compatible
Solutions:


Quadro 6000

Quadro 5000

Quadro FX 5800

Quadro FX 4800

5.
小结
从目前的研究来看,从软件上实现显卡间同步的功能目前存在很大挑战。
有兴趣或者有思路,就一起交流吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: