這是(簡單的)實例化着色器,我可以想出,這基本上只是變換了一堆2D原語:Vulkan中的實例化GLSL着色器?
#version 400
#extension GL_ARB_draw_instanced : enable
#extension GL_ARB_shading_language_420pack : enable
layout(std140, binding = 0) uniform VConstants {
vec4 vfuniforms[48];
};
in vec4 pos;
void main() {
gl_Position = vec4(0.0,0,0.0,1);
gl_Position.x = dot(pos, vfuniforms[int(float(gl_InstanceID) * 2.0)]);
gl_Position.y = dot(pos, vfuniforms[int(float(gl_InstanceID) * 2.0 + 1.0)]);
}
如果我嘗試用自帶的glslangValidator編譯這SPIR-V福爾康SDK,我得到:
WARNING: 0:2: '#extension' : extension not supported: GL_ARB_draw_instanced
ERROR: 0:14: 'gl_InstanceID' : undeclared identifier
ERROR: 1 compilation errors. No code generated.
如果我刪除#extension GL_ARB_draw_instanced
線,我仍然得到gl_InstanceID
錯誤。是否可以編寫實例化GLSL並將其編譯爲SPIR-V?如果是這樣,我做錯了什麼?
我仍然顯然需要'#extension GL_ARB_shading_language_420pack:enable',否則我得到'layout(binding = ...)'的編譯錯誤。 GL_KHR_vulkan_glsl的文檔使用佈局綁定,但似乎沒有提到這一點)。無論如何,我的實例着色器現在編譯 - 謝謝。 – MuertoExcobito
@MuertoExcobito:您的#version 400聲明可能會讓您感到困惑。他們真的應該有他們自己的版本號:'#version 100 vulkan',這是GLSL ES擁有'#version 300 es'的方式。 –