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.
Opisuje sposób dzielenia zasobu na podźródła oraz sposób odwołowania się do jednego, wielu lub fragmentów podźródła.
Przykładowe podźródła
Jeśli zasób zawiera bufor, po prostu zawiera jeden podźródło z indeksem 0. Jeśli zasób zawiera teksturę (lub tablicę tekstur), odwołanie do podźródła jest bardziej złożone.
Niektóre interfejsy API uzyskują dostęp do całego zasobu (na przykład ID3D12GraphicsCommandList::CopyResource method), inne uzyskują dostęp do części zasobu (na przykład ID3D12Resource::ReadFromSubresource). Metody, które uzyskują dostęp do części zasobu, zazwyczaj używają opisu widoku (takiego jak struktura D3D12_TEX2D_ARRAY_SRV), aby określić podźródła dostępu. Aby uzyskać pełną listę, zapoznaj się z sekcją interfejsów API subresource.
Indeksowanie podźródła
Aby zaindeksować określony podźródło, poziomy mip są indeksowane najpierw, gdy każdy wpis tablicy jest indeksowany.
Fragmentator mip
Wycinek mip zawiera jeden poziom mipmap dla każdej tekstury w tablicy, jak pokazano na poniższej ilustracji.
Wycinek tablicy
Biorąc pod uwagę tablicę tekstur, każda tekstura z mipmapami, wycinek tablicy zawiera jedną teksturę i wszystkie jej poziomy mip, jak pokazano na poniższej ilustracji.
Wycinek płaszczyzny
Zazwyczaj formaty planarne nie są używane do przechowywania danych RGBA, ale w przypadkach, w których jest to (być może 24bpp danych RGB), jedna płaszczyzna może reprezentować czerwony obraz, jeden zielony i jeden niebieski obraz. Jeden samolot nie musi mieć jednego koloru, dwa lub więcej kolorów można połączyć w jedną płaszczyznę. Bardziej typowe dane planarne są używane w przypadku danych YCbCr z pod próbkami i Depth-Stencil. Depth-Stencil jest jedynym formatem, który w pełni obsługuje mipmapy, tablice i wiele płaszczyzn (często płaszczyzna 0 dla głębokości i płaszczyzny 1 dla wzornika).
Poniżej przedstawiono indeksowanie podźródła dla tablicy dwóch obrazów Depth-Stencil, z których każdy ma trzy poziomy mip.
Sub-sampled YCbCr obsługuje tablice i ma płaszczyzny, ale nie obsługuje map mip. Obrazy YCbCr mają dwa płaszczyzny, jeden dla luminance (Y), że ludzkie oko jest najbardziej wrażliwe na, a jeden dla chrominance (zarówno Cb, jak i Cr, przeplatane), do którego ludzkie oko jest mniej wrażliwe. Ten format umożliwia kompresję wartości chrominance w celu skompresowania obrazu bez wpływu na lumincję i jest typowym formatem kompresji wideo z tego powodu, chociaż jest używany do kompresowania obrazów nadal. Na poniższej ilustracji przedstawiono format NV12, zauważając, że chrominance został skompresowany do jednej czwartej rozdzielczości luminance, co oznacza, że szerokość każdej płaszczyzny jest taka sama, a płaszczyzna chrominance jest połowę wysokości płaszczyzny luminacji. Płaszczyzny będą indeksowane jako podźródła w identyczny sposób jak w powyższym przykładzie Depth-Stencil.
formatu nv12
Formaty planarne istniały w trybie Direct3D 11, ale poszczególne płaszczyzny nie mogły być rozwiązane indywidualnie, na przykład w przypadku operacji kopiowania lub mapowania. Ta zmiana została zmieniona w trybie Direct3D 12, tak aby każdy samolot otrzymał własny identyfikator podźródła. Porównaj następujące dwie metody obliczania identyfikatora podźródła.
Direct3D 11
inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )
{
return MipSlice + (ArraySlice * MipLevels);
}
Direct3D 12
inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{
return MipSlice + (ArraySlice * MipLevels) + (PlaneSlice * MipLevels * ArraySize);
}
Większość sprzętu zakłada, że pamięć dla płaszczyzny N jest zawsze natychmiast przydzielana po płaszczyźnie N-1.
Alternatywą dla używania podźródła jest to, że aplikacja może przydzielić całkowicie oddzielny zasób na płaszczyznę. W takim przypadku aplikacja rozumie, że dane są planarne i używa wielu zasobów do reprezentowania.
Wiele podźródła
Widok cieniowania zasobów może wybrać dowolny prostokątny region podźródła, używając jednego z wycinków opisanych powyżej i rozsądnego użycia pól w strukturach widoków (takich jak D3D12_TEX2D_ARRAY_SRV), jak pokazano na obrazie.
wyboru wielu podźródła
Widok elementu docelowego renderowania może używać tylko jednego podźródła lub fragmentatora mip i nie może zawierać podźródła z więcej niż jednego wycinka mip. Oznacza to, że każda tekstura w widoku render-target musi mieć taki sam rozmiar. Widok cieniowania zasobów może wybrać dowolny prostokątny region podźródła, jak pokazano na obrazie.
Interfejsy API podźródła
Następujące interfejsy API odwołują się do podźródła i pracują z podźródami:
Wyliczenia:
Poniższe struktury zawierają indeksy PlaneSlice, większość zawiera indeksy MipSlice.
- D3D12_TEX2D_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2D_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2D_UAV
- D3D12_TEX2D_ARRAY_UAV
Poniższe struktury zawierają indeksy ArraySlice, większość zawiera indeksy MipSlice.
- D3D12_TEX1D_ARRAY_DSV
- D3D12_TEX2D_ARRAY_DSV
- D3D12_TEX2DMS_ARRAY_DSV
- D3D12_TEX1D_ARRAY_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2DMS_ARRAY_RTV
- D3D12_TEX1D_ARRAY_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2DMS_ARRAY_SRV
- D3D12_TEX1D_ARRAY_UAV
- D3D12_TEX2D_ARRAY_UAV
Poniższe struktury zawierają indeksy mipSlice, ale ani ArraySlice, ani PlaneSlice indeksy.
Następujące struktury odwołują się również do podźródła:
- D3D12_DISCARD_REGION: struktura używana w ramach przygotowań do odrzucania zasobu.
- D3D12_PLACED_SUBRESOURCE_FOOTPRINT : dodaje przesunięcie do zasobu do podstawowego śladu.
- D3D12_RESOURCE_TRANSITION_BARRIER : opisuje przejście podźródła między różnymi użyciemi (zasób cieniowania, obiekt docelowy renderowania itp.).
- D3D12_SUBRESOURCE_DATA: dane podźródła zawierają dane, a także wiersz i fragment.
- D3D12_SUBRESOURCE_FOOTPRINT : ślad obejmuje format, szerokość, wysokość, głębokość i skok wiersza podźródła.
- D3D12_SUBRESOURCE_INFO : zawiera przesunięcie, skok wiersza i wysokość głębokości podźródła.
- D3D12_SUBRESOURCE_TILING : opisuje wolumin podźródła kafelków (zobacz zasoby kafelkowe woluminu).
- D3D12_TEXTURE_COPY_LOCATION : opisuje część tekstury na potrzeby kopiowania.
- D3D12_TILED_RESOURCE_COORDINATE : opisuje współrzędne zasobu kafelka.
Metody:
- ID3D12Device::GetCopyableFootprints : pobiera informacje o zasobie, aby umożliwić tworzenie kopii.
- ID3D12Device::GetResourceTiling : pobiera informacje o tym, jak zasób kafelków jest podzielony na kafelki.
- ID3D12GraphicsCommandList::ResolveSubresource : kopiuje wieloskładnikowe podźródło do nieprzykładowego podźródła.
- ID3D12Resource::Map : zwraca wskaźnik do określonych danych w zasobie i odmawia dostępu procesora GPU do podźródła.
- ID3D12Resource::ReadFromSubresource : kopiuje dane z podźródła lub prostokątny region podźródła.
- ID3D12Resource::Unmap : usuwa mapowanie określonego zakresu pamięci i unieważnia wskaźnik do zasobu. Przywraca dostęp procesora GPU do podźródła.
- ID3D12Resource::WriteToSubresource: kopiuje dane do podźródła lub prostokątny region podźródła.
Tekstury muszą być w stanie D3D12_RESOURCE_STATE_COMMON, aby dostęp do procesora CPU za pośrednictwem WriteToSubresource i ReadFromSubresource być legalne; ale nie. Dostęp procesora CPU do zasobu jest zwykle wykonywany za pośrednictwem Mapowanie/Unmap.
Tematy pokrewne