2015-10-11 3 views
0

У меня создалось впечатление, что тип float2x4 будет занимать 32 байта, однако, когда я объявляю следующий float2x4 varname [100], он занимает 64 * 100 байт, а не 32 * 100 байтов, как ожидалось. Как так? Возможно, я не вижу что-то, связанное с заполнением float2x4.Проблема с размером примитивного типа HLSL

ответ

1

float2x4 просит 4 float2s. Поскольку каждый «регистр» имеет ширину 16 байтов (1 float4), тогда он использует пространство на 64 байта для хранения 4 float2s. Z и W в каждом из 4 float4s не используются и действуют как дополнение.

Напротив, float4x2 запрашивает 2 float4s и идеально подходит для двух регистров float4 (32 байта).

+0

Ahh, похоже, я ошибаюсь float2x4 для 2 float4, моя ошибка, спасибо за расчистку. –

+0

Не забудьте принять ответ, если это ответит на ваш вопрос. –

+0

Это противоположность, floatAxB - это строки из столбцов B. – galop1n