如何读写具有uint格式的图像?

时间:2019-03-30 10:46:08

标签: image glsl shader vulkan uint

我想从存储无符号整数的图像读取和写入。我该如何读写?读取和写入图像的标准方法是使用 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作为要写入的数据,以防万一我误解了存储的格式。使用二维图像也没有区别。

1 个答案:

答案 0 :(得分:2)

您得到的错误消息是正确的,根本没有imageStore的重载版本采用单个无符号整数(请参阅https://github.com/vincentcastagna/TabbedPageWithCarouselView)。

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

void main() 
{
    imageStore(img, ivec3(1,2,3), uvec4(4));
}
相关问题