[英]What's the best practice for handling format qualifiers for images in compute shaders which will operate on multiple image formats?
因此,我正在为 Vulkan 应用程序开发 GLSL 计算着色器,该应用程序将对两个输入图像进行操作以创建输出图像。
到目前为止,我的布局绑定如下所示:
layout(binding = 0, rg32f) uniform readonly image2D input1;
layout(binding = 1, rg32f) uniform readonly image2D input2;
layout(binding = 2) uniform writeonly image2D outputImage;
根据规范,我用格式限定符声明了这些:
图像变量可以用格式限定符声明; 这指定了对图像进行的任何读取操作的格式。 因此,如果您不使用 writeonly 内存限定符声明变量,则需要格式限定符。
所以问题是,我现在想在第二种图像类型上使用相同的着色器: VK_FORMAT_R8G8B8A8_UNORM
除了VK_FORMAT_R32G32_SFLOAT
。
处理这种情况的最佳做法是什么? 是否可以以某种方式概括此着色器,或者我是否需要为第二种输入格式编译第二个着色器?
我现在想在第二种图像类型上使用相同的着色器:
VK_FORMAT_R8G8B8A8_UNORM
除了VK_FORMAT_R32G32_SFLOAT
。
这是两个非常不同的操作,需要在 GPU 上执行非常不同的代码。 这就是为什么格式是变量的一部分。
但是,如果您坚持尝试使用单个着色器执行此操作,则可以为声明起别名。 也就是说,对两个不同的变量使用相同的描述符集+绑定,并根据特化常量或统一访问正确的一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.