Ресурсы с плитками томов (Direct3D 12)
Текстуры тома (3D) можно использовать в качестве плиток ресурсов, отметив, что разрешение плиток является трехмерным.
Обзор
Плитки ресурсов отделяют объект ресурса Direct3D от его резервной памяти (ресурсы в прошлом имели связь 1:1 с их резервной памятью). Это позволяет выполнять различные интересные сценарии, такие как потоковая передача данных текстуры и повторное использование или сокращение использования памяти.
Ресурсы с плитками текстуры 2D поддерживаются в Direct3D 11.2. Дополнительная поддержка трехмерных текстур плиток доступна для Direct3D 12 и Direct3D 11.3 (см. D3D12_TILED_RESOURCES_TIER).
Типичные измерения ресурсов, используемые в плитке, — 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)
- сопоставление ресурсов текстуры 3D по умолчанию (второе самое подробное mip)
- ресурс текстуры 3D-плитки (наиболее подробный MIP)
- 3D-ресурс текстуры (второй наиболее подробный MIP)
- текстуры 3D-ресурса (одна плитка)
- ресурса текстуры трехмерной плитки (единое поле)
Сопоставление ресурсов текстуры 3D по умолчанию (наиболее подробное mip)
плитки трехмерного ресурса
Сопоставление ресурсов текстуры 3D по умолчанию (второй наиболее подробный MIP)
mip
Ресурс текстуры трехмерной плитки (наиболее подробный MIP)
Следующий код настраивает 3D-ресурс с плитками на наиболее подробном 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.
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;
Ресурс текстуры трехмерной плитки (одна плитка)
Следующий код настраивает один ресурс плитки.
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 используются для 2D-ресурсов и 3D-плиток.
Перечисления
- 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: получает сведения о том, как фрагментированный ресурс разбивается на плитки.