Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 3D tekstury 3D (najbardziej szczegółowe mip)
- mapowanie domyślne zasobu kafelka 3D tekstury (drugi najbardziej szczegółowy mip)
- zasób tekstury 3D (najbardziej szczegółowy mip)
- zasób tekstury 3D (drugi najbardziej szczegółowy mip)
- zasób tekstury 3D (pojedynczy kafelek)
- zasób tekstury 3D (jednolite pudełko)
Mapowanie domyślne zasobu kafelka tekstury 3D (najbardziej szczegółowe mip)
Mapowanie domyślne zasobu kafelka tekstury 3D (drugi najbardziej szczegółowy mip)
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;
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;
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;
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;
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
- D3D12_TILED_RESOURCES_TIER : określa poziom obsługi zasobów kafelków.
- D3D12_FORMAT_SUPPORT2 : służy do testowania obsługi zasobów kafelków.
- D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS : określa obsługę zasobów kafelków w zasobie z wieloma próbkami.
- D3D12_TILE_COPY_FLAGS : zawiera flagi kopiowania do i zwizzled zasobów kafelkowych i liniowych.
Struktury
- D3D12_TILED_RESOURCE_COORDINATE : przechowuje odwołanie współrzędne x, y i z. Zwróć uwagę, że istnieje struktura pomocnika: CD3DX12_TILED_RESOURCE_COORDINATE.
- D3D12_TILE_REGION_SIZE : określa rozmiar i liczbę kafelków w regionie kafelków.
- D3D12_TILE_SHAPE : kształt kafelka jako szerokość, wysokość i głębokość w texels.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : przechowuje obsługiwany poziom warstwy zasobów kafelka i wartość logiczną, VolumeTiledResourcesSupported, wskazuje, czy zasoby kafelków woluminu są obsługiwane.
Metody
- ID3D12Device::CheckFeatureSupport : służy do określania, jakie funkcje i w jakiej warstwie są obsługiwane przez bieżący sprzęt.
- ID3D12GraphicsCommandList::CopyTiles : kopiuje kafelki z buforu do zasobu kafelka lub odwrotnie.
- ID3D12CommandQueue::UpdateTileMappings: aktualizuje mapowania lokalizacji kafelków w zasobach kafelków do lokalizacji pamięci w stercie zasobów.
- ID3D12CommandQueue::CopyTileMappings : kopiuje mapowania ze źródłowego zasobu kafelka do docelowego zasobu kafelka.
- ID3D12Device::GetResourceTiling : pobiera informacje o tym, jak zasób kafelków jest podzielony na kafelki.