使用顶点/像素着色器的通用计算(Open GL / DirectX)

时间:2013-09-06 19:58:35

标签: opengl opengl-es directx shader gpgpu

我有一个关于计算着色器的问题。是否可以在DX 9中使用计算着色器?如果GPU上没有计算着色器片段,是否仍然可以使用带有DX9驱动程序的计算着色器? (就像IMG所说的那样,SGX 545没有它,但SGX 6X将会拥有它)。我想知道如果我可以使用DirectX9或OpenGL驱动程序在SGXs GPU上进行一些简单的通用编程。

另外,无论如何我可以使用OpenGL顶点着色器进行GPGPU编程吗?这就是我的想法:   我将我的矩阵/数据加载到顶点缓冲区,并将它们绑定到程序上下文。我将一些其他静态变量加载到统一变量中,并将我的实际计算程序加载到顶点着色器中。它到目前为止看起来都是可见的(是吗?)但是顶点着色器的输出将经过光栅化并将被提供给片段着色器(根据openGL中的内容)。无论如何我可以阻止数据通过整个图形pipleline,或者我可以在顶点着色器完成执行后拦截,并以某种方式读取值和执行时间?

2 个答案:

答案 0 :(得分:4)

  

无论如何我可以使用OpenGL顶点着色器进行GPGPU编程吗?

离开顶点着色器的东西通常在raserization阶段进行插值。在旧版本的openGL中,您可以指定是否应对特定变量进行此类插值。我不知道你是否仍然可以这样做......是的,你仍然可以(对于小费来说是日期)...但在我看来,更好的方法是使用片段着色器。渲染到一个完整的帧,使用一个简单的顶点着色器渲染两个覆盖整个帧(四边形)的三角形,就像任何后期处理效果一样,并在片段着色器中进行计算。将要用作输入的数据放在纹理中,并使用帧缓冲对象(FBO)将结果渲染到其他纹理。

答案 1 :(得分:3)

  

无论如何,我可以阻止数据通过整个   图形pipleline,或者我可以在顶点着色器完成后拦截   执行,并以某种方式读取值和时间   执行?

是。
您可以使用顶点着色器进行计算,关闭曲面细分阶段和几何着色器,并截取变换反馈的结果。

以下是OpenGL Rendering Pipeline

可选阶段有条纹边框 可编程阶段为蓝色。

OpenGL Rendering Pipeline