繁体   English   中英

在同一个子通道中将图像用作输入附件和颜色输出附件是否合法?

[英]Is it legal to use an image both as an input attachment and a color output attachment in the same subpass?

我正试图用我不自信的举动来优化我的代码。 我正在尝试延迟渲染,所以我构建了一个带有两个子通道的渲染通道。 第一个输出反照率/正常/深度图像,第二个使用它们作为输入附件来创建最终图像。 到目前为止,我正在使用图像来编写反照率,另一个使用G缓冲区输出最终计算结果。

我想知道是否可以使用相同的图像进行反照率和最终计算。 所以我试图只使用一个图像,作为第一个子通道中的颜色输出附件,以及第二个子通道中的颜色输出附件和输入附件。 鉴于输入附件可以是SHADER_READ_ONLY_OPTIMAL或GENERAL,我使用了一般布局,因为我需要在图像中写入。

它的工作方式几乎完美,但首先,我不确定是不是很幸运,其次,我从验证层得到这条消息:

“输入附件的布局是GENERAL,但应该是READ_ONLY_OPTIMAL。

颜色附件的布局是GENERAL,但应该是COLOR_ATTACHMENT_OPTIMAL。“

输入附件和颜色附件所指的图像是我用于读写的图像。 我不知道这个消息是驱动程序错误还是只是告诉我我做错了。 此外,即使这是一个合法的举动,我认为使用GENERAL布局而不是COLOR_ATTACHMENT_OPTIMAL可能会使性能比简单地拥有两个图像更糟糕。

标题中的问题答案是肯定的,您可以将附件用作同一子通道中的输入附件和颜色附件。 验证层不应该输出警告。 它不违反验证规则(实际上, 只有一般布局允许使用附件作为输入和颜色)。 验证层可以告诉您何时在子通道中使用相同的附件,因此在这种情况下不应该给出使用常规布局的警告。

随意向GitHub上的验证层项目提交问题

但是,这并不完全是您的主要文本所要求的。 这个问题的答案是:

如果可以使用相同的图像进行反照率和最终计算

没有”。

在延迟渲染器的光照过程中,通常需要多次覆盖相同的像素。 您可能拥有的光线数量超过了您在一次通过中合理计算的数量,或者您可能需要执行特殊阴影或其他不易组合的事物或其他各种事物。 因此,您通常需要多次渲染屏幕的相同区域,使用每种渲染的添加混合和输出颜色。

如果您正在写入存储反照率的相同图像,那么后面的读取(假设您进行了适当的障碍体操以允许从写入相同子通道内的附件的值读取)将读取光强度 ,而不是反照率值。 因此,它会做错误的数学运算。

所以,是的,你需要另一张图片。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM