是否可以从非XYZ顶点缓冲区在GPU上构建顶点?

时间:2016-05-08 17:38:58

标签: c++ directx directx-11 simd

我正在编写一个粒子模拟,其中使用Intel AVX更新逻辑。我正在使用SoA方法来最大化我的“SIMD友好性”,但我将粒子位置组件改组成XYZ格式 更新顶点缓冲区时。

是否可以排除随机播放部分并简单地传递顶点数据 XXYYZZ格式并在着色器阶段构造每个顶点?

我的第一个想法是使用三个顶点缓冲区,将 x y z 组件分开,并使用相同的下标索引构造每个顶点访问顶点的x,y和z分量。

我知道这是传统方式,但我想强调这只是一个实验。也许任何人都对这种方法有了一些了解(如果可能的话)和/或可以指出我正确的方向?也许还有一个名字呢?

谢谢!

1 个答案:

答案 0 :(得分:4)

对于如何使用顶点提供GPU,没有任何限制。您可以自定义输入布局以从任意数量的顶点缓冲区读取值,在您的示例中,您将至少有三个元素。在顶点着色器中,您将三个元素作为三个标量接收并将它们调回。唯一真正的限制是每个缓冲区中的每个值都在相同的索引处。

在性能方面,除非你想获得GPU的前1%性能,否则你会看到与井交错顶点相比没有差别。这主要影响带宽和L2缓存未命中,因此除非你有数以百万计的微粒,否则不太可能发生。如果有,您可以使用计算着色器在预处理中交错数据。