История изменений
Исправление safocl, (текущая версия) :
Алсо auto allocSize = ( pixmapDataSize / allocAligment + 1 ) * allocAligment; -> auto allocSize = allocAligment * std::ceil ( static_cast< double > ( pixmapDataSize ) / static_cast<double> ( allocAligment ) );
в таком случае размер не будет кратен значению align, что обязательно должно быть согласно спеку vulkan/
А так я выясняю сколько целых значений align будет в размере allocSize — и потом множу на этот самый align, прибавив в allocSize еще один размер align, поскольку почти всегда будет меньше, чем надо, ну или максимум ровно столько же...
сейчас исправил на такой код:
auto allocSize = ( pixmapDataSize / allocAlignment ) * allocAlignment;
if ( allocSize < pixmapDataSize )
allocSize += allocAlignment;
а так на сколько я уже понял — по крайней мере на nvidia для импорта извне в vulkan api доступен только vkBuffer... — для него не нужно сразу размер вычислять как под хранение определенного image.
Хранение image потому что производится не обязательно тривиальным способом, с разными значениями его параметров это может быть как более компактный вид, так и более расширенный.
Исходная версия safocl, :
Алсо auto allocSize = ( pixmapDataSize / allocAligment + 1 ) * allocAligment; -> auto allocSize = allocAligment * std::ceil ( static_cast< double > ( pixmapDataSize ) / static_cast<double> ( allocAligment ) );
в таком случае размер не будет кратен значению align, что обязательно должно быть согласно спеку vulkan/
А так я выясняю сколько целых значений align будет в размере allocSize — и потом множу на этот самый align, прибавив в allocSize еще один размер align, поскольку почти всегда будет меньше, чем надо, ну или максимум ровно столько же...
сейчас исправил на такой код:
auto allocSize = ( pixmapDataSize / allocAlignment ) * allocAlignment;
if ( allocSize < pixmapDataSize )
allocSize += allocAlignment;