У меня есть шейдер, который выглядит так:
struct VertexIn {
float a_customIdx [[attribute(0)]];
...
};
vertex vec4 vertex_func(VertexIn v_in [[stage_in]], ...) {...}
В моем буфере я фактически передаю uint32_t
для a_customIdx
, поэтому в моем MTLVertexAttributeDescriptor
я указываю его тип как быть MTLAttributeFormatUInt
. Когда я создаю RenderPipelineState
, я получаю сообщение об ошибке:
cannot convert attribute from MTLAttributeFormatUInt to float1
Я получаю ту же ошибку, если использую MTLAttributeFormatInt
, но могу успешно преобразовать MTLAttributeFormatUShort
.
Почему это недопустимая операция? Согласно документации для формата , «Приведение любого MTLVertexFormat к float или половине допустимо».
Я знаю, что есть несколько способов обойти эту проблему, но мне любопытно о том, почему это неверно - возможно, мне здесь не хватает выравниваний и размеров байтов.