使用Direct3D时,CPU上的数学运算量是多少?

时间:2010-05-20 23:01:18

标签: graphics rendering direct3d

背景:我刚刚开始。我甚至没有触及Direct3D 11 API,而是在了解管道等等。

通过查看网络上的文档和信息,似乎应用程序正在处理一些计算。那就是,不是简单地将矩阵与GPU相乘,而是通过在 CPU 上运行的数学库来完成计算。我没有任何特定的资源可以指出,虽然我想我可以指向XNA Math Library或二月DX SDK中提供的样本。当您看到mViewProj = mView * mProj;之类的代码时,将在CPU上计算该投影。或者我错了吗?

如果你正在编写一个程序,你可以在屏幕上有10个立方体,你可以在哪里移动或旋转立方体,以及视点,你会在CPU上做什么计算?我想我会存储单个立方体的几何,然后转换表示实际实例的矩阵。然后我似乎会使用XNA数学库或我选择的另一个来转换模型空间中的每个立方体。然后获取世界空间中的坐标。然后将信息推送到GPU。

这是对CPU的大量计算。我错了吗?

  • 我是否因为信息和理解太少而得出结论?
  • 如果答案是STFW,我应该使用Google的条款?
  • 或者,如果我是对的,为什么这些计算也不会被推送到GPU?
编辑:顺便说一下,我没有使用XNA,但文档说明XNA Math Library取代了之前的DX Math库。 (我将SDK中的XNA库看作纯粹的模板库。)

1 个答案:

答案 0 :(得分:4)

“我是否根据太少的信息和理解得出结论?”

不像我们所有人那样做坏事,但总而言之:是的。

GPU正在做的事情通常取决于GPU驱动程序和您的访问方法。大多数时候你真的不在乎或不需要知道(除了好奇心和一般理解)。

对于mViewProj = mView * mProj;这很可能发生在CPU上。但它没有太大的负担(最多计算在100个循环中)。真正的诀窍是在“世界”上应用新的视图矩阵。每个顶点都需要或多或少地与阴影,纹理,光照等一起进行转换。如果这项工作将在GPU中完成(如果在CPU上完成,那么事情将会非常快地减速)。

通常,您可以对世界进行高级别更改,可能需要20次CPU绑定计算,GPU会根据更改来处理渲染世界所需的数百万或数十亿次计算。

在10个立方体示例中:您为每个多维数据集提供转换,您创建转换所需的任何数学都是CPU绑定的(有异常)。您还为视图提供了变换,再次创建变换矩阵可能是CPU绑定的。一旦你有了11个新的矩阵,就可以应用于世界。从硬件的角度来看,需要将11个矩阵复制到GPU ......这将非常非常快速地发生...一旦复制CPU完成并且GPU根据新数据重新计算世界,将其渲染到一个缓冲区并在屏幕上显示它。因此,对于10个立方体,CPU绑定计算是微不足道的。

查看XNA项目的一些反射代码,您将看到计算结束和XNA开始的位置(XNA将在GPU中完成所有操作)。