Заполнение структуры вершин вручную для достижения выравнивания
Передавая данные вершин в ваши шейдеры, целесообразно ли применять выравнивание к вашей структуре вершин для достижения выравнивания (16 байтов) или это то, что аппаратное обеспечение выполняет в любом случае?
Например, одинаково ли эффективны эти две структуры вершин?
struct Vertex44 // <<----- NO PADDING
{
XMFLOAT3 position;
XMFLOAT3 normal;
XMFLOAT2 texCoord;
XMFLOAT3 tangent;
};
struct Vertex48 // <<----- WITH PADDING
{
XMFLOAT3 position;
XMFLOAT3 normal;
XMFLOAT2 texCoord;
XMFLOAT3 tangent;
float padding;
};
Спасибо!
1 ответ
Решение
Для вершинных форматов вы получаете повышение производительности на большинстве аппаратных средств, если сохраняете общий размер шага ровно 32 байта или ровно 64 байта. Это влияет только на механизмы компоновки Input Assembler. Как только данные поступают в конвейер графического процессора, драйвер и среда выполнения поддерживают практически все, что требуется для аппаратного обеспечения.