GL_ARB_gpu_shader_fp64根据glslangValidator.exe不支持,但我真的支持吗?
GL_ARB_gpu_shader_fp64 not supported according to glslangValidator.exe, but I actually do?
我有一个 AMD Radeon RX 480,我写了一个使用 GL_ARB_gpu_shader_fp64 扩展的片段着色器 (GLSL 4.6);
根据 Database,我的 GPU 应该支持 GL_ARB_gpu_shader_fp64 扩展,但是当我使用 glslangValidator.exe 编译着色器时,我得到:
'#extension':不支持扩展名:GL_ARB_gpu_shader_fp64
同样的事情发生在我的另一台电脑上,它有一个 Intel Graphics HD 620(也支持该扩展)。
谁能给我解释一下这是怎么回事?
当使用 glslang 将 GLSL 编译成任何形式的 SPIR-V 时,可用的扩展集不关心您正在编译的平台的性质。毕竟,中间语言的全部意义在于能够在一个平台上预编译您的着色器,然后将其以编译后的形式运送到用户执行它的地方。届时将针对该平台的可用扩展集检查任何扩展。
所以基本上,glslang 假设任何对目标语言有效的扩展都是有效的。
但是,当将 GLSL 编译成 SPIR-V 以供 Vulkan 使用时,glslang 知道的扩展集是那些适合 Vulkan 使用的扩展。这些扩展可以在 this GLSL Github repo 中找到。这组扩展是 Vulkan 特有的。
我有一个 AMD Radeon RX 480,我写了一个使用 GL_ARB_gpu_shader_fp64 扩展的片段着色器 (GLSL 4.6);
根据 Database,我的 GPU 应该支持 GL_ARB_gpu_shader_fp64 扩展,但是当我使用 glslangValidator.exe 编译着色器时,我得到:
'#extension':不支持扩展名:GL_ARB_gpu_shader_fp64
同样的事情发生在我的另一台电脑上,它有一个 Intel Graphics HD 620(也支持该扩展)。
谁能给我解释一下这是怎么回事?
当使用 glslang 将 GLSL 编译成任何形式的 SPIR-V 时,可用的扩展集不关心您正在编译的平台的性质。毕竟,中间语言的全部意义在于能够在一个平台上预编译您的着色器,然后将其以编译后的形式运送到用户执行它的地方。届时将针对该平台的可用扩展集检查任何扩展。
所以基本上,glslang 假设任何对目标语言有效的扩展都是有效的。
但是,当将 GLSL 编译成 SPIR-V 以供 Vulkan 使用时,glslang 知道的扩展集是那些适合 Vulkan 使用的扩展。这些扩展可以在 this GLSL Github repo 中找到。这组扩展是 Vulkan 特有的。