首页 > 解决方案 > 当设备未启用几何着色器功能时,vkQueueSubmit() 调用包括一个设置了 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT 位的 stageMask

问题描述

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

我试着做这样的事情:

所以,暂时没有顶点/片段着色器。

我分配了一个计算管道和一个帧缓冲区。我有一个 {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 是什么?

标签: vulkan

解决方案


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

我只为 2 个信号量放置了 1 个阶段掩码。


推荐阅读