首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从输入附件读取并在相同的绘图调用中写入相同的附件?

问是否可以从输入附件读取并在相同的绘图调用中写入相同的附件?
EN

Stack Overflow用户
提问于 2019-12-18 03:34:56
回答 2查看 1.1K关注 0票数 4

我想知道一个附件是否同时用作输入附件和颜色/ds附件,是否允许从输入附件读取一个抽屉调用,然后将其写入相同的颜色/ds附件?如果下一个from调用也在执行相同的操作,那么从规范中我看到我需要一个vkCmdPipelineBarrier来使下一个绞盘调用获得正确的结果,但不确定相同的drawcall情况。

另一个问题是,我能否在第一次子传递中使用输入附件?就像我把预z传递产生的深度纹理附加到深度附件和输入附件中一样?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-18 04:45:59

使用附件作为输入附件和颜色或深度/模板附件都称为,本质上,如果您在两者之间没有管道屏障的情况下读取和写入附件的相同部分,则会得到未定义的结果。因为你不能在抽签中设置管道屏障,所以你运气不好。

如果所有访问都是读的(例如,启用深度测试,但深度写入已禁用),则可以使用反馈循环;如果读写访问不相交的组件(使用颜色写入掩码),则可以使用颜色附件。

对于您的第二个问题,是的,输入附件不必在前面的同一呈现传递中编写。尽管在您的示例中,最好在第一个子传递中执行z预传递,然后在第二个子传递中使用它作为输入附件和只读深度测试。在平铺架构上,这可能节省带宽,因为深度缓冲区永远不必写到内存中。

票数 1
EN

Stack Overflow用户

发布于 2019-12-18 14:33:24

可以通过着色器中的颜色/输入附件对同一图像执行读/修改/写(RMW)操作,只要:

  1. 您确保一个片段着色器将在颜色附件中为特定的输出值执行RMW。这基本上可以归结为“没有透支”。如果需要透支(即多个FS对相同的输入/输出执行重复的RMW操作),那么在子通道内的每一组透支操作之间必须有一个管道屏障。因此,您必须将呈现命令分解为小块。请注意,要使屏障正常工作,您必须在子传递的依赖关系图中有一个子传递自依赖关系,并且该屏障需要调用它。另外,您的自我依赖应该是每个区域,因为您只关心屏幕上各个位置之间的依赖关系。毕竟,您不能随意访问输入附件。

只要这样做有意义,您就可以在任何子传递上使用任何附件作为输入附件。如果您的loadOp说您不想加载数据,那么从具有未定义值的图像中读取数据显然是没有意义的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59385129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档