Udostępnij przez


Pakowanie mipmap

W zależności od poziomu obsługi zasobów kafelkowanych, mipmapy z pewnymi wymiarami nie są zgodne ze standardowymi kształtami kafelków i są uważane za spakowane razem w sposób nieprzezroczysty dla aplikacji. Wyższe poziomy wsparcia mają szersze gwarancje dotyczące tego, jakie typy wymiarów powierzchni mieszczą się w standardowych kształtach płytek (i w związku z tym mogą być indywidualnie mapowane przez aplikacje).

To, co może się różnić w zależności od implementacji — biorąc pod uwagę wymiary, format, liczbę mipmap i wycinki tablicy — pewna liczba M mipmap (na wycinek tablicy) może być zmieszczona w pewnej liczbie N kafelków. API ID3D11Device2::GetResourceTiling istnieje, aby umożliwić sterownikowi raportowanie do aplikacji, czym są M i N (wraz z innymi szczegółami dotyczącymi powierzchni, które są standardowe i nie różnią się w zależności od dostawcy sprzętu). Zestaw płytek dla pakowanych mipsów nadal ma 64 KB i może być indywidualnie przypisywany do różnych miejsc w puli płytek. Jednak kształt pikseli kafelków oraz sposób, w jaki mipmapy są dopasowywane w zestawie kafelków, jest specyficzny dla producenta sprzętu i zbyt skomplikowany, aby go ujawnić. W związku z tym aplikacje są wymagane do mapowania wszystkich kafelków, które są oznaczone jako spakowane lub żadne z nich, naraz. W przeciwnym razie zachowanie dostępu do zasobu kafelkowego jest niezdefiniowane.

W przypadku powierzchni tablicowych, zestaw spakowanych mipsów i liczba zapakowanych płytek przechowujących te mipsy (M i N opisane powyżej) stosuje się indywidualnie dla każdej sekcji tablicy.

Dedykowane interfejsy API do kopiowania kafelków (ID3D11DeviceContext2::CopyTiles i ID3D11DeviceContext2::UpdateTiles) nie mogą uzyskać dostępu do spakowanych mipmap. Aplikacje, które chcą kopiować dane do i z spakowanych mipsów, mogą to zrobić przy użyciu wszystkich niekafelkowanych interfejsów API specyficznych dla zasobów na potrzeby kopiowania i renderowania na powierzchniach.

Sposób kafelkowania obszaru zasobu