Vulkan中的"#version 430 core"的理解

最近在学习Vulkan,结果在查看示例代码的时候:

#version 430 core
layout (local_size_x = 64) in;


layout(std430, binding=4 ) buffer INFO 
{
        vec2 info[];
};


void main()
{
    uint gid = gl_GlobalInvocationID.x;
    info[gid].x += 1.0;
    info[gid].y += 1.0;
    memoryBarrier();
}

对于如下语句出现了疑问

#version 430 core

这句话的意思是OpenGL必须是4.3以及以上的版本。

那么是不是意味着,如果设备上的OpenGL低于这个版本,那么我们编写的Vulkan代码就不能执行呢?

答案是否定的,目前我们开发Vulkan默认是使用GLSLOpenGL Shading Language)语言,然后编译完成后的操作符被直接映射成Vulkan的定义操作符。

换句话说,我们只要执行如下命令,

$ glslangValidator xx.comp --target-env vulkan1.0

能编译通过,就可以随意指定#version的版本。

这个版本号仅仅是GLSL语言在进行语法检查的时候需要的,而Vulkan是没有这个版本号需要的。

如果不使用GLSL语言编写,上述的#version应该都不会在语法中出现。

如下是常见的几个问题:

GL_KHR_vulkan_glsl扩展(GLSLVulkan的官方插件)中讲述的非常明确,只要有这个扩展,设备上的OpenGL版本是不需要关心的,只需要关心VulkanSPIR-V)的版本号就可以了。

如下:

参考链接


发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注