Поделиться через


Ресурсы с плитками томов

Текстуры тома (3D) можно использовать в качестве плиток ресурсов, отметив, что разрешение плиток является трехмерным.

Обзор

Плитки ресурсов отделяют объект ресурса D3D от его резервной памяти (ресурсы в прошлом имели связь 1:1 с их резервной памятью). Это позволяет выполнять различные интересные сценарии, такие как потоковая передача данных текстуры и повторное использование или уменьшение использования памяти.

В D3D11.2 поддерживаются 2D11.2. D3D12 и D3D11.3 добавляют поддержку трехмерных текстур.

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

Bits/pixel (1 выборка/пиксель) Размеры плитки (пиксели, w x h x d)
8 64x32x32
16 32x32x32
32 32x32x16
64 32x16x16
128 16x16x16
BC 1,4 128x64x16
BC 2,3,5,6,7 64x64x16

 

Обратите внимание, что следующие форматы не поддерживаются с плитками: форматы 96bpp, видеоформаты, R1_UNORM, R8G8_B8G8_UNORM, R8R8_G8B8_UNORM.

На диаграммах ниже темно-серый цвет представляет плитки NULL.

Сопоставление ресурсов текстуры 3D по умолчанию (наиболее подробное mip)

сопоставление по умолчанию самых подробных MIP

Сопоставление ресурсов текстуры 3D по умолчанию (второй наиболее подробный MIP)

сопоставление по умолчанию второго наиболее подробного mip

Ресурс текстуры трехмерной плитки (наиболее подробный mip)

Следующий код настраивает 3D-ресурс с плитками на наиболее подробном MIP.

D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 0;

D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 63;

наиболее подробное сопоставление трехмерного ресурса

Ресурс текстуры трехмерной плитки (второй самый подробный mip)

Следующий код настраивает 3D-ресурс плитки и второй наиболее подробный MIP:

D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 1;

D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = false;
trSize.NumTiles = 6;

второе наиболее подробное сопоставление трехмерного ресурса

Ресурс 3D-плитки текстуры (одна плитка)

Следующий код настраивает ресурс одной плитки:

D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 1;
trCoord.Y = 1;
trCoord.Z = 1;
trCoord.Subresource = 0;

D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;

одну плитку

Ресурс текстуры 3D с плитками (единое поле)

Следующий код настраивает ресурс с плитками Uniform Box (обратите внимание на инструкцию trSize.bUseBox = true;) :

D3D11_TILED_RESOURCE_COORDINATE trCoord;
trCoord.X = 0;
trCoord.Y = 1;
trCoord.Z = 0;
trCoord.Subresource = 0;

D3D11_TILE_REGION_SIZE trSize;
trSize.bUseBox = true;
trSize.NumTiles = 27;
trSize.Width = 3;
trSize.Height = 3;
trSize.Depth = 3;

единое поле

API-интерфейсы ресурсов D3D11.3 с плитками

Одни и те же вызовы API используются для 2D-ресурсов и 3D-плиток:

Перечисления

  • D3D11_TILED_RESOURCES_TIER: определяет уровень поддержки ресурсов плитки.
  • D3D11_FORMAT_SUPPORT2: используется для тестирования поддержки ресурсов на плитках.
  • D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG: определяет поддержку ресурсов с плитками в ресурсе с несколькими выборками.
  • D3D11_TILE_COPY_FLAGS: содержит флаги для копирования в ресурсы и из фрагментированных плиток и линейных буферов.

Структуры

  • D3D11_TILED_RESOURCE_COORDINATE: содержит ссылку x, y и z, а также ссылку на подресурс. Обратите внимание, что есть вспомогательный класс: CD3D11_TILED_RESOURCE_COORDINATE.
  • D3D11_TILE_REGION_SIZE: указывает размер и количество плиток в области плитки.
  • D3D11_TILE_SHAPE: фигура плитки в виде ширины, высоты и глубины в текселях.
  • D3D11_FEATURE_DATA_D3D11_OPTIONS1: содержит поддерживаемый уровень ресурсов плитки.

Методика

функции Direct3D 11.3