最近在学习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
)的版本号就可以了。