如何使用uint格式读取和写入图像?

问题描述 投票:1回答:1

我想从存储无符号整数的图像中读取和写入。我怎么读写?读取和写入图像的标准方法是使用imageLoad / imageStore,但在使用格式限定符r32ui时,编译器会出现no matching overloaded function found错误。

这无法编译:

#version 450

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, r32ui) uniform writeonly uimage3D img;

void main() {
    imageStore(img, ivec3(1,2,3), uint(4));
}

编译好:

#version 450

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, rgba8ui) uniform writeonly uimage3D img;

void main() {
    imageStore(img, ivec3(1,2,3), uvec4(4,5,6,7));
}

我尝试使用uvec3代替ivec3,而uvec4用于写入数据,以防我误解格式存储的内容。使用二维图像也没有区别。

image glsl shader vulkan uint
1个回答
2
投票

你得到的错误信息是正确的,只有没有重载版本的imageStore采取一个无符号整数(见specs)。

因此,当使用r32ui限定符时,您仍然需要传递一个4分量无符号向量,就像在第二个示例中一样,而是从单个值构造它:

void main() 
{
    imageStore(img, ivec3(1,2,3), uvec4(4));
}
© www.soinside.com 2019 - 2024. All rights reserved.