Udostępnij przez


Poziom funkcji Direct3D 12 Core 1.0

Poziom funkcji Core 1.0 jest podzbiorem pełnego zestawu funkcji Direct3D 12. Poziom funkcji Core 1.0 może być uwidoczniony przez kategorię urządzeń znanych jako urządzenia tylko do obliczeń . Ogólny model sterowników dla urządzeń tylko do obliczeń to Model sterowników obliczeniowych firmy Microsoft (MCDM). MCDM to pomniejszona wersja Modelu Sterownika Urządzeń Windows (WDDM), która ma większy zakres.

Urządzenie obsługujące tylko funkcje w ramach Poziomu Funkcji Podstawowych jest znane jako urządzenie Core.

Uwaga

urządzenia tylko do obliczeń, urządzenia MCDM, urządzenia o podstawowym poziomie funkcjii urządzenia Core oznaczają to samo. Dla uproszczenia, będziemy preferować urządzenie Core.

Tworzenie urządzenia rdzeniowego

Ogólnie rzecz biorąc, aby utworzyć urządzenie Direct3D 12, należy wywołać funkcję D3D12CreateDevice i określić minimalny poziom funkcji.

Jeśli określisz poziom funkcji od 9 do 12, zwracane urządzenie jest urządzeniem bogatym w funkcje, takim jak tradycyjny procesor GPU (który obsługuje nadzbiór funkcji urządzenia Core). Urządzenie główne nigdy nie jest zwracane dla tego zakresu poziomów funkcji.

Z drugiej strony, jeśli określisz poziom funkcji Core (na przykład D3D_FEATURE_LEVEL::D3D_FEATURE_LEVEL_1_0_CORE), urządzenie, które zostanie zwrócone, może posiadać wiele funkcji lub może być urządzeniem Core.

// d3dcommon.h
D3D_FEATURE_LEVEL_1_0_CORE = 0x1000

Jeśli określisz _CORE poziom funkcji, wówczas środowisko uruchomieniowe/warstwa debugowania sprawdza, czy funkcje używane przez aplikację są dozwolone przez ten _CORE poziom funkcji. Ten zestaw funkcji jest zdefiniowany w dalszej części tego tematu.

Model cieniowania dla urządzeń podstawowych

Urządzenie Podstawowe obsługuje model Cieniowania w wersji 5.0 lub nowszej.

Środowisko uruchomieniowe wykonuje konwersję modeli cieniowania 5.x innych niż DXIL na 6.0 DXIL. Dlatego sterownik potrzebuje tylko obsługi 6.x.

Model zarządzania zasobami dla urządzeń core

  • Obsługiwane wymiary zasobów: tylko surowe i ustrukturyzowane bufory (bez typizowanych, tekstury 1D/2D itd.)
  • Brak obsługi kafelkowanych zasobów zarezerwowanych
  • Brak obsługi niestandardowych stert
  • Żadna z tych flag sterty nie jest obsługiwana.
    • D3D12_HEAP_FLAG_HARDWARE_PROTECTED
    • D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
    • D3D12_HEAP_FLAG_ALLOW_DISPLAY
    • D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS (atomiki cieniowania są wymagane, ta flaga dotyczy innej funkcji, atomików między adapterami)

Model powiązania zasobów dla urządzeń podstawowych

  • Obsługa tylko powiązania zasobów w warstwie 1
  • Wyjątki:
    • Brak obsługi samplerów tekstur
    • Obsługa 64 dronów, takich jak Poziom funkcji 11.1+ (w przeciwieństwie do tylko 8)
    • Implementacje nie muszą stosować sprawdzania ograniczeń dostępu dla cieniowania do zasobów poprzez deskryptory, ponieważ dostępy poza granicami prowadzą do niezdefiniowanego zachowania.
      • W rezultacie flaga zakresu deskryptorów D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_STATIC_KEEPING_BUFFER_BOUNDS_CHECKS w sygnaturach głównych nie jest obsługiwana.
  • Deskryptory UAV/CBV można tworzyć tylko na zasobach z domyślnych stert, czyli nie z stert przesyłania/odczytu zwrotnego. Wymusza to na aplikacji wykonywanie kopii w celu przesyłania danych pomiędzy CPU<a GPU>.
  • Mimo że jest to najniższa warstwa zdolności wiązania, nadal istnieją pewne funkcje wymagane nawet w tej warstwie, które warto wymienić:
    • Stosy deskryptorów można zaktualizować po zarejestrowaniu listy poleceń (zobacz D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE w specyfikacji wiązania zasobów)
    • Deskryptory podstawowe są w zasadzie wskaźnikami GPUVA
      • Mimo że nie ma obsługi MMU / VA, adresy w buforach, które są używane w deskryptorach głównych, mogą być emulowane przez implementacje poprzez poprawki adresów.

Ograniczenia buforu strukturalnego

Strukturalne bufory muszą mieć adres podstawowy, który jest wyrównany do 4 bajtów, a przesunięcie musi mieć wartość 2 lub musi być wielokrotnością 4. Przypadek kroku 2 dotyczy aplikacji z danymi 16-bitowymi, szczególnie mając na uwadze brak obsługi typowanych buforów w D3D_FEATURE_LEVEL_1_0_CORE.

Krok określony w deskryptorach musi odpowiadać kroku określonego w HLSL.

Obsługa kolejki poleceń dla urządzeń Core

Tylko kolejki obliczeń i kopiowania (bez kolejek 3D, wideo itp.).

Obsługa shaderów dla urządzeń Core

Tylko cieniowania obliczeniowe, brak cieniowania grafiki (wierzchołki, cieniowanie pikseli itp.) ani żadnych powiązanych funkcji, takich jak obiekty docelowe renderowania, łańcuchy wymiany, asembler danych wejściowych.

Precyzja arytmetyczna

Podstawowe urządzenia nie muszą obsługiwać denormalnych liczb dla 16-bitowych operacji zmiennoprzecinkowych.

Obsługiwane interfejsy API dla urządzeń Core

Poniższa lista reprezentuje obsługiwany podzbiór pełnego interfejsu programowania aplikacji (interfejsy API, które nie są obsługiwane na poziomie funkcji Core 1.0, nie są wymienione).

Metody ID3D12Device

METODY ID3D12Device1

Metody ID3D12Device2

Metody ID3D12Device3

Metody ID3D12Device4

Metody ID3D12Device5

Metody ID3D12CommandQueue

METODY ID3D12CommandList

Metody ID3D12GraphicsCommandList

Metody ID3D12GraphicsCommandList1

Metody ID3D12GraphicsCommandList2

Metody ID3D12GraphicsCommandList4