我已经有一个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 和相干限定符有问题,但我不确定如何正确设置它们。
如果要将无绑定图像/采样器放在统一的块中,则必须将它们实际放入块定义中。就像任何其他变量一样:
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++ 数组匹配。