Я передаю единый буфер для вычисления шейдера в vulkan. Буфер содержит массив из 49 чисел с плавающей запятой (гауссова матрица). Все хорошо, но когда я читаю массив в шейдере, он дает только 13 значений, остальные равны 0 или gunk, и они соответствуют 0, 4, 8 и т. Д. Исходного массива. Я думаю, что это какая-то проблема выравнивания
Макеты шейдеров
struct Pixel
{
vec4 value;
};
layout(push_constant) uniform params_t
{
int width;
int height;
} params;
layout(std140, binding = 0) buffer buf
{
Pixel imageData[];
};
layout (binding = 1) uniform sampler2D inputTex;
layout (binding = 2) uniform unf_t
{
float gauss[SAMPLE_SIZE*SAMPLE_SIZE];
};
Может ли это быть привязка 0, влияющая на привязку 2? и если да, то как я могу скопировать массив в буфер с необходимым выравниванием? В настоящее время я использую
vkCmdUpdateBuffer(a_cmdBuff, a_uniform, 0, a_gaussSize, (const uint32_t *)gauss)
или, может быть, лучше разделить на разные наборы?
Редактировать: расширив буфер и массив, я могу передать его с выравниванием 16 и все отлично, но этовыглядит как пустая трата памяти. Как я могу выровнять поплавки на 4?