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


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

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

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

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

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

Типичные размеры ресурсов, используемые при облицовке, — это 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.

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

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

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

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

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

Следующий код настраивает ресурс с трехмерной плиткой на самом подробном 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;

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

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

Следующий код настраивает ресурс с трехмерной плиткой и второй наиболее подробный 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;

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

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

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

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;

одна плитка

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

Следующий код настраивает ресурс с плиткой 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 используются для двух- и трехмерных плиток ресурсов:

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

  • 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 : получает сведения о том, как ресурс с плиткой разбивается на плитки.

Функции Direct3D 11.3