Glsl SPIR-V能力(几何)要求是什么
我有两个帧缓冲区。首先,一个是分层的。并将HDR图像渲染到立方体贴图。 在此Renderpass中,将使用几何体着色器 调试层给我以下错误消息Glsl SPIR-V能力(几何)要求是什么,glsl,vulkan,geometry-shader,spir-v,Glsl,Vulkan,Geometry Shader,Spir V,我有两个帧缓冲区。首先,一个是分层的。并将HDR图像渲染到立方体贴图。 在此Renderpass中,将使用几何体着色器 调试层给我以下错误消息 [VAL][VUID-VkShaderModuleCreateInfo-pCode-01091] Validation Error: [ VUID-VkShaderModuleCreateInfo-pCode-01091 ] Object 0: handle = 0x14f9a58bfe8, type = VK_OBJECT_TYPE_D
[VAL][VUID-VkShaderModuleCreateInfo-pCode-01091] Validation Error: [ VUID-VkShaderModuleCreateInfo-pCode-01091 ]
Object 0: handle = 0x14f9a58bfe8, type = VK_OBJECT_TYPE_DEVICE;
| MessageID = 0xa7bb8db6 | vkCreateShaderModule(): The SPIR-V Capability (Geometry) was declared, but none of the requirements were met to use it.
The Vulkan spec states: If pCode declares any of the capabilities listed in the SPIR-V Environment appendix, one of the corresponding requirements must be satisfied (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkShaderModuleCreateInfo-pCode-01091)
我搜索了SPIR-V几何体着色器要求,但找不到缺少的内容。
我的几何体着色器代码是
#version 450 core
layout(triangles, invocations = 6) in;
layout(triangle_strip, max_vertices = 3) out;
void main()
{
for(int i = 0; i < 3; i++)
{
gl_Layer = gl_InvocationID ;
gl_Position = gl_in[i].gl_Position + vec4(vec3(gl_InvocationID)/5 , 1);
EmitVertex();
}
EndPrimitive();
}
#版本450核心
布局(三角形,调用=6)英寸;
布局(三角形带,最大顶点=3)输出;
void main()
{
对于(int i=0;i<3;i++)
{
gl_层=gl_调用ID;
gl_Position=gl_in[i].gl_Position+vec4(vec3(gl_调用id)/5,1);
发射顶点();
}
EndPrimitive();
}
SPIR-V规范概述。您在Vulkan设备中激活了哪些功能?你的问题不是关于SPIR-V;GLSL-to-SPIR-V编译器是输出SPIR-V功能的编译器;您需要做的是提供匹配的Vulkan功能。我只是启用了几何体着色器<代码>VkPhysicalDeviceFeatures设备特性{}代码>deviceFeatures.geometryShader=VK\u TRUE代码>现在看来还可以。非常感谢。