vulkan - 输入附件和多重采样
问题描述
我知道如何分别使用输入附件和多重采样。但我不明白这两个功能如何一起使用。
我有 2 个子通道和 4 个附件的渲染通道:
- 呈现的图像;
- 具有samples = N的多采样图像,在第二个子通道中被渲染和解析(到图像#1);
- 具有samples=N的多重采样深度图像,在两个子通道中呈现;
- 样本=N 的多重采样图像,在第一个子通道中用作颜色附件,在第二个子通道中用作输入附件。
如果 N 等于 VK_SAMPLE_COUNT_1_BIT,则一切正常。但是如果 N 等于 VK_SAMPLE_COUNT_4_BIT,我有很多错误:
- vkCreateRenderPass 在 Mi A1 上返回错误代码;
- vkCreateRenderPass 在 Mi A2 lite 上返回成功,但我从验证层收到很多警告:
描述符集 0x28107 在 vkCmdDraw() 时遇到以下验证错误:全局描述符索引 0 处的绑定 #0 中的描述符要求绑定图像具有 VK_SAMPLE_COUNT_1_BIT 但获得了 VK_SAMPLE_COUNT_4_BIT。
问题:
- 是否禁止使用多重采样输入附件?我在规范中找不到任何关于此的内容。
- 我可以将第一个子通道中的图像#4 解析为其他图像(#5),该图像将用作第二个子通道中的输入附件。这是解决此问题的唯一方法吗?
解决方案
我不改变着色器。
那就是你的问题了。纹理的多重采样状态是其 GLSL类型的一部分。您不能通过subpassInput
;从多样本输入纹理中获取 你必须使用一个subpassInputMS
.
推荐阅读
- python - 无法使用 python 向 azure face api 发送/请求 base64
- javascript - 将一个单词中字母的数量相加直到它是个位数?
- node.js - react-cookie vs 通用cookie vs react-cookies
- css - 为什么我的样式表被具有较低特异性的样式表忽略?
- c# - 在非托管资源上执行 P/Invoke 时,何时需要 GC.KeepAlive(this)?
- java - 为什么我能在日期到达博物馆 +7 小时?
- c# - 控制器从 application/json 有效负载中敏感地接受数据大小写
- git - “中止:没有名为选择器的模块!” 将 Mercurial 存储库推送到 Git 存储库时
- win32gui - 如何在 win32 gui 应用程序中使用另一个事件循环
- javascript - 如果输入不存在(在数据集中),则显示通用内容