GPU如何处理顶点着色器?

时间:2014-06-25 15:38:57

标签: shader gpu vertex-shader

大家。

我几乎没有问题:

  1. 顶点着色器是针对每个顶点运行一次,还是每个基元每个顶点运行一次(即基元数量的三倍)?
  2. 这些着色器如何映射到GPU的内核:每个内核一个着色器,或每个内核一个原语(仍然用于顶点着色器)?
  3. 如果每个顶点只有一个着色器调用,映射到一个内核,GPU如何跟踪顶点/基元依赖关系? (基元可以共享一些顶点;跟踪这些依赖关系 - 在每个顶点基础上 - 真的很昂贵。我不能相信GPU这样做......)
  4. 提前感谢您的回复。

1 个答案:

答案 0 :(得分:1)

  1. 答案取决于,图形卡接线试图根据缓冲和批处理将顶点阴影的次数减少到最小。 这一切都在这里解释: http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/ 顶点缓冲区标记有多个缓存行(听取从索引缓冲区中提取的索引)。 IA单元从索引缓冲区中提取顶点并填充缓存,然后当它已满(模数原始大小)时,它将被发送到卡调度程序硬件,该硬件将缓存行分配到一组着色核心。然后,IA阶段将继续在处理先前请求的核心单元的并行上填充新的高速缓存行。并且永远不会等到索引缓冲区完全耗尽或核心单元都忙。当结果返回时,它们将阴影顶点数据放入某些内存中,稍后将由原始程序集引用。

  2. 有两个不同的阶段,输入程序集(后面跟着顶点着色)和后来出现的原始程序集。图形管道比通用内核更专业,我怀疑所有阶段都是作为通用内核实现的。特别是在较旧的硬件上,特别是具有专门的阴影顶点输出内存的硬件,它们需要特殊的布线。

  3. 查看文章系列,其全部解释,没有完美的1-1关系,如果某些顶点在索引缓冲区中太远,则会重新着色。