Ресурсы с плитками томов
Текстуры тома (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)
- сопоставление ресурсов текстуры 3D по умолчанию (второе самое подробное mip)
- ресурс текстуры 3D-плитки (наиболее подробный MIP)
- 3D-ресурс текстуры (второй наиболее подробный MIP)
- текстуры 3D-ресурса (одна плитка)
- ресурса текстуры трехмерной плитки (единое поле)
Сопоставление ресурсов текстуры 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: содержит поддерживаемый уровень ресурсов плитки.
Методика
- ID3D11Device::CheckFeatureSupport: используется для определения функций и уровней, поддерживаемых текущим оборудованием.
- ID3D11DeviceContext2::CopyTiles: копирует плитки из буфера в ресурс плитки или наоборот.
- ID3D11DeviceContext2::UpdateTileMappings: обновляет сопоставления расположений плиток в плитках с расположениями памяти в пуле плиток.
- ID3D11DeviceContext2::CopyTileMappings: копирует сопоставления из исходного ресурса плитки в целевой ресурс с плитками.
- ID3D11DeviceContext2::GetResourceTiling: получает сведения о том, как плитки разбиваются на плитки.
Связанные разделы