opengl - 使用顶点/像素着色器(Open GL/DirectX)进行通用计算

标签 opengl opengl-es directx shader gpgpu

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

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

最佳答案

is there anyway I can use OpenGL vertex shaders for GPGPU programming?



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

关于opengl - 使用顶点/像素着色器(Open GL/DirectX)进行通用计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18665680/

相关文章:

c++ - 了解着色器编程

c - 使用 openMP 进行 OpenGL 3D 渲染

Java - LWJGL 屏幕故障

OpenGL 色彩空间转换

java - 如何在Android OpenGL中正确绘制不透明的纹理?

java - 如何检查 3D 对象是否与 OpenGL ES 2 中的射线相交 - Android

c++ - Direct2D 中的双缓冲?

c++ - 精确的纹理叠加

java - JOGL 2.0 的 GLProfile 中的空指针异常

c++ - 在 OpenGL ES 2.0 中测量渲染到纹理的性能