我已经有一个ubo:
layout (std140, binding = 0) uniform view_shared_data {
uniform int matrixIndex;
uniform int projectionIndex;
uniform uint set_only_input_id;
uniform Matrices[MAX_MATRICES] matrices;
};
我正在尝试向ubo添加一系列无绑定图像:
layout(bindless_image, r32ui) coherent uniform uimage2D[MAX_MATRICES] id_texture;
我只会使用imageAtomicMax()写入图像。
这在使用nvida gpu的Windows上可以正常编译,但是在使用amd的Linux上则可以正常编译。我假设我的bindless_image,r32ui和相干限定符出了点问题,但是我不确定如何正确设置它们。
答案 0 :(得分:4)
如果要将无绑定图像/采样器放在统一的块中,则必须将它们放入块定义中。就像其他任何变量一样:
layout (std140, binding = 0) uniform view_shared_data {
uniform int matrixIndex;
uniform int projectionIndex;
uniform uint set_only_input_id;
uniform Matrices[MAX_MATRICES] matrices;
layout(r32ui) coherent uimage2D[MAX_MATRICES] id_texture;
};
缓冲区支持的接口块中的每个不透明类型都是单个64位整数。因此,id_texture
的数组步长为8个字节,与64位整数的C或C ++数组匹配。