web-dev-qa-db-ja.com

AMD GL_EXT_gpu_shader4拡張

基本的なOpenGLドライバーのバグに遭遇しましたが、どこに報告すればよいかわかりません。

ドライバーがそれ自体を識別する方法と、RCを作成する方法を次に示します。

OpenGL vendor: X.Org
OpenGL renderer: AMD CARRIZO (DRM 3.26.0, 4.18.0-13-generic, LLVM 7.0.0)
OpenGL version: 4.4 (Compatibility Profile) Mesa 18.2.2
v - using GL version 2.0 (core)

拡張リストにARB_gpu_shader5がありますが、EXT_gpu_shader4はありません。

このシェーダーはコンパイルに失敗します

#version 120
#extension GL_EXT_gpu_shader4: enable
...
uniform usampler2D u_stencilTexture;        

このエラーでは:

interaction VFWARNING:CompileShader(glprogs/interaction.fs): FAILED
0:2(12): warning: extension `GL_EXT_gpu_shader4' unsupported in fragment shader
0:27(20): error: syntax error, unexpected NEW_IDENTIFIER, expecting '{'

だから私の質問は:usgller拡張機能を備えたバージョン120シェーダーを、どうやらOpengl-4.4対応のGPU /ドライバー上に構築するにはどうすればよいですか?

好ましくは、クロスプラットフォーム、クロスベンダーの方法で。

同じシェーダーがLinuxとWindowsの両方の幅広いデバイス/ドライバーで問題なくコンパイルされることに注意してください。

2
Anton Duzenko

あなたの問題は、GLS 1.20またはOpenGL 2.0である#Version 120をマークしていることです。理想的には、少なくとも#version 400を使用する必要があります

この拡張機能は、技術的にGLSL 4.0.x以降およびOpenGL 4.0用に設計されています。これは、OpenGL 4.0および4.2のコアの改訂版リリースではオプションでした。サポートを保証するには、GLSLバージョン4.20を使用する必要があります(つまり、#version 420ではなく#version 420)。 130以上の上位互換性のあるシェーダーで動作する可能性がありますが、これは実装固有であるため保証されません。

最近のチップとMesaサポートの時点で、概要を http://www.mesamatrix.net で確認できます。

ご覧のとおり、freedrino、非常に古いnVidiaチップ、非常に古いIntelチップを除くすべてが、少なくともGLSLバージョン4.20をサポートしています。

古いMacとコードを共有する予定がない限り、安全に再生し、シェーダーには#version 420を使用することを強くお勧めします。