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

时间:2013-11-20 13:58:26

标签: opengl glsl gpu nvidia

我在OpenGL程序中使用binary着色器

我在一台机器(linux或windows)上编译一次。然后在其他机器上使用它来运行app。到现在它在GeForce 6x,QUADRO,KQUADRO.Now上工作正常,在NVIDIA TESLA或GRID上尝试它抛出:

  

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

Tesla GPUS已经很老了所以我可以假设硬件缺少这个功能。但是NVDIA GRID GPU怎么不支持这个功能呢?我有最新的驱动程序(319.72)与OpenGL 4.3一起安装。

特斯拉和GRID使用Ubuntu 12.04

1 个答案:

答案 0 :(得分:2)

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

您链接的扩展程序甚至提到了这一点:

  

如果实现确定,加载程序二进制文件也可能会失败       硬件或软件配置发生了变化       当程序二进制文件生成时,如已经编译       编译器的不兼容或过时版本。在这种情况下       应用程序应该回退到提供原始的OpenGL着色       语言源着色器,也许再次检索程序二进制文件       供将来使用。

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

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