当设备未启用 geometryShader 功能时,vkQueueSubmit() 调用包括一个设置了 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT 位的 stageMask

vkQueueSubmit() call includes a stageMask with VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT bit set when device does not have geometryShader feature enabled

首先,我是 Vulkan 的新手(我使用的是 LWJGL 提供的绑定)。我知道我应该 copy/paste 更多代码,但我什至不知道现在什么是相关的(所以不要犹豫,问我一些具体的代码)。

我试着做类似的东西:

所以,暂时没有 vertex/fragment 个着色器。

我分配了一个Compute Pipeline和一个FrameBuffer。我有一个 {Queue/CommandPool/CommandBuffer} 用于计算,另一个用于渲染。

当我尝试提交图形队列时:

vkQueueSubmit(graphicQueue, renderPipeline.getFrameSubmission().getSubmitInfo(imageIndex));

我收到以下错误消息(来自验证):

ERROR OCCURED: Object: VK_NULL_HANDLE (Type = 0) | vkQueueSubmit() call includes a stageMask with VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT bit set when device does not have geometryShader feature enabled. The spec valid usage text states 'If the geometry shaders feature is not enabled, each element of pWaitDstStageMask must not contain VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkSubmitInfo-pWaitDstStageMask-00076)
ERROR OCCURED: Object: VK_NULL_HANDLE (Type = 0) | vkQueueSubmit() call includes a stageMask with VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT and/or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT bit(s) set when device does not have tessellationShader feature enabled. The spec valid usage text states 'If the tessellation shaders feature is not enabled, each element of pWaitDstStageMask must not contain VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT' (https://www.khronos.org/registry/vulkan/specs/1.0/html/vkspec.html#VUID-VkSubmitInfo-pWaitDstStageMask-00077)

我尝试将 VkSubmitInfo.pWaitDstStageMask 更改为不同的值(例如 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT、VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT、VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT...)但没有任何变化。

那么,最适合我的用例的 pWaitDstStageMask 是什么?

好的,我发现了我的问题: pWaitDstStageMask 必须是与 pWaitSemaphores 大小相同的数组。

我只放了 1 个阶段掩码,用于 2 个信号量。