Xbox 360上的GPU编程

时间:2020-03-06 14:38:34  来源:igfitidea点击:

我正在寻找有关Xbox 360上XNA的一些见解,主要是是否有可能在其GPU上运行基于矢量的浮点数学?

如果有办法,我们能指出我正确的方向吗?

解决方案

我并没有声称自己是专家,但是希望这可以为我们提供有益的指导。

是否有可能?是的。我们可能已经知道GPU擅长此类计算(因此有一个问题),实际上我们可以使用XNA来控制GPU。它是否适合需求是另一回事。

为了利用GPU,我们可能想使用HLSL编写着色器。在Reimers的XNA上下文中,对HLSL进行了不错的介绍,我们可能需要进行介绍。值得注意的是,该教程着重于使GPU进行与图形相关的运算,但是我们在着色器中编写的内容完全取决于我们。如果我们基于向量的浮点数学运算是为了渲染(因此可以保留在GPU域中),那么我们很幸运,可以在这里停止。

可能不需要在屏幕上渲染。现在,就算做数学而言,我们在HLSL中具有相当大的灵活性。但是,将结果发送到CPU并不是系统的设计方式。这对我来说变得越来越模糊,但是Shawn Hargreaves(XNA开发人员)在不止一种情况下指出,从GPU(而不是在屏幕上渲染)中获取输出并不是一件容易的事,并且会影响性​​能。检索数据涉及对GetData的调用,这将导致管道停顿。

这样就可以了。 XNA框架将使我们可以为360(支持Shader Model 3.0和一些扩展)编写着色器,尽管可能无法满足需求,但也可能会得到这些结果。

如上所述,XBox360完全能够进行任何HLSL计算,并且特别地,它可以处理Vertex和Pixel着色器模型3指令,并具有特定于平台的增强指令集。

由于HLSL实际上是基于矢量的,因此我们拥有需要点,叉,矢量运算和矩阵计算的所有工具。
如果要将计算结果发送到GPU并在CPU上编辑/使用结果,则可以写入纹理,然后在CPU端获取纹理,然后将其用于粒子或者物理交互(例如水)进行解码,这是很少的。我们可能想要这样做的场合。