c++ Vulkan验证错误pvnInfo [0]没有片段着色器状态

0lvr5msh  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在使用Vulkan API编写游戏引擎。我想使用VK_KHR_dynamic_rendering扩展,而不是使用渲染通道。
我正在使用graphics_pipeline_create_info.renderPass = VK_NULL_HANDLE;创建一个图形管道,并将一个指针指向分配给graphics_pipeline_create_info.pNextVkPipelineRenderingInfo
我的图形管道包含一个顶点着色器和一个片段着色器阶段。
我的VkPipelineRenderingInfo

VkFormat color_attachment_formats = {VK_FORMAT_R32G32B32A32_SFLOAT};
VkPipelineRenderingCreateInfo rendering_create_info{VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO};
rendering_create_info.viewMask = 0;
rendering_create_info.colorAttachmentCount = 1;
rendering_create_info.pColorAttachmentFormats = &color_attachment_formats;
rendering_create_info.depthAttachmentFormat = VK_FORMAT_UNDEFINED;
rendering_create_info.stencilAttachmentFormat = VK_FORMAT_UNDEFINED;

字符串
但是在创建管道时,我得到了以下验证错误:[ VUID-VkGraphicsPipelineCreateInfo-pStages-06894 ] | MessageID = 0xdfcd6d41 | vkCreateGraphicsPipelines(): pCreateInfos[0] does not have fragment shader state, but stages (VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT) contains VK_SHADER_STAGE_FRAGMENT_BIT. The Vulkan spec states: If the pipeline requires pre-rasterization shader state but not fragment shader state, elements of pStages must not have stage set to VK_SHADER_STAGE_FRAGMENT_BIT (https://vulkan.lunarg.com/doc/view/1.3.268.0/linux/1.3-extensions/vkspec.html#VUID-VkGraphicsPipelineCreateInfo-pStages-06894)
我不明白这条消息。一开始的错误是我没有指定一个片段着色器阶段,但我做得很正确(用调试器检查了值)。
第二件事是链接的规范条目:基本上,它说如果我的管道不需要片段着色器阶段,我就不应该提供任何。但是为什么我的管道不需要它呢?
有人能帮我吗?
我尝试修改VkPipelineRenderingCreateInfo::viewMask,因为在VkGraphicsPipelineMask Info的描述中有一句话,说viewMask对片段着色器阶段有影响,但我不确定是如何影响的。
但是如果我给viewMask赋一个非0的值,它需要VK_KHR_multiview扩展,而我不需要。

4ktjp1zp

4ktjp1zp1#

我自己调查了这个问题:
问题是我将VkPipelineRasterizationStateCreateInfo::rasterizerDiscardEnable设置为VK_TRUE

相关问题