Блочное сжатие (Direct3D 10)

Сжатие блока — это метод сжатия текстур для уменьшения их размера. По сравнению с текстурой с 32 битами на цвет текстура со сжатыми блоками может быть до 75 % меньше. Как правило, приложения начинают работать быстрее при использовании сжатия блоков, поскольку нагрузка на память снижается.

Сжатие блоков выполняется с потерями, однако работает хорошо и рекомендуется для всех текстур, преобразуемых и фильтруемых конвейером. Текстуры, которые напрямую сопоставляются экрану (элементы пользовательского интерфейса, такие как значки и текст), не очень подходят для сжатия, поскольку артефакты более заметны.

Текстура со сжатыми блоками должна создаваться как кратная размеру 4 во всех измерениях, ее невозможно использовать в качестве выходных данных конвейера.

Как работает сжатие блоков?

Сжатие блоков — это метод уменьшения объема памяти, необходимой для хранения данных цвета. Сохраняя некоторые цвета в первоначальном размере, а другие — с использованием схемы кодирования, можно существенно уменьшить объем памяти, необходимый для хранения изображения. Поскольку оборудование автоматически декодирует сжатые данные, использование сжатых текстур не приводит к снижению производительности.

Чтобы узнать, как работает сжатие, рассмотрите следующие два примера. В первом примере описывается объем памяти, используемой при хранении несжатых данных; а второй — объем памяти при хранении сжатых данных.

Хранение несжатых данных

На следующем рисунке показана текстура 4×4 без сжатия. Допустим, каждый цвет имеет один компонент цвета (например, красный) и хранится в одном байте памяти.

иллюстрация несжатой текстуры 4x4

Несжатые данные располагаются в памяти последовательно и требуют 16 байтов для хранения, как показано на следующем рисунке.

Иллюстрация несжатых данных в последовательной памяти

Хранение сжатых данных

Вы увидели, сколько памяти требуется для хранения несжатого изображения. А теперь посмотрим, сколько памяти экономит сжатое изображение. Формат сжатия BC4 хранит 2 цвета (по 1 байт) и 16 3-разрядных индексов (48 битов или 6 байт), которые используются для интерполяции исходных цветов в текстуре, как показано на следующем рисунке.

Иллюстрация формата сжатия bc4

Совокупное пространство, необходимое для хранения сжатых данных, равно 8 байтов, то есть экономия памяти составляет 50 % по сравнению с примером без сжатия. Экономия увеличивается, если используется несколько компонентов цвета.

Значительная экономия памяти, обеспечиваемая сжатием блоков, позволяет существенно повысить производительность. Это повышение производительности происходит за счет снижения качества изображения (из-за интерполяции цвета); однако более низкое качество не всегда заметно.

В следующем разделе показано, как Direct3D 10 упрощает использование сжатия блоков в приложении.

Использование блочного сжатия

Создайте текстуру со сжатием блоков так же, как несжатую текстуру (см. раздел Создание текстуры из файла), за исключением того, что вы указываете формат со сжатием блока.

loadInfo.Format = DXGI_FORMAT_BC1_UNORM;
D3DX10CreateTextureFromFile(...);

Затем создайте представление для привязки текстуры к конвейеру. Так как текстуру со сжатием блока можно использовать только в качестве входных данных для этапа шейдера, необходимо создать представление ресурсов шейдера, вызвав CreateShaderResourceView.

Используйте текстуру со сжатыми блоками так же, как вы бы использовали текстуру без сжатия. Если ваше приложение будет использовать указатель памяти на данные со сжатием блоков, потребуется учетная запись для заполнения памяти в MIP-карте, из-за чего объявленный размер может отличаться от фактического.

Виртуальный размер и физический размер

Если у вас есть код приложения, который использует указатель памяти для прохода памяти текстуры со сжатием блоков, существует один важный аспект, который может потребовать изменения кода приложения. Текстура со сжатием блоков должна быть кратна 4 во всех измерениях, поскольку алгоритмы сжатия блоков работают с блоками текселей 4x4. Это может представлять проблему для MIP-карты, первоначальные габариты которой кратны 4, а подразделенные уровни — нет. На следующей схеме показаны различия областей между виртуальным (объявленным) и физическим (фактическим) размером каждого уровня MIP-карты.

Схема несжатых и сжатых уровней MIP-карты

В левой части схемы показаны размеры уровня MIP-карты, создаваемые для несжатой текстуры 60×40. Размер верхнего уровня взят из вызова API, создающего текстуру; размер каждого последующего уровня равен половине размера предыдущего уровня. Для несжатой текстуры нет различия между виртуальным (объявленным) и физическим (фактическим) размером.

В правой части схемы показаны размеры уровня MIP-карты, которые создаются для той же текстуры 60×40 со сжатием. Обратите внимание, что на втором и третьем уровнях используется заполнение памяти, чтобы сделать размеры кратными 4 на каждом уровне. Это необходимо, чтобы эти алгоритмы могли работать с блоками текселей 4×4. Это особенно очевидно, если вы рассматриваете уровни MIP-карт менее 4×4; размеры этих очень маленьких MIP-карт при выделении памяти текстуры будут округляться до ближайшего кратного 4 числа.

Оборудование для выборки использует виртуальный размер; при выборке текстуры заполнение памяти игнорируется. Для уровней MIP-карт менее 4×4 только первые четыре текселя будут использоваться для карты 2×2 и только первый тексель будет использоваться для блока 1×1. Однако нет структуры API, которая предоставляет физический размер (включая заполнение памяти).

Необходимо с большой осторожностью пользоваться выровненными блоками памяти при копировании регионов, которые содержат данные со сжатием блоков. Чтобы сделать это в приложении с указателем памяти, убедитесь, что указатель использует шаг поверхности для учета размера физической памяти.

Алгоритмы сжатия

Техника сжатия блоков в Direct3D подразумевает разделение данных несжатой текстуры в блоки 4×4, сжатие каждого блока и последующее сохранение файлов. По этой причине текстуры, которые должны быть сжаты, должны иметь размеры текстуры, кратные 4.

Схема сжатия блоков

На предыдущей схеме показана текстура, разделенная на блоки текселей. Первый блок показывает структуру 16 текселей, помеченных с a до p, однако во всех блоках данные организованы одинаково.

Direct3D реализует несколько схем сжатия, каждая из которых представляет собой разные компромиссы между количеством хранимых компонентов, количеством битов на компонент и объемом потребляемой памяти. Воспользуйтесь этой таблицей, чтобы выбрать формат, который больше всего подходит для вашего типа и разрешения данных в приложении.

Исходные данные Разрешение сжатия данных (в битах) Выберите этот формат сжатия
Трех-компонентный цвет и альфа Цвет (5:6:5), альфа (1) или без альфа BC1
Трех-компонентный цвет и альфа Цвет (5:6:5), альфа (4) BC2
Трех-компонентный цвет и альфа Цвет (5:6:5), альфа (8) BC3
Однокомпонентный цвет Один компонент (8) BC4
Двухкомпонентный цвет Два компонента (8:8) BC5

 

BC1

Используйте первый формат сжатия блоков (BC1) (DXGI_FORMAT_BC1_TYPELESS, DXGI_FORMAT_BC1_UNORM или DXGI_BC1_UNORM_SRGB) для хранения трехкомпонентных цветовых данных с использованием цвета 5:6:5 (5 битов красного, 6 битов зеленого, 5 битов синего). Это актуально, даже если данные также содержат 1-битовый альфа-канал. Допустим, текстура 4×4 использует самый крупный из возможных форматов данных. В этом случае формат BC1 уменьшает объем необходимой памяти с 48 байтов (16 цветов × 3 компонента/цвет × 1 байт/компонент) до 8 байтов.

Этот алгоритм работает в блоках текселей 4×4. Вместо хранения 16 цветов алгоритм сохраняет 2 эталонных цвета (color_0 и color_1) и 16 2-разрядных цветовых индексов (блоки a–p), как показано на следующей схеме.

Схема макета для сжатия bc1

Индексы цвета (a–p) используются для поиска первоначальных цветов в таблице цветов. Таблица цветов содержит 4 цвета. Первые два цвета — color_0 и color_1 — являются минимальными и максимальными цветами. Два других цвета, color_2 и color_3, являются промежуточными цветами, вычисляемыми с помощью линейной интерполяции.

color_2 = 2/3*color_0 + 1/3*color_1
color_3 = 1/3*color_0 + 2/3*color_1

Четырем цветам назначаются 2-битовые значения индекса, которые сохраняются в блоках a–p.

color_0 = 00
color_1 = 01
color_2 = 10
color_3 = 11

Наконец, все цвета в блоках a–p сравниваются с четырьмя цветами в таблице цветов, и индекс ближайшего цвета сохраняется в 2-битовых блоках.

Этот алгоритм пригоден для данных, которые также содержит 1-битовый альфа-канал. Единственное отличие заключается в том, что color_3 имеет значение 0 (что представляет прозрачный цвет), а color_2 — линейное сочетание color_0 и color_1.

color_2 = 1/2*color_0 + 1/2*color_1;
color_3 = 0;

Различия между Direct3D 9 и Direct3D 10:

Этот формат существует как в Direct3D 9, так и в 10.

  • В Direct3D 9 формат BC1 называется D3DFMT_DXT1.
  • В Direct3D 10 формат BC1 представлен DXGI_FORMAT_BC1_UNORM или DXGI_FORMAT_BC1_UNORM_SRGB.

BC2

Используйте формат BC2 (DXGI_FORMAT_BC2_TYPELESS, DXGI_FORMAT_BC2_UNORM или DXGI_BC2_UNORM_SRGB) для хранения данных, содержащих данные цвета и альфа с низкой степенью согласованности (используйте BC3 для альфа-данных с высокой степенью согласованности). Формат BC2 хранит данные RGB как цвет 5:6:5 (5 битов на красный, 6 битов на зеленый, 5 битов на синий), а альфа-канал — как отдельное 4-битовое значение. Допустим, текстура 4×4 использует самый крупный из возможных форматов данных. В этом случае эта техника сжатия уменьшает объем необходимой памяти с 64 байтов (16 цветов × 4 компонента/цвет × 1 байт/компонент) до 16 байтов памяти.

Формат BC2 сохраняет цвета с тем же количеством битов и той же структурой данных, что и формат BC1; однако формату BC2 требуются дополнительно 64 бита памяти для хранения альфа-данных, как показано на следующей схеме.

Схема макета для сжатия bc2

Различия между Direct3D 9 и Direct3D 10:

Этот формат существует как в Direct3D 9, так и в 10.

  • В Direct3D 9 формат BC2 называется D3DFMT_DXT2 и D3DFMT_DXT3.

  • В Direct3D 10 формат BC2 представлен DXGI_FORMAT_BC2_UNORM или DXGI_FORMAT_BC2_UNORM_SRGB

BC3

Используйте формат BC3 (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_BC3_UNORM или DXGI_BC3_UNORM_SRGB) для хранения высококонгерентных цветовых данных (используйте BC2 с менее когерентными альфа-данными). Формат BC3 сохраняет данные цвета с использованием цвета 5:6:5 (5 битов красного, 6 битов зеленого, 5 битов синего) и альфа-данные с использованием одного байта. Допустим, текстура 4×4 использует самый крупный из возможных форматов данных. В этом случае эта техника сжатия уменьшает объем необходимой памяти с 64 байтов (16 цветов × 4 компонента/цвет × 1 байт/компонент) до 16 байтов памяти.

Формат BC3 сохраняет цвета с тем же количеством битов и той же структурой данных, что и формат BC1; однако формату BC3 требуются дополнительно 64 бита памяти для хранения альфа-данных. Формат BC3 обрабатывает альфа-канал, сохраняя два эталонных значения и выполняя интерполяцию между ними (аналогично сохранению цвета RGB в формате BC1).

Этот алгоритм работает в блоках текселей 4×4. Вместо хранения 16 альфа-значений алгоритм сохраняет 2 ссылочных альфа-канала (alpha_0 и alpha_1) и 16 3-разрядных цветовых индексов (альфа с a по p), как показано на следующей схеме.

Схема макета для сжатия bc3

Формат BC3 использует альфа-индексы (a–p) для поиска первоначальных цветов в таблице поиска, которая содержит 8 значений. Первые два значения — alpha_0 и alpha_1 — являются минимальными и максимальными значениями; остальные шесть промежуточных значений вычисляются с помощью линейной интерполяции.

Алгоритм определяет количество интерполированных альфа-значений, анализируя два эталонных альфа-значения. Если alpha_0 больше alpha_1, bc3 интерполирует 6 альфа-значений; в противном случае он интерполирует значение 4. Если BC3 интерполирует только 4 альфа-значения, он задает два дополнительных альфа-значения (0 для полностью прозрачного и 255 для полностью непрозрачного). BC3 сжимает альфа-значения в области текселей 4×4, сохраняя битовый код, соответствующий интерполированным альфа-значениям, которые наиболее полно соответствуют исходному альфа-значению для заданного текселя.

if( alpha_0 > alpha_1 )
{
  // 6 interpolated alpha values.
  alpha_2 = 6/7*alpha_0 + 1/7*alpha_1; // bit code 010
  alpha_3 = 5/7*alpha_0 + 2/7*alpha_1; // bit code 011
  alpha_4 = 4/7*alpha_0 + 3/7*alpha_1; // bit code 100
  alpha_5 = 3/7*alpha_0 + 4/7*alpha_1; // bit code 101
  alpha_6 = 2/7*alpha_0 + 5/7*alpha_1; // bit code 110
  alpha_7 = 1/7*alpha_0 + 6/7*alpha_1; // bit code 111
}
else
{
  // 4 interpolated alpha values.
  alpha_2 = 4/5*alpha_0 + 1/5*alpha_1; // bit code 010
  alpha_3 = 3/5*alpha_0 + 2/5*alpha_1; // bit code 011
  alpha_4 = 2/5*alpha_0 + 3/5*alpha_1; // bit code 100
  alpha_5 = 1/5*alpha_0 + 4/5*alpha_1; // bit code 101
  alpha_6 = 0;                         // bit code 110
  alpha_7 = 255;                       // bit code 111
}

Различия между Direct3D 9 и Direct3D 10:

  • В Direct3D 9 формат BC3 называется D3DFMT_DXT4 и D3DFMT_DXT5.

  • В Direct3D 10 формат BC3 представлен DXGI_FORMAT_BC3_UNORM или DXGI_FORMAT_BC3_UNORM_SRGB.

BC4

Используйте формат BC4 для хранения данных об однокомпонентном цвете с использованием 8 битов каждого цвета. В результате повышения точности (по сравнению с BC1) BC4 идеально подходит для хранения данных с плавающей запятой в диапазоне от [0 до 1], используя формат DXGI_FORMAT_BC4_UNORM и [-1–+1], используя формат DXGI_FORMAT_BC4_SNORM. Допустим, текстура 4×4 использует самый крупный из возможных форматов данных. В этом случае эта техника сжатия уменьшает объем необходимой памяти с 16 байтов (16 цветов × 1 компонент/цвет × 1 байт/компонент) до 8 байтов.

Этот алгоритм работает в блоках текселей 4×4. Вместо хранения 16 цветов алгоритм сохраняет 2 эталонных цвета (red_0 и red_1) и 16 3-разрядных цветовых индексов (красный a–красный p), как показано на следующей схеме.

Схема макета для сжатия bc4

Алгоритм использует 3-битовые индексы для поиска цветов в таблице цветов, которая содержит 8 элементов. Первые два цвета — red_0 и red_1 — являются минимальными и максимальными цветами. Этот алгоритм вычисляет оставшиеся цвета с использованием линейной интерполяции.

Алгоритм определяет количество интерполированных значений цвета, анализируя два эталонных значения. Если red_0 больше red_1, bc4 интерполирует 6 значений цвета; в противном случае он интерполирует значение 4. Если BC4 интерполирует только 4 значения цвета, задается два дополнительных значения цвета (0.0f для полностью прозрачного и 1.0f для полностью непрозрачного). BC4 сжимает альфа-значения в области текселей 4×4, сохраняя битовый код, соответствующий интерполированным альфа-значениям, которые наиболее полно соответствуют исходному альфа-значению для заданного текселя.

BC4_UNORM

Следующий пример кода показывает, как выполняется интерполяция однокомпонентных данных.

unsigned word red_0, red_1;

if( red_0 > red_1 )
{
  // 6 interpolated color values
  red_2 = (6*red_0 + 1*red_1)/7.0f; // bit code 010
  red_3 = (5*red_0 + 2*red_1)/7.0f; // bit code 011
  red_4 = (4*red_0 + 3*red_1)/7.0f; // bit code 100
  red_5 = (3*red_0 + 4*red_1)/7.0f; // bit code 101
  red_6 = (2*red_0 + 5*red_1)/7.0f; // bit code 110
  red_7 = (1*red_0 + 6*red_1)/7.0f; // bit code 111
}
else
{
  // 4 interpolated color values
  red_2 = (4*red_0 + 1*red_1)/5.0f; // bit code 010
  red_3 = (3*red_0 + 2*red_1)/5.0f; // bit code 011
  red_4 = (2*red_0 + 3*red_1)/5.0f; // bit code 100
  red_5 = (1*red_0 + 4*red_1)/5.0f; // bit code 101
  red_6 = 0.0f;                     // bit code 110
  red_7 = 1.0f;                     // bit code 111
}

Эталонным цветам назначаются 3-битовые индексы (000–111, поскольку значений 8), которые сохраняются в блоках с red a до red p во время сжатия.

BC4_SNORM

DXGI_FORMAT_BC4_SNORM точно такой же, за исключением того, что данные кодируются в диапазоне SNORM и когда интерполируются 4 значения цвета. Следующий пример кода показывает, как выполняется интерполяция однокомпонентных данных.

signed word red_0, red_1;

if( red_0 > red_1 )
{
  // 6 interpolated color values
  red_2 = (6*red_0 + 1*red_1)/7.0f; // bit code 010
  red_3 = (5*red_0 + 2*red_1)/7.0f; // bit code 011
  red_4 = (4*red_0 + 3*red_1)/7.0f; // bit code 100
  red_5 = (3*red_0 + 4*red_1)/7.0f; // bit code 101
  red_6 = (2*red_0 + 5*red_1)/7.0f; // bit code 110
  red_7 = (1*red_0 + 6*red_1)/7.0f; // bit code 111
}
else
{
  // 4 interpolated color values
  red_2 = (4*red_0 + 1*red_1)/5.0f; // bit code 010
  red_3 = (3*red_0 + 2*red_1)/5.0f; // bit code 011
  red_4 = (2*red_0 + 3*red_1)/5.0f; // bit code 100
  red_5 = (1*red_0 + 4*red_1)/5.0f; // bit code 101
  red_6 = -1.0f;                     // bit code 110
  red_7 =  1.0f;                     // bit code 111
}

Эталонным цветам назначаются 3-битовые индексы (000–111, поскольку значений 8), которые сохраняются в блоках с red a до red p во время сжатия.

BC5

Используйте формат BC5 для хранения данных о двухкомпонентном цвете с использованием 8 битов каждого цвета. В результате повышения точности (по сравнению с BC1) BC5 идеально подходит для хранения данных с плавающей запятой в диапазоне от [0 до 1], используя формат DXGI_FORMAT_BC5_UNORM и [-1–+1], используя формат DXGI_FORMAT_BC5_SNORM. Допустим, текстура 4×4 использует самый крупный из возможных форматов данных. В этом случае эта техника сжатия уменьшает объем необходимой памяти с 32 байтов (16 цветов × 2 компонента/цвет × 1 байт/компонент) до 16 байтов.

Этот алгоритм работает в блоках текселей 4×4. Вместо хранения 16 цветов для обоих компонентов алгоритм сохраняет 2 эталонных цвета для каждого компонента (red_0, red_1, green_0 и green_1) и 16 3-разрядных цветовых индексов для каждого компонента (красный a через красный p и зеленый a через зеленый p), как показано на следующей схеме.

Схема макета для сжатия bc5

Алгоритм использует 3-битовые индексы для поиска цветов в таблице цветов, которая содержит 8 элементов. Первые два цвета — red_0 и red_1 (или green_0 и green_1) — являются минимальными и максимальными цветами. Этот алгоритм вычисляет оставшиеся цвета с использованием линейной интерполяции.

Алгоритм определяет количество интерполированных значений цвета, анализируя два эталонных значения. Если red_0 больше red_1, то BC5 интерполирует 6 значений цвета; в противном случае он интерполирует значение 4. Если BC5 интерполирует только 4 значения цвета, он задает остальные два значения цвета равными 0.0f и 1.0f.

BC5_UNORM

Следующий пример кода показывает, как выполняется интерполяция однокомпонентных данных. Вычисления для зеленых компонентов похожи.

unsigned word red_0, red_1;

if( red_0 > red_1 )
{
  // 6 interpolated color values
  red_2 = (6*red_0 + 1*red_1)/7.0f; // bit code 010
  red_3 = (5*red_0 + 2*red_1)/7.0f; // bit code 011
  red_4 = (4*red_0 + 3*red_1)/7.0f; // bit code 100
  red_5 = (3*red_0 + 4*red_1)/7.0f; // bit code 101
  red_6 = (2*red_0 + 5*red_1)/7.0f; // bit code 110
  red_7 = (1*red_0 + 6*red_1)/7.0f; // bit code 111
}
else
{
  // 4 interpolated color values
  red_2 = (4*red_0 + 1*red_1)/5.0f; // bit code 010
  red_3 = (3*red_0 + 2*red_1)/5.0f; // bit code 011
  red_4 = (2*red_0 + 3*red_1)/5.0f; // bit code 100
  red_5 = (1*red_0 + 4*red_1)/5.0f; // bit code 101
  red_6 = 0.0f;                     // bit code 110
  red_7 = 1.0f;                     // bit code 111
}

Эталонным цветам назначаются 3-битовые индексы (000–111, поскольку значений 8), которые сохраняются в блоках с red a до red p во время сжатия.

BC5_SNORM

DXGI_FORMAT_BC5_SNORM точно такой же, за исключением того, что данные кодируются в диапазоне SNORM и при интерполяции 4 значений данных два дополнительных значения — -1,0f и 1,0f. Следующий пример кода показывает, как выполняется интерполяция однокомпонентных данных. Вычисления для зеленых компонентов похожи.

signed word red_0, red_1;

if( red_0 > red_1 )
{
  // 6 interpolated color values
  red_2 = (6*red_0 + 1*red_1)/7.0f; // bit code 010
  red_3 = (5*red_0 + 2*red_1)/7.0f; // bit code 011
  red_4 = (4*red_0 + 3*red_1)/7.0f; // bit code 100
  red_5 = (3*red_0 + 4*red_1)/7.0f; // bit code 101
  red_6 = (2*red_0 + 5*red_1)/7.0f; // bit code 110
  red_7 = (1*red_0 + 6*red_1)/7.0f; // bit code 111
}
else
{
  // 4 interpolated color values
  red_2 = (4*red_0 + 1*red_1)/5.0f; // bit code 010
  red_3 = (3*red_0 + 2*red_1)/5.0f; // bit code 011
  red_4 = (2*red_0 + 3*red_1)/5.0f; // bit code 100
  red_5 = (1*red_0 + 4*red_1)/5.0f; // bit code 101
  red_6 = -1.0f;                    // bit code 110
  red_7 =  1.0f;                    // bit code 111
}

Эталонным цветам назначаются 3-битовые индексы (000–111, поскольку значений 8), которые сохраняются в блоках с red a до red p во время сжатия.

Преобразование формата с помощью Direct3D 10.1

Direct3D 10.1 позволяет выполнять копирование между предварительно типизированными текстурами и текстурами одной и той же ширины битов. Это могут выполнять функции CopyResource и CopySubresourceRegion.

Начиная с Direct3D 10.1, можно использовать CopyResource и CopySubresourceRegion для копирования между несколькими типами форматов. Этот тип операции копирования выполняет тип преобразования формата, который интерпретирует исходные данные как другой тип формата. Рассмотрите этот пример, в котором показана разница между повторной интерпретацией данных с поведением более стандартного типа преобразования.

    FLOAT32 f = 1.0f;
    UINT32 u;

Чтобы повторно истолковать "f" как тип "u", используйте memcpy:

    memcpy( &u, &f, sizeof( f ) ); // ‘u’ becomes equal to 0x3F800000.

В предыдущем примере повторной интерпретации базовое значение данных не меняется; memcpy повторно интерпретирует число с плавающей запятой как целое число без знака.

Для выполнения более стандартного преобразования используйте следующее назначение:

    u = f; // ‘u’ becomes 1.

В предыдущем преобразовании базовое значение изменений данных.

В следующей таблице перечислены допустимые форматы исходного объекта и объекта назначения, которые можно использовать в данном типе повторной интерпретации преобразования формата. Необходимо кодировать значения надлежащим образом, чтобы повторная интерпретация работала правильно.

Ширина бита Несжатый ресурс Ресурс со сжатием блоков
32 DXGI_FORMAT_R32_UINT
DXGI_FORMAT_R32_SINT
DXGI_FORMAT_R9G9B9E5_SHAREDEXP
64 DXGI_FORMAT_R16G16B16A16_UINT
DXGI_FORMAT_R16G16B16A16_SINT
DXGI_FORMAT_R32G32_UINT
DXGI_FORMAT_R32G32_SINT
DXGI_FORMAT_BC1_UNORM[_SRGB]
DXGI_FORMAT_BC4_UNORM
DXGI_FORMAT_BC4_SNORM
128 DXGI_FORMAT_R32G32B32A32_UINT
DXGI_FORMAT_R32G32B32A32_SINT
DXGI_FORMAT_BC2_UNORM[_SRGB]
DXGI_FORMAT_BC3_UNORM[_SRGB]
DXGI_FORMAT_BC5_UNORM
DXGI_FORMAT_BC5_SNORM

 

Ресурсы (Direct3D 10)