Какое использование скалярного спецификатора макета при доступе к буферу хранения в GL_EXT_scalar_block_layout? (см. пример ниже)
Какой вариант использования скалярного значения?
Background< /h1>
Недавно я запрограммировал простой Raytracer с использованием Vulkan и расширения NVidias VkRayTracing и следовал этому руководству. В разделе о шейдере ближайшего попадания требуется доступ к некоторым данным, которые хранятся в буферах хранения (с флагами использования vk::BufferUsageFlagBits::eStorageBuffer).
В шейдере используется расширение GL_EXT_scalar_block_layout и доступ к этим буферам осуществляется следующим образом:
Код: Выделить всё
layout(binding = 4, set = 1, scalar) buffer Vertices { Vertex v[]; } vertices[];
Код: Выделить всё
struct Vertex {
vec4 position;
vec4 normal;
vec4 texCoord;
};
Код: Выделить всё
#pragma pack(push, 1)
struct Vertex {
glm::vec4 position_1unused;
glm::vec4 normal_1unused;
glm::vec4 texCoord_2unused;
};
#pragma pack(pop)
Кроме того, я просто попытался удалить скаляр, и он все равно работал без каких-либо изменений, предупреждения или ошибки вообще. Был бы признателен за любые разъяснения или дополнительные ресурсы по этой теме.
Подробнее здесь: https://stackoverflow.com/questions/605 ... ock-layout