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.
Począwszy od systemu Windows 8, sterowniki graficzne mogą implementować minimalną precyzję skalarnych typów danych HLSL, przy użyciu dowolnej precyzji większej lub równej określonej precyzji bitów. Jeśli kod cieniowania o minimalnej precyzji HLSL jest używany na sprzęcie, który obsługuje minimalną precyzję HLSL, zużywasz mniejszą przepustowość pamięci, a w rezultacie wykorzystujesz mniej energii systemu.
Możesz wykonać zapytanie o minimalną dokładność obsługiwaną przez sterownik graficzny, wywołując ID3D11Device::CheckFeatureSupport z wartością D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT. Aby uzyskać więcej informacji, zobacz minimalną obsługę precyzji HLSL.
- Deklarowanie zmiennych z minimalnymi typami danych precyzji
- Testowanie kodu cieniowania o minimalnej precyzji
- Tematy pokrewne
Deklarowanie zmiennych z minimalnymi typami danych precyzji
Aby użyć minimalnej dokładności w kodzie cieniowania HLSL, zadeklaruj poszczególne zmienne o typach takich jak min16float (min16float4 dla wektora), min16int, min10floatitd. W przypadku tych zmiennych kod cieniowania wskazuje, że nie wymaga większej dokładności niż to, co wskazują zmienne. Sprzęt może jednak ignorować minimalne wskaźniki dokładności i działać z pełną precyzją 32-bitową. Gdy kod cieniowania jest używany na sprzęcie, który korzysta z minimalnej precyzji, używasz mniejszej przepustowości pamięci i w rezultacie używasz mniejszej mocy systemu, o ile kod cieniowania nie oczekuje większej dokładności niż określono.
Nie musisz tworzyć wielu cieniowników, które używają i nie używają minimalnej precyzji. Zamiast tego należy utworzyć shadery z minimalną precyzją, a zmienne o minimalnej precyzji zachowują się z pełną precyzją 32-bitową, jeśli sterownik graficzny zgłasza, że nie obsługuje żadnej minimalnej precyzji. Minimalne cienie precyzyjne HLSL nie działają w systemach operacyjnych starszych niż Windows 8, więc jeśli planujesz obsługiwać wcześniejsze systemy operacyjne, musisz tworzyć wiele cieni, niektóre używające minimalnej precyzji, a inne jej nie używają.
Notatka
Nie należy przełączać danych między różnymi poziomami dokładności w shaderze, ponieważ tego rodzaju konwersje są nieefektywne i zmniejszają wydajność. Wyjątek stanowi fakt, że stałe cieniowania pozostają zawsze 32-bitowe, natomiast dostawcy mogą projektować sprzęt graficzny, który potrafi swobodnie konwertować na dowolną niższą precyzję, jakiej może użyć instrukcja HLSL.
Korzystając z minimalnej precyzji, można kontrolować precyzję obliczeń w różnych częściach kodu cieniowania.
Reguły minimalnej precyzji HLSL są podobne do C/C++, gdzie typy w wyrażeniu określają precyzję operacji, a nie typ, do którego jest ostatecznie zapisywany.
Testowanie kodu shadera o minimalnej precyzji
Rasteryzator odniesienia (D3D_DRIVER_TYPE_REFERENCE) umożliwia zrozumienie, jak minimalna precyzja w kodzie cieniowania HLSL zachowuje się, przeprowadzając kwantyzację każdej instrukcji HLSL do określonego poziomu precyzji. Ułatwia to odnajdywanie kodu, który może przypadkowo polegać na większej niż minimalnej precyzji. Rasteryzator referencyjny nie działa szybciej, gdy kod cieniowania HLSL używa minimalnej precyzji, ale można go użyć, aby zweryfikować poprawność kodu. WARP (D3D_DRIVER_TYPE_WARP) nie obsługuje użycia minimalnej precyzji w kodzie cieniowania HLSL; WARP działa wyłącznie z pełną precyzją 32-bitową.
Tematy pokrewne
-
Przewodnik programowania dla HLSL