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.
Użycie domyślnego mapowania tekstur zmniejsza użycie kopii i pamięci podczas udostępniania danych obrazu między procesorem GPU a procesorem CPU. Jednak należy go używać tylko w określonych sytuacjach. Standardowy układ "swizzle" pozwala uniknąć kopiowania lub przekształcania danych w wielu układach.
- Omówienie
- interfejsy API D3D11.3
- Tematy pokrewne
Przegląd
Mapowanie domyślnych tekstur nie powinno być pierwszym wyborem dla deweloperów. Deweloperzy powinni najpierw kodować w sposób przyjazny dla dyskretnych kart graficznych GPU (czyli unikać dostępu do procesora CPU dla większości tekstur i przekazywać je za pomocą CopySubresourceRegion1). Jednak w niektórych przypadkach CPU i GPU mogą komunikować się tak często z tymi samymi danymi, że mapowanie domyślnych tekstur staje się pomocne w oszczędzaniu energii lub przyspieszenia konkretnych projektów na określonych kartach graficznych lub architekturach. Aplikacje powinny wykrywać te przypadki i optymalizować niepotrzebne kopie.
W D3D11.3 tekstury utworzone przy użyciu D3D11_TEXTURE_LAYOUT_UNDEFINED (jednego z elementów wyliczenia D3D11_TEXTURE_LAYOUT) i bez dostępu CPU są najbardziej wydajne przy częstym renderowaniu i próbkowaniu przez GPU. Podczas testowania wydajności te tekstury powinny być porównywane z D3D11_TEXTURE_LAYOUT_UNDEFINED z dostępem do CPU, D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE z dostępem do CPU oraz D3D11_TEXTURE_LAYOUT_ROW_MAJOR na potrzeby obsługi międzyadapterowej.
Użycie D3D11_TEXTURE_LAYOUT_UNDEFINED z dostępem do procesora CPU umożliwia metody WriteToSubresource, ReadFromSubresource, Map (uniemożliwiając dostęp aplikacji do wskaźnika) i Unmap; ale może poświęcić wydajność dostępu do GPU. Użycie D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE z dostępem do procesora CPU umożliwia WriteToSubresource, ReadFromSubresource, Map (która zwraca prawidłowy wskaźnik do aplikacji) i Unmap. Może również poświęcić wydajność dostępu do GPU bardziej niż w przypadku D3D11_TEXTURE_LAYOUT_UNDEFINED, gdy korzysta się z dostępu do CPU.
Ogólnie, aplikacje powinny tworzyć większość tekstur jako dostępne tylko dla GPU, przy D3D11_TEXTURE_LAYOUT_UNDEFINED.
Wcześniej niż funkcja mapowania tekstur domyślnych istniała tylko jeden standardowy układ dla danych wielowymiarowych: "liniowy", znany również jako "wiersz-major". Aplikacje powinny unikać tekstur USAGE_STAGING i USAGE_DYNAMIC, gdy dostępna jest domyślna mapa. Tekstury USAGE_STAGING i USAGE_DYNAMIC używają układu liniowego.
D3D11.3 (i D3D12) wprowadza standardowy wielowymiarowy układ danych. Jest to możliwe, aby umożliwić wielu jednostkom przetwarzania działanie na tych samych danych bez kopiowania danych lubwizzowania danych między wieloma układami. Ustandaryzowany układ umożliwia zwiększenie wydajności dzięki efektom sieciowym i umożliwia algorytmom wykonywanie krótkich cięć przy założeniu określonego wzorca.
Należy jednak pamiętać, że ten standardowy swizzle jest funkcją sprzętową i może nie być obsługiwany przez wszystkie procesory GPU.
Interfejsy API D3D11.3
W przeciwieństwie do D3D12, D3D11.3 nie obsługuje domyślnie mapowania tekstur, więc należy wykonać zapytanie D3D11_FEATURE_DATA_D3D11_OPTIONS2. W przypadku wywołania ID3D11Device::CheckFeatureSupport i sprawdzania pola StandardSwizzle64KBSupportedD3D11_FEATURE_DATA_D3D11_OPTIONS2należy również wykonać zapytanie o element swizdle w warstwie Standardowa.
Następujące interfejsy API odwołują się do mapowania tekstur:
Wyliczenia
- D3D11_TEXTURE_LAYOUT : kontroluje wzorzecwizłu domyślnych tekstur i włącza obsługę map na domyślnych teksturach.
- D3D11_FEATURE : odwołania D3D11_FEATURE_DATA_D3D11_OPTIONS2.
- D3D11_TILE_COPY_FLAG : zawiera flagi do kopiowania przeplecionych zasobów kafelkowych do i z liniowych buforów.
Struktur
- D3D11_TEXTURE2D_DESC1 : opisuje teksturę 2D. Zanotuj strukturę pomocnika CD3D11_TEXTURE2D_DESC1.
- D3D11_TEXTURE3D_DESC1 : opisuje teksturę 3D. Zanotuj strukturę pomocnika CD3D11_TEXTURE3D_DESC1.
Metody
- ID3D11Device3::CreateTexture2D1 : tworzy tablicę tekstur 2D.
- ID3D11Device3::CreateTexture3D1 : tworzy jedną teksturę 3D.
- ID3D11Device3::WriteToSubresource : kopiuje dane do tekstury D3D11_USAGE_DEFAULT, która została zmapowana przy użyciu Map.
- ID3D11Device3::ReadFromSubresource : kopiuje dane z tekstury D3D11_USAGE_DEFAULT, która została zmapowana przy użyciu Map.
- ID3D11DeviceContext::Map : pobiera wskaźnik do danych zawartych w podzasobie i uniemożliwia dostęp GPU do tego podzasobu.
- ID3D11DeviceContext::Unmap: unieważnia wskaźnik do zasobu i ponownie umożliwia dostęp procesora graficznego do tego zasobu.
- ID3D11Texture2D1::GetDesc1 : pobiera właściwości zasobu tekstury 2D.
- ID3D11Texture3D1::GetDesc1 : pobiera właściwości zasobu tekstury 3D.
Tematy pokrewne
-
funkcje Direct3D 11.3