最近在学习Vulkan,结果在查看示例代码的时候:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#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(); } |
对于如下语句出现了疑问
|
1 |
#version 430 core |
这句话的意思是OpenGL必须是4.3以及以上的版本。
那么是不是意味着,如果设备上的OpenGL低于这个版本,那么我们编写的Vulkan代码就不能执行呢?
答案是否定的,目前我们开发Vulkan默认是使用GLSL(OpenGL Shading Language)语言,然后编译完成后的操作符被直接映射成Vulkan的定义操作符。
换句话说,我们只要执行如下命令,
|
1 |
$ glslangValidator xx.comp --target-env vulkan1.0 |
能编译通过,就可以随意指定#version的版本。
这个版本号仅仅是GLSL语言在进行语法检查的时候需要的,而Vulkan是没有这个版本号需要的。
如果不使用GLSL语言编写,上述的#version应该都不会在语法中出现。
GL_KHR_vulkan_glsl扩展(GLSL转Vulkan的官方插件)中讲述的非常明确,只要有这个扩展,设备上的OpenGL版本是不需要关心的,只需要关心Vulkan(SPIR-V)的版本号就可以了。


