更新NVIDIA驱动后出现VUID-vkCmdDrawIndexed-blendEnable-04727验证错误求助
更新NVIDIA驱动后,出现以下验证错误:
VUID-vkCmdDrawIndexed-blendEnable-04727(ERROR / SPEC): msgNum: -1979288290 - Validation Error: [ VUID-vkCmdDrawIndexed-blendEnable-04727 ] Object 0: handle = 0x5eb05e000000003b, type = VK_OBJECT_TYPE_PIPELINE; | MessageID = 0x8a06751e | vkCmdDrawIndexed: Image view's format features of the color attachment (0) of the active subpass do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT bit, but active pipeline's pAttachments[0].blendEnable is not VK_FALSE. The Vulkan spec states: If rasterization is not disabled in the bound graphics pipeline, then for each color attachment in the subpass, if the corresponding image view's format features do not contain VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the blendEnable member of the corresponding element of the pAttachments member of pColorBlendState must be VK_FALSE
目前渲染正常,但需要修复该验证问题,核心困惑点:
- 如何设置
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT标志? - 该标志是否属于
vkGetPhysicalDeviceSurfaceFormatsKHR返回的格式内容? - 启用混合的前提下,如何避免触发该验证错误?
问题核心
错误本质是:你当前绑定的颜色附件图像,其格式不支持作为带混合操作的颜色附件,但管线的颜色混合状态却开启了blendEnable。
关键概念澄清
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT 不是vkGetPhysicalDeviceSurfaceFormatsKHR返回格式的自带属性——这个函数仅返回物理设备支持的表面格式列表,每个格式的具体特性需要单独查询确认。
修复步骤
1. 检查当前颜色附件格式的特性
调用vkGetPhysicalDeviceFormatProperties,传入你当前颜色附件使用的格式,查看optimalTilingFeatures字段是否包含目标标志:
VkFormatProperties formatProps; vkGetPhysicalDeviceFormatProperties(physicalDevice, yourColorAttachmentFormat, &formatProps); if (!(formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)) { // 当前格式不支持带混合的颜色附件 }
2. 分场景修复
场景A:颜色附件是交换链图像
- 从
vkGetPhysicalDeviceSurfaceFormatsKHR返回的格式列表中,筛选出经上述查询确认支持VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT的格式,重新创建交换链时使用该格式。 - 若必须保留当前格式,只能关闭对应颜色附件的
blendEnable(设为VK_FALSE)。
场景B:颜色附件是自定义创建的图像
- 先通过
vkGetPhysicalDeviceFormatProperties挑选一个支持VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT的格式。 - 创建图像时,确保
VkImageCreateInfo的usage包含VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,并使用上述符合要求的格式。 - 创建图像视图时,保持与图像一致的格式。
3. 额外提醒
这次驱动更新后NVIDIA收紧了验证规则,之前兼容的非规范操作现在触发了错误。即便当前渲染正常,修复该问题能保证跨设备、跨驱动版本的兼容性。
内容的提问来源于stack exchange,提问作者toastie

