当前位置: 首页 > 知识库问答 >
问题:

在一个均匀的分支中有一个非束缚的取样器

殷学
2023-03-14

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

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需要绑定到有效的纹理,即使如果useSecondTexturefalse,纹理也不会被读取。

共有1个答案

萧宣
2023-03-14

所有vkCmdDraw和vkCmdDispatch命令都有以下有效的用法声明

如果当前绑定的VkPipeline对象通过vkCmdBindPipeline指定静态使用,则通过vkCmdBindDescriptorSets指定的每个绑定描述符集中的描述符必须有效

由于sampler2是静态使用的,所以必须为其提供有效的描述符,否则将得到未定义的行为。

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

 类似资料:
  • 问题内容: 问题 I的 特定实例 的int范围是1-100。我想在此范围内生成n个总数,这些总数应 尽可能均匀地分布, 并包括第一个和最后一个值。 例 我目前所拥有的 实际上是一种可行的方法,但是我一直觉得自己在想这个问题,而错过了一些更简单的方法?这是最有效的方法还是可以改进? 请注意,我确保此函数将始终至少返回范围的下限值和上限值。所以,我强迫 仅作为搜索参考,我正在使用它来从渲染的序列中采样

  • 在openGL中,可以将一个纹理绑定到两个(或多个)不同的统一采样器吗?使用两种不同的纹理进行渲染时,如下所示: 着色器: 客户: 但当我尝试将一个纹理对象绑定到两个不同的纹理单元时,似乎第一个绑定的单元保持未绑定状态: 当然,可以为两个采样器设置相同的单位,但有时我还想为不同的纹理使用着色器,而不仅仅是为两个采样器设置相同的纹理对象。 这个解决方案实际上运行得很好,但它不符合我所描述的需求。也可

  • 我试图把一些代码,将做同样的Python, Numpy.random.选择 关键部分是: 与a中的每个条目相关的概率。如果没有给定,则样本假定a中所有条目的均匀分布。 一些测试代码: 这将产生以下输出: 有时候。 这里有一个分布,它是部分随机的,但也有结构。 我想在C#中实现这一点,老实说,我不确定是否有有效的方法来实现。 大约4年前,有一个很好的问题被提出:模仿Python的随机性。选择。网 因

  • 我正在编写一个批处理系统,它跟踪当前绑定的纹理,以避免不必要的调用。我不确定是否需要跟踪特定批次已经使用了哪些纹理,因此如果一个纹理被使用两次,它将被绑定到需要它的第二个采样器的不同TIU。 OpenGL应用程序是否可以在同一着色器阶段内对多个采样器使用相同的纹理图像单元?不同着色器阶段的采样器如何?例如: 片段着色器: 主要节目: 我看不出这不起作用的任何原因,但是如果着色器程序也包括这样的顶点

  • 0.1-0.2:********** 0.2-0.3:******** 0.3-0.4:********* 0.5-0.6:********* 0.6-0.7:********* 0.7-0.8:********* 0.4-0.5:********* 0.5-0.6:********* 0.6-0.7:********* 0.1-0.2:********* 0.2-0.3:********* 0.

  • 我想使用Matplotlib绘制一个带有非均匀x轴的直方图。例如,考虑下面的直方图: 第一个箱子的密度很高,所以我想放大。 理想情况下,我想将x轴中的值更改为,保持图中的箱宽度不变(当然不是数字)。有没有简单的方法来实现这一点?欢迎任何意见或建议。