gpt4 book ai didi

glsl - 在统一分支内有一个非绑定(bind)采样器

转载 作者:行者123 更新时间:2023-12-02 01:12:47 26 4
gpt4 key购买 nike

假设我有像素着色器,有时需要从一个采样器读取,有时需要从两个不同的采样器读取,具体取决于统一变量

layout (set = 0, binding = 0) uniform UBO {
....
bool useSecondTexture;
} ubo;
...
void main() {
vec3 value0 = texture(sampler1, pos).rgb;
vec3 value2 = vec3(0,0,0);
if(ubo.useSecondTexture) {
value2 = texture(sampler2, pos).rgb;
}
value0 += value2;
}

第二个采样器; sampler2 需要绑定(bind)到一个有效的纹理,即使如果 useSecondTexturefalse,纹理将不会被读取。

最佳答案

所有的 vkCmdDrawvkCmdDispatch 命令都有这个有效的用法声明:

Descriptors in each bound descriptor set, specified via vkCmdBindDescriptorSets, must be valid if they are statically used by the currently bound VkPipeline object, specified via vkCmdBindPipeline

由于 sampler2 是静态使用的,因此您必须为其提供一个有效的描述符,否则您将获得未定义的行为。

我的猜测是,在某些实现中,它会像您期望的那样工作。但是允许驱动程序/硬件要求管道可能使用的所有描述符都是有效的,并且要求它们检查内存缓冲区的内容以确定是否可以使用某些内容将非常昂贵。

关于glsl - 在统一分支内有一个非绑定(bind)采样器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44323443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com