我正在以模块化的方式指定Vulkan着色器(使用泛型等)使用的其他制服和采样器(例如,描述符集),但是我收到多个验证错误,无法理解它们的含义或Vulkan通话/数据进行检查。
我看不到我在哪里触发了不匹配,也看不到为什么全局描述符需要(无)组件类型。
MaxNWts
答案 0 :(得分:3)
UNASSIGNED-CoreValidation-Shader-DescriptorTypeMismatch(ERROR / SPEC): msgNum: 0 - Type mismatch on descriptor slot 0.0 (expected `VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT`) but descriptor of type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
您的着色器接口与设置为0的当前绑定描述符(绑定为0)的描述符类型不同。
着色器需要某种统一的缓冲区,但是您要提供一个组合的图像采样器。
也许您是将顶点着色器与片段着色器混淆了。
UNASSIGNED-CoreValidation-DrawState-DescriptorSetNotUpdated(ERROR / SPEC): msgNum: 0 - Descriptor set 0x52 bound as set #0 encountered the following validation error at vkCmdDrawIndexed() time: Descriptor in binding #0 at global descriptor index 0 requires (none) component type, but bound descriptor format is VK_FORMAT_R8G8B8A8_UNORM.
您正在为图片描述符提供某种格式,该格式适用于一些期望的内容,例如缓冲区描述符,或者您遇到了here中描述的已知验证层错误。
在大型代码库中跟踪验证层错误可能会有些棘手,因此,如果不确定如何解决这些错误,建议您通过RenderDoc运行您的应用程序,然后检查管道状态发生该层错误的位置,或仅逐步通过验证层本身。使用例如Visual Studio的本地人监视窗口将帮助您找到触发这些消息的Vulkan对象。