2010-11-18 8 views
2

シェーダ(OpenGLバージョン3.3、GLSLバージョン1.5)を使用するOpenGLプログラムがあります。あなたがGPU上で動作するよう具体的に指示しない限り、シェーダが実際にCPU上で動作すると聞いたことがあります。 (もちろん、私がシェイダーを使用している理由は、CPUの代わりにGPUで計算を行うことによってレンダリングを高速化することです。これは私が望む動作ではありません)。これは本当ですか?もしそうなら、どのようにシェーダをGPU上で動かすことができますか?GPUでシェーダを実行するには

答えて

10

私はあなたがそれを聞いたかどうかは分かりませんが、グラフィックスベンダーのドライバーが途中であると仮定すると、シェーダーはGPU上で実行されます。

+1

+1現代のカードでさえもいくつかの機能は、OpenGLがソフトウェアモードでシェーダを評価して、かなり恐ろしい結果をもたらす(GL_LINE_SMOOTHは古典的な例です)。 –

+0

Mac OS XのOpenGLスタックはCPUにフォールバックできます(何かが間違っている場合)。 – Stringer

+0

OSX [even support](http://developer.apple.com/graphicsimaging/opengl/capabilities/)3.3? – genpfault

2

私は、ドライバがCPU上ではなくGPU上のすべてのシェーダを常に実行しようとしていることは間違いありません。しかし、現代のビデオカードのすべてがシェーダ操作の全機能セットをサポートしているわけではありません。例えば、私が知っているOpenGL 4.0の拡張機能GL_ARB_gpu_shader_fp64は、部分的にサポートされています。したがって、ドライバはCPU上のソフトウェアモード内でいくつかの操作をエミュレートする必要があります。拡張機能については、glGetStringにGL_EXTENSIONSパラメータを指定してカードを確認してください。