Udostępnij za pośrednictwem


Funkcje direct3D 11.2

W wersji Direct3D 11.2 dodano następujące funkcje, które są dołączone do systemu Windows 8.1, Windows RT 8.1 i Windows Server 2012 R2.

Zasoby kafelkowe

Funkcja Direct3D 11.2 umożliwia tworzenie zasobów kafelkowych, które można traktować jako duże zasoby logiczne korzystające z małych ilości pamięci fizycznej. Zasoby kafelkowe są przydatne (na przykład) z terenem w grach i interfejsie użytkownika aplikacji.

Zasoby kafelkowe są tworzone przez określenie flagi D3D11_RESOURCE_MISC_TILED. Aby pracować z zasobem kafelków, użyj następującego interfejsu API:

Aby uzyskać więcej informacji na temat zasobów kafelków, zobacz Zasoby kafelkowe.

Sprawdzanie obsługi zasobów kafelków

Przed użyciem zasobów kafelków należy sprawdzić, czy urządzenie obsługuje zasoby kafelkowe. Poniżej przedstawiono sposób sprawdzania obsługi zasobów kafelkowych:

HRESULT hr = D3D11CreateDevice(
    nullptr,                    // Specify nullptr to use the default adapter.
    D3D_DRIVER_TYPE_HARDWARE,   // Create a device using the hardware graphics driver.
    0,                          // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
    creationFlags,              // Set debug and Direct2D compatibility flags.
    featureLevels,              // List of feature levels this app can support.
    ARRAYSIZE(featureLevels),   // Size of the list above.
    D3D11_SDK_VERSION,          // Always set this to D3D11_SDK_VERSION for Windows Store apps.
    &device,                    // Returns the Direct3D device created.
    &m_d3dFeatureLevel,         // Returns feature level of device created.
    &context                    // Returns the device immediate context.
    );

if (SUCCEEDED(hr))
{
    D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
    DX::ThrowIfFailed(
        device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
        );

    m_tiledResourcesTier = featureData.TiledResourcesTier;
}

Rozszerzona obsługa urządzeń WARP

Direct3D 11.2 rozszerza obsługę urządzeń WARP, które są tworzone przez przekazanie D3D_DRIVER_TYPE_WARP w parametrze DriverTypeD3D11CreateDevice. Program renderator WARP w wersji Direct3D 11.2 dodaje pełną obsługę poziomu funkcji Direct3D 11_1, w tym zasobów kafelków, IDXGIDevice3::Trim, współużytkowanych powierzchni BCn, minblend i domyślnych map. obsługa podwójnej w cieniowaniach HLSL została również włączona wraz z obsługą 16x MSAA.

Dodawanie adnotacji do poleceń graficznych

Direct3D 11.2 umożliwia dodawanie adnotacji do poleceń graficznych przy użyciu następującego interfejsu API:

Łączenie cieniowania HLSL

System Windows 8.1 dodaje oddzielną kompilację i łączenie cieniatorów HLSL, co umożliwia programistom graficznym tworzenie wstępnie skompilowanych funkcji HLSL, pakowanie ich do bibliotek i łączenie ich z pełnymi cieniowaniami w czasie wykonywania. Jest to zasadniczo odpowiednik oddzielnej kompilacji, bibliotek i linków języka C/C++ oraz umożliwia programistom tworzenie wstępnie skompilowanego kodu HLSL, gdy więcej informacji będzie dostępnych do finalizacji obliczeń. Aby uzyskać więcej informacji na temat używania łączenia cieniowania, zobacz Using shader linking.

Wykonaj te kroki, aby utworzyć końcowy moduł cieniowania przy użyciu linków dynamicznych w czasie wykonywania.

Aby utworzyć i użyć łączenia cieniowania

  1. Utwórz obiekt konsolidatora ID3D11Linker, który reprezentuje kontekst łączenia. Nie można użyć pojedynczego kontekstu do tworzenia wielu cieniowania; kontekst łączenia jest używany do tworzenia pojedynczego cieniowania, a następnie odrzucany jest kontekst łączenia.
  2. Użyj D3DLoadModule, aby załadować i ustawić biblioteki z obiektów blob biblioteki.
  3. Użyj D3DLoadModule, aby załadować i ustawić obiekt blob cieniowania wpisu lub utworzyć moduł cieniowania FLG.
  4. Użyj ID3D11Module::CreateInstance utworzyć ID3D11ModuleInstance obiektów, a następnie wywołaj funkcje na tych obiektach, aby ponownie połączyć zasoby z ostatnimi miejscami.
  5. Dodaj biblioteki do konsolidatora, a następnie wywołaj ID3D11Linker::Link, aby utworzyć końcowy kod bajtu cieniowania, który można następnie załadować i użyć w środowisku uruchomieniowym, podobnie jak w pełni skompilowany i połączony moduł cieniowania.

Wykres łączenia funkcji (FLG)

System Windows 8.1 dodaje również wykres linków funkcji (FLG). Za pomocą funkcji FLG można tworzyć cieniowania składające się z sekwencji wstępnie skompilowanych wywołań funkcji, które przekazują wartości do siebie nawzajem. W przypadku korzystania z flg nie ma potrzeby pisania biblioteki HLSL i wywoływania kompilatora HLSL. Zamiast tego struktura cieniowania jest określana programowo przy użyciu wywołań interfejsu API języka C++. Węzły FLG reprezentują podpisy wejściowe i wyjściowe oraz wywołania wstępnie skompilowanych funkcji biblioteki. Kolejność rejestrowania węzłów wywołania funkcji definiuje sekwencję wywołań. Węzeł podpisu wejściowego musi być określony jako pierwszy, podczas gdy węzeł podpisu wyjściowego musi być określony jako ostatni. Krawędzie FLG definiują sposób przekazywania wartości z jednego węzła do innego. Typy danych przekazanych wartości muszą być takie same; nie ma niejawnej konwersji typu. Reguły kształtowania iwizzlingu są zgodne z zachowaniem HLSL i wartościami mogą być przekazywane tylko w tej sekwencji. Aby uzyskać informacje na temat interfejsu API FLG, zobacz ID3D11FunctionLinkingGraph.

Kompilator HLSL skrzynki odbiorczej

Kompilator HLSL jest teraz skrzynką odbiorczą w systemie Windows 8.1 lub nowszym. Teraz większość interfejsów API do programowania cieniowania może być używana w aplikacjach ze Sklepu Windows, które są tworzone dla systemu Windows 8.1 i nowszych. W aplikacjach ze Sklepu Windows utworzonych dla systemu Windows 8 nie można używać wielu interfejsów API programowania cieniującego; strony referencyjne dla tych interfejsów API zostały oznaczone notatką. Jednak niektóre interfejsy API cieniowania (na przykład D3DCompileFromFile) nadal mogą być używane tylko do tworzenia aplikacji ze Sklepu Windows, a nie w aplikacjach przesyłanych do Sklepu Windows; strony referencyjne dla tych interfejsów API są nadal oznaczone notatką.

Co nowego w programie Direct3D 11