Delen via


API-lagen (Direct3D 10)

De Direct3D 10-runtime wordt samengesteld met lagen, te beginnen met de basisfunctionaliteit in de kern en het bouwen van optionele en ontwikkelaarshulpfunctionaliteit in buitenste lagen.

Kernlaag

De kernlaag bestaat standaard; biedt een zeer dunne toewijzing tussen de API en het apparaatstuurprogramma, waardoor overhead voor aanroepen met hoge frequentie wordt geminimaliseerd. Omdat de kernlaag essentieel is voor prestaties, wordt alleen kritieke validatie uitgevoerd.

De resterende lagen zijn optioneel. In algemene regel voegen lagen functionaliteit toe, maar wijzigen het bestaande gedrag niet. Kernfuncties hebben bijvoorbeeld dezelfde retourwaarden, onafhankelijk van de foutopsporingslaag die wordt geïnstantieerd, hoewel er mogelijk extra foutopsporingsuitvoer wordt opgegeven als de foutopsporingslaag wordt geïnstantieerd.

Maak lagen wanneer een apparaat wordt gemaakt door D3D10CreateDevice- aan te roepen en een of meer D3D10_CREATE_DEVICE_FLAG waarden op te leveren.

Foutopsporingslaag

De foutopsporingslaag biedt uitgebreide aanvullende parameter- en consistentievalidatie (zoals het valideren van shader-koppeling en resourcebinding, het valideren van parameterconsistentie en foutbeschrijvingen). De uitvoer die door de foutopsporingslaag wordt gegenereerd, bestaat uit een wachtrij met tekenreeksen die toegankelijk zijn met behulp van de ID3D10InfoQueue Interface (zie Debug Output aanpassen met ID3D10InfoQueue (Direct3D 10)). Fouten die door de kernlaag worden gegenereerd, worden gemarkeerd met waarschuwingen door de foutopsporingslaag.

Als u een apparaat wilt maken dat ondersteuning biedt voor de foutopsporingslaag, moet u de DirectX SDK installeren (om D3D10SDKLayers.DLL op te halen) en vervolgens de vlag D3D10_CREATE_DEVICE_DEBUG opgeven bij het aanroepen van D3D10CreateDevice. Het uitvoeren van een toepassing met de foutopsporingslaag is natuurlijk aanzienlijk langzamer. Als u foutopsporingsberichten voor D3DX10-API's wilt in- of uitschakelen, roept u D3DX10DebugMute-aan.

Wanneer de foutopsporingslaag geheugenlekken vermeldt, wordt er een lijst met objectinterfaceaanwijzers uitgevoerd, samen met hun beschrijvende namen. De standaard beschrijvende naam is '<naamloze>'. U kunt de beschrijvende naam instellen met behulp van de methode ID3D10DeviceChild::SetPrivateData en de WKPDID_D3DDebugObjectName GUID die zich in D3Dcommon.h bevindt. Als u bijvoorbeeld pTexture een naam wilt geven met een SDKLayer-naam van mytexture.jpg, gebruikt u de volgende code:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

Normaal gesproken moet u deze aanroepen uit uw productieversie compileren.

Overschakelen naar referentielaag

Met deze laag kan een toepassing overschakelen tussen een hardwareapparaat (HAL) en een referentie- of softwareapparaat (REF). Als u een apparaat wilt overschakelen, moet u eerst een apparaat maken dat ondersteuning biedt voor de switch-to-reference-laag (zie D3D10CreateDevice) en vervolgens ID3D10SwitchToRef::SetUseRefaanroepen.

Alle apparaatstatussen, resources en objecten worden onderhouden via deze apparaatovergang. Het is echter soms niet mogelijk om exact overeen te komen met resourcegegevens. Dit komt doordat bepaalde informatie beschikbaar is voor een hardwareapparaat dat niet beschikbaar is voor een referentieapparaat.

Vrijwel alle realtime toepassingen maken gebruik van de HAL-implementatie van de pijplijn. Wanneer de pijplijn wordt overgeschakeld van een hardwareapparaat naar een referentieapparaat, worden renderingbewerkingen tegelijkertijd uitgevoerd in zowel hardware als software. Naarmate het softwareapparaat wordt weergegeven, moeten resources worden gedownload naar het systeemgeheugen. Dit kan vereisen dat andere resources in de cache in het systeemgeheugen worden verwijderd om ruimte te maken.

Notitie

Deze switch-to-reference-layer-functie wordt alleen ondersteund in Direct3D 10 en Direct3D 10.1 en wordt niet meer ondersteund in Direct3D 11 en latere versies.

 

Thread-Safe laag

Deze laag is ontworpen om toepassingen met meerdere threads toegang te geven tot het apparaat vanuit meerdere threads.

Een Direct3D 10-toepassing kan een apparaatsynchronisatie beheren met behulp van apparaatfuncties. Hierdoor kan een toepassing kritieke secties in- of uitschakelen (tijdelijk multithreading-beveiliging in- of uitschakelen) en een kritieke sectievergrendeling overnemen/vrijgeven via meerdere Direct3D 10 API-toegangspunten. De thread-veilige laag is standaard ingeschakeld. Voor toepassingen met één thread heeft de thread-veilige laag geen invloed op de prestaties.

Verschillen tussen Direct3D 9 en Direct3D 10:

  • In tegenstelling tot Direct3D 9 wordt de Direct3D 10-API standaard ingesteld op volledig thread-veilig.

 

API-functies (Direct3D 10)