Get the type that specifies a coordinate for a SPIR-V image or sampled image.
fn ImageCoordinate(Image: type, Element: type) type
fn ImageCoordinate(Image: type, Element: type) type {
const image_info = switch (@typeInfo(Image)) {
.spirv => |spirv| switch (spirv) {
.sampled_image => |sampled_image| @typeInfo(sampled_image).spirv.image,
.image => |image| image,
else => @compileError("Expected SPIR-V image or sampled image type, found '" ++ @typeName(Image) ++ "'"),
},
else => @compileError("Expected SPIR-V image or sampled image type, found '" ++ @typeName(Image) ++ "'"),
};
const dim = switch (image_info.dim) {
.@"1d" => 1 + @as(u8, @intFromBool(image_info.arrayed)),
.@"2d" => 2 + @as(u8, @intFromBool(image_info.arrayed)),
.@"3d", .cube => 3 + @as(u8, @intFromBool(image_info.arrayed)),
};
if (dim == 1) return Element else return @Vector(dim, Element);
}