Я пытаюсь написать средство визуализации Vulkan, использую glslangValidator с HLSL для шейдеров и пытаюсь реализовать push-константы.
[[vk::push_constant]]
cbuffer cbFragment {
float4 imageColor;
float4 aaaa;
};
[[vk::push_constant]]
cbuffer cbMatrices {
float4 bbbb;
};
Аннотация [[vk::push_constant]] работает, я использую spirv_reflect для отражения, и обе константы push отображаются и работают как положено. Проблема, с которой я сталкиваюсь, заключается в том, что они, по-видимому, перекрываются, если я назначаю bbbb значение, imageColor изменяется точно так же, и наоборот. В данных отражения оба блока push-константы имеют смещение 0, что объясняет проблему. Однако я, кажется, совершенно не могу изменить смещение любой из констант push. [[vk::offset(x)]] вообще не работает, он не влияет ни на смещения отдельных элементов, ни на смещение констант push. Единственное смещение, которое вообще работает, — это встроенное в HLSL смещение пакета, которое применяется только к элементам буфера. И хотя на самом деле может быть решением просто сместить члены одной из push-констант так, чтобы они находились за пределами диапазона другой, я вряд ли верю, что это может быть разумным решением, поскольку это также приводит к сбою уровня проверки из-за смещения отдельных просто без необходимости увеличивает размер push-константы, а само перекрытие все еще присутствует.
Я был бы очень признателен за любую помощь в этом вопросе и готов предоставить любые необходимые разъяснения, большое спасибо!