无法从 NVIDIA GRID GPU 上的二进制文件加载 GLSL 着色器



我在OpenGL程序中使用二进制着色器

我在一台机器(linux或windows)上编译过一次,然后在其他机器上使用它来运行应用程序。到目前为止,它在GeForce 6x、QUADRO、KQUADRO上运行良好。现在,在NVIDIA TESLA或GRID上尝试它会抛出:

无法加载程序二进制文件。二进制文件与不兼容当前驱动程序/硬件组合。错误:1005

特斯拉GPUS相当旧,所以我可以认为硬件缺乏这一功能。但是NVDIA GRID GPU怎么不支持这个功能呢?我安装了OpenGL 4.3的最新驱动程序(319.72)。

特斯拉和GRID使用Ubuntu 12.04

这本身不是硬件功能。编译后的二进制文件是特定于体系结构和驱动程序版本的。通常,除了在本地缓存着色器之外,不应该使用二进制着色器。即使在同一台机器上,从一个驱动程序版本到另一个,也不能保证编译后的二进制文件能够工作。

你链接到的扩展甚至提到了这一点:

如果实现确定硬件或软件配置从当生成程序二进制文件时,例如使用编译器的不兼容或过时的版本。在这种情况下应用程序应该返回到提供原始OpenGL着色语言源着色器,并可能再次检索程序二进制文件以备将来使用。

您可以使用预编译的二进制着色器免费交付软件,但请注意,由于OpenGL没有定义标准二进制格式,因此它们可能仅适用于特定的GPU架构和驱动程序版本。这适用于某些固定规格。系统,但通常为了可移植性,您需要以原始着色器源代码的形式提供回退。这将二进制GLSL程序主要降级为缓存,而不是可移植的分发。

HLSL着色器可以以二进制形式分发,因为Microsoft有标准的字节码格式,并且驱动程序将其转换为GPU的本机指令集。不幸的是,OpenGL没有这样的等价物。允许单个供应商扩展二进制程序系统并定义多种二进制格式(更多详细信息,请参阅实现定义的限制:GL_NUM_PROGRAM_BINARY_FORMATS),其中一些格式可能比其他格式更具可移植性,但二进制GLSL程序不需要在任何硬件/软件配置上工作,而不是在编译/链接它们的配置上工作。

最新更新