ATI的driver code里已经有我修改的几十行代码了
对于整个版本控制和check in code的严谨性非常值得学习

最近手上有个EPR是关于Vista下WDM(Window Desktop Manager)在MultiMonitor下的issue
跟来跟去最后发现是所谓Guard Band这么一说



这玩意的实际意义是
1. Vertex的浮点精度控制在已知范围内
    这样在设计对应管线时就可以使用定点数
    算得也快一些,成本也相应降低

2. 避免昂贵的View frustum clipping,一旦出现下图C的这种情况,其代价为
    Extra vertices produced, costing more bandwidth
    CPU cost for interpolation of x,y,z, u,v, color, specular, alpha and fog
    Breaking up of strips and fans
    Poor vertex locality of new vertices, which hurts CPU and vertex cache coherency



MS的standard是说16K就够了(d3dref里的实现好象就是这么多)
ATI(亚鼎)的不同系列卡有不同处理(俺不泄蜜:)
NVIDIA(硬威大)比较吊,就文中看来,RIVA就有4K了,而从Geforce256起竟然有-100,000,000 to +100,000,000
我只能说够硬够威够大,NVIDIA的确比较不鸟MS,的确够超前(高精度下一些critical的问题就少多了),的确有钱(别忘了这是成本)

PS,大家的中文名字都起得比较有创意~

附参考文献: /Files/oiramario/Guard_Band_Clipping.rar
posted on 2007-01-15 11:37 千里马肝 阅读(417) 评论(6)  编辑 收藏

  回复  引用    
2007-01-16 00:06 | circles [未注册用户]
文笔很浅显,我可以假装自己看懂了:P
  回复  引用    
2007-01-16 13:19 | mrTony [未注册用户]
长见识了.有一点出不太明白,想讨论一下,
首先我对于显卡驱动的渲染过程不是很了解(但是对于软件渲染了解一些), 按照一般的理论,光删化之前,必须要完成剪裁,对吧?对于图中B的三角形,在光删化的时候,也需要剪裁吧,你的意图是不是在剪裁的时候只计算剪裁产生屏幕的顶点,而对于u,v, color, specular, alpha and fog,这些只需要计算梯度就可以的,就没必要参与剪裁了,right?
第二,对于游戏,和一般的应用来说,跨度超越整个屏幕的三角形的面数应该不会很多,所以这个Guard Band 应该也不是越大越好.
  回复  引用  查看    
2007-01-16 22:41 | chaz      
楼上说的剪裁是指scissor还是clip?
我理解的意思是有了保护范围,像B这类的面就不必clip了,viewport直接做scissor test就行了。

btw,“硬威大”这个名字好有气势啊……
  回复  引用    
2007-01-17 13:43 | mrTony [未注册用户]
我指的是clip.
如果B不进行clip操作,那么B中所有的象素点都要进行scissor test,这样做是不是会影响效率,因为很多点显然都不在此效范围内.还有如果scissor test可以满足要求的话,Guard Band的做用如何体现?B和C对于scissor test是等效的.
或者把上述观点完全推翻,假设是通过scissor test来处理,那么Guard Band的唯一用处是用来解决精度问题,因为B和C的区别,就在于他们投影的位置可能会超出屏幕的定点数的精度.但是我怀疑这样做效率损失会比得到的多.

  回复  引用  查看    
2007-01-17 21:28 | chaz      
QUOTE:"This also could be passed to hardware, and the parts of B lie outside of viewport would be scissored away. This could be faster than software clipping it for all but very large triangles."

对于这个图示可能直接scissor test的效率不见得比clip后再处理来得高。但是假设许多大小适中的三角形出现在viewport边界,如果没有guard band那么势必全部要做clipping,这样就不得不加顶点,导致原来的vertex cache被破坏,同时还带来其他一系列问题。这个时候,clip和scissor test的效率就完全不在一个等量级上了。显然,一般的程序中,以上情况要比出现many very large triangles多。
  回复  引用  查看    
2007-01-18 13:12 | mrTony      
那个文档的确那么描述的,但是如果这样的话,以前好象有个文章讲"modern software renderer",里面的填充算法采用的是类似光线跟踪的方法,不知道现在的显卡是不是这么处理的.
不管怎么样,这个思路可以借鉴一下,有时间试试.

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印
 


<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

与我联系

常用链接

留言簿(33)

我参与的团队

我的标签

随笔档案(295)

文章档案(1)

好友

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行