AMD GL_EXT_gpu_shader4 扩展

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 '{'

所以我的问题是:如何获得带有 usampler 扩展的 120 版本着色器,以在看似支持 Opengl-4.4 的 GPU/驱动程序上构建?

最好采用跨平台、跨供应商的方式。

请注意,相同的着色器可以在 Linux 和 Windows 上的各种设备/驱动程序上顺利编译。

答案1

您的问题是您标记了 #Version 120,即 GLS 1.20 或 OpenGL 2.0。理想情况下,您至少应使用 #version 400

该扩展在技术上是为 GLSL 4.0.x 及更高版本和 OpenGL 4.0 设计的。在 OpenGL 4.0 的修订版本和 4.2 的核心版本中它是可选的。为确保支持,您应使用 GLSL 版本 4.20(即 #version 420 而不是 #version 120)。它可能在 130+ 的向前兼容着色器中运行,但这不能保证,因为它是特定于实现的。

关于最近的芯片和 Mesa 支持,你可以在以下网址查看概述http://www.mesamatrix.net

如你所见,除了 freedrino、非常老的 nVidia 芯片和非常老的英特尔芯片之外,其他芯片都支持至少 GLSL 版本 4.20

我强烈建议您谨慎行事,并使用#version 420 作为您的着色器,除非您打算与旧的 Mac 共享代码。

相关内容