Udostępnij przez


Zasoby kafelkowe woluminu (Direct3D 12)

Tekstury woluminu (3D) mogą być używane jako zasoby kafelkowe, zauważając, że rozdzielczość kafelka jest trójwymiarowa.

Przegląd

Zasoby kafelkowe oddzielają obiekt zasobu Direct3D z pamięci zapasowej (zasoby w przeszłości miały relację 1:1 z pamięcią zapasową). Pozwala to na różne interesujące scenariusze, takie jak przesyłanie strumieniowe w danych tekstury i ponowne używanie lub zmniejszenie użycia pamięci.

Zasoby z teksturą 2D są obsługiwane w trybie Direct3D 11.2. Opcjonalna obsługa tekstur kafelków 3D jest dostępna dla direct3D 12 i Direct3D 11.3 (zobacz D3D12_TILED_RESOURCES_TIER).

Typowe wymiary zasobów używane w tilingu to 4 x 4 kafelki dla tekstur 2D i 4 x 4 x 4 kafelki dla tekstur 3D.

Bity/piksel (1 próbka/piksel) Wymiary kafelka (piksele, 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

Należy pamiętać, że następujące formaty nie są obsługiwane w przypadku zasobów kafelkowych: formaty 96bpp, formaty wideo, R1_UNORM, R8G8_B8G8_UNORM, R8R8_G8B8_UNORM.

Na poniższych diagramach ciemnoszary reprezentuje kafelki NULL.

Mapowanie domyślne zasobu kafelka tekstury 3D (najbardziej szczegółowe mip)

domyślne mapowanie zasobu 3-wymiarowego kafelka

Mapowanie domyślne zasobu kafelka tekstury 3D (drugi najbardziej szczegółowy mip)

pokazuje drugi najbardziej szczegółowy mip

Zasób kafelkowy tekstury 3D (najbardziej szczegółowy mip)

Poniższy kod konfiguruje zasób kafelkowy 3D w najbardziej szczegółowej 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;

najbardziej szczegółowe mip dla trójwymiarowej tekstury

Zasób kafelka tekstury 3D (drugi najbardziej szczegółowy mip)

Poniższy kod konfiguruje zasób kafelkowy 3D i drugi najbardziej szczegółowy 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;

drugi najbardziej szczegółowy mip dla trójwymiarowej tekstury

Zasób kafelkowy tekstury 3D (pojedynczy kafelek)

Poniższy kod konfiguruje pojedynczy zasób kafelka.

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;

jednowymiarowego zasobu trójwymiarowego

Zasób kafelkowy tekstury 3D (jednolite pudełko)

Poniższy kod konfiguruje zasób z jednolitą skrzynką z kafelkami (zwróć uwagę na instrukcję 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;

jednolitą skrzynkę

Interfejsy API zasobów kafelków

Te same wywołania interfejsu API są używane zarówno dla zasobów kafelków 2D, jak i 3D.

Wyliczenia

Struktury

Metody