Атрибуты вершин Metal Shader - невозможно преобразовать атрибут из MTLAttributeFormatUInt в float1 - PullRequest
2 голосов
/ 30 мая 2020

У меня есть шейдер, который выглядит так:

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 или половине допустимо».

Я знаю, что есть несколько способов обойти эту проблему, но мне любопытно о том, почему это неверно - возможно, мне здесь не хватает выравниваний и размеров байтов.

...