Объемные плиточные ресурсы (Direct3D 12)

Объемные (трехмерные) текстуры можно использовать в качестве мозаичного ресурса, отметив, что разрешение плиток является трехмерным.

Общие сведения

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

Ресурсы с плитками двухD-текстур поддерживаются в Direct3D 11.2. Для Direct3D 12 и Direct3D 11.3 доступна дополнительная поддержка текстур с трехмерными плитками (см . D3D12_TILED_RESOURCES_TIER).

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

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

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

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

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

сопоставление по умолчанию для 3-мерного ресурса с плиткой

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

отображает второй самый подробный MIP

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

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

D3D12_TILED_RESOURCE_COORDINATE trCoord{};
trCoord.X = 1;
trCoord.Y = 0;
trCoord.Z = 0;
trCoord.Subresource = 0;

D3D12_TILE_REGION_SIZE trSize{};
trSize.bUseBox = false;
trSize.NumTiles = 63;

Наиболее подробный MIP для трехмерной текстуры

Ресурс текстуры с плиткой 3D (второй по детализации MIP)

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

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

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

второй по детализации MIP для трехмерной текстуры

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

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

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

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

одноэлементный трехмерный ресурс

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

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

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

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

унифицированный прямоугольник

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

Одни и те же вызовы API используются для двух- и трехмерных плиток ресурсов.

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

  • D3D12_TILED_RESOURCES_TIER : определяет уровень поддержки мозаичного ресурса.
  • D3D12_FORMAT_SUPPORT2 : используется для проверки поддержки мозаичного ресурса.
  • D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS : определяет поддержку мозаичного ресурса в ресурсе с несколькими выборками.
  • D3D12_TILE_COPY_FLAGS : содержит флаги для копирования в свернутые плитки ресурсов и линейные буферы и из нее.

Структуры

  • D3D12_TILED_RESOURCE_COORDINATE : содержит координаты x, y и z, а также ссылку на подресурсы. Обратите внимание, что существует вспомогательная структура: CD3DX12_TILED_RESOURCE_COORDINATE.
  • D3D12_TILE_REGION_SIZE : указывает размер и количество плиток в области плитки.
  • D3D12_TILE_SHAPE : фигура плитки в виде ширины, высоты и глубины в текселях.
  • D3D12_FEATURE_DATA_D3D12_OPTIONS : содержит поддерживаемый уровень ресурсов плитки, а логическое значение VolumeTiledResourcesSupported указывает, поддерживаются ли ресурсы с плитками тома.

Методы

  • ID3D12Device::CheckFeatureSupport : используется для определения функций и уровней, поддерживаемых текущим оборудованием.
  • ID3D12GraphicsCommandList::CopyTiles : копирует плитки из буфера в ресурс с плиткой или наоборот.
  • ID3D12CommandQueue::UpdateTileMappings : обновляет сопоставления расположений плиток в мозаичного ресурсах с расположениями памяти в куче ресурсов.
  • ID3D12CommandQueue::CopyTileMappings : копирует сопоставления из исходного мозаичного ресурса в целевой ресурс с плиткой.
  • ID3D12Device::GetResourceTiling : получает сведения о том, как ресурс с плиткой разбивается на плитки.