繁体   English   中英

在将在多种图像格式上运行的计算着色器中处理图像格式限定符的最佳实践是什么?

[英]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.

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