ID3D11Device1 ::CreateDeviceContextState, méthode (d3d11_1.h)
Crée un objet d’état de contexte qui contient tout l’état De Microsoft Direct3D et certains comportements Direct3D.
Syntaxe
HRESULT CreateDeviceContextState(
UINT Flags,
[in] const D3D_FEATURE_LEVEL *pFeatureLevels,
UINT FeatureLevels,
UINT SDKVersion,
REFIID EmulatedInterface,
[out, optional] D3D_FEATURE_LEVEL *pChosenFeatureLevel,
[out, optional] ID3DDeviceContextState **ppContextState
);
Paramètres
Flags
Type : UINT
Combinaison de valeurs D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG combinées à l’aide d’une opération OR au niveau du bit. La valeur résultante spécifie comment créer l’objet d’état de contexte. L’indicateur D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED est actuellement le seul indicateur défini. Si l’appareil d’origine a été créé avec D3D11_CREATE_DEVICE_SINGLETHREADED, vous devez créer tous les objets d’état de contexte à partir de cet appareil avec l’indicateur D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED .
Si vous définissez l’indicateur à thread unique pour l’objet d’état de contexte et l’appareil, vous garantissez que vous n’appellez l’ensemble de méthodes de contexte et de méthodes d’appareil qu’à partir d’un seul thread. Vous n’avez donc pas besoin d’utiliser des sections critiques pour synchroniser l’accès au contexte de l’appareil, et le runtime peut éviter d’utiliser ces sections critiques nécessitant beaucoup de processeur.
[in] pFeatureLevels
Type : const D3D_FEATURE_LEVEL*
Pointeur vers un tableau de valeurs D3D_FEATURE_LEVEL . Le tableau peut contenir des éléments de la liste suivante et détermine l’ordre des niveaux de fonctionnalité pour lesquels la création est tentée. Contrairement à D3D11CreateDevice, vous ne pouvez pas définir pFeatureLevels sur NULL , car il n’existe aucun tableau de niveau de fonctionnalité par défaut.
{
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_1,
};
FeatureLevels
Type : UINT
Nombre d’éléments dans pFeatureLevels. Contrairement à D3D11CreateDevice, vous devez définir FeatureLevels sur supérieur à 0, car vous ne pouvez pas définir pFeatureLevels sur NULL.
SDKVersion
Type : UINT
Version du Kit de développement logiciel (SDK). Vous devez définir ce paramètre sur D3D11_SDK_VERSION.
EmulatedInterface
Type : REFIID
Identificateur global unique (GUID) pour l’interface émulée. Cette valeur spécifie le comportement de l’appareil lorsque l’objet d’état de contexte est actif. Les valeurs valides sont obtenues à l’aide de l’opérateur __uuidof sur les interfaces ID3D10Device, ID3D10Device1, ID3D11Device et ID3D11Device1 . Consultez la section Notes.
[out, optional] pChosenFeatureLevel
Type : D3D_FEATURE_LEVEL*
Pointeur vers une variable qui reçoit une valeur D3D_FEATURE_LEVEL du tableau pFeatureLevels . Il s’agit de la première valeur de tableau avec laquelle CreateDeviceContextState a réussi à créer l’objet d’état de contexte. Si l’appel à CreateDeviceContextState échoue, la variable pointée par pChosenFeatureLevel est définie sur zéro.
[out, optional] ppContextState
Type : ID3DDeviceContextState**
Adresse d’un pointeur vers un objet ID3DDeviceContextState qui représente l’état d’un appareil Direct3D.
Valeur retournée
Type : HRESULT
Cette méthode retourne l’un des codes de retour Direct3D 11.
Remarques
La valeur REFIID de l’interface émulée est un GUID obtenu à l’aide de l’opérateur __uuidof . Par exemple, __uuidof(ID3D11Device)
obtient le GUID de l’interface vers un appareil Microsoft Direct3D 11.
Appelez la méthode ID3D11DeviceContext1 ::SwapDeviceContextState pour activer l’objet d’état de contexte. Lorsque l’objet d’état de contexte est actif, les comportements de l’appareil associés au niveau de fonctionnalité de l’objet d’état de contexte et à son interface compatible sont activés sur l’appareil Direct3D jusqu’à l’appel suivant à SwapDeviceContextState.
Lorsqu’un objet d’état de contexte est actif, le runtime désactive certaines méthodes sur l’appareil et les interfaces de contexte. Par exemple, un objet d’état de contexte créé avec __uuidof(ID3D11Device)
entraîne la désactivation de la plupart des interfaces d’appareil Microsoft Direct3D 10 par le runtime, et un objet d’état de contexte créé avec __uuidof(ID3D10Device1)
ou __uuidof(ID3D10Device)
entraîne la désactivation du runtime de la plupart des méthodes ID3D11DeviceContext .
Ce comportement garantit qu’un utilisateur de l’une ou l’autre interface émulée ne peut pas définir l’état de l’appareil que l’autre interface émulée ne peut pas exprimer. Cette restriction permet de garantir que l’interface émulée ID3D10Device1 reflète avec précision l’état complet du pipeline et que l’interface émulée ne fonctionnera pas contrairement à sa définition d’interface d’origine.
Par exemple, supposons que l’étape de mise en service soit activée via l’interface ID3D11DeviceContext lorsque vous créez l’appareil via D3D11CreateDevice ou D3D11CreateDeviceAndSwapChain, au lieu des équivalents Direct3D 10. Étant donné que le contexte Direct3D 11 est actif, une interface Direct3D 10 est inactive lorsque vous la récupérez pour la première fois via QueryInterface. Cela signifie que vous ne pouvez pas passer immédiatement une interface Direct3D 10 que vous avez récupérée d’un appareil Direct3D 11 à une fonction. Vous devez d’abord appeler SwapDeviceContextState pour activer un objet d’état de contexte compatible avec Direct3D 10.
Le tableau suivant montre les méthodes actives et inactives pour chaque interface émulée.
Interface émulée | Interfaces d’appareil actif ou de contexte immédiat | Appareils inactifs ou interfaces de contexte immédiates |
---|---|---|
ID3D11Device ou |
ID3D10Device | |
ID3D11DeviceContext (tel que publié par le contexte immédiat. L’interface émulée Direct3D 10 ou Microsoft Direct3D 10.1 n’a aucun effet sur les contextes différés.) |
Le tableau suivant montre les méthodes de contexte immédiates que le runtime désactive lorsque les objets d’état de contexte indiqués sont actifs.
Méthodes d’ID3D11DeviceContext quand __uuidof(ID3D10Device1) ou __uuidof(ID3D10Device) est actif |
Méthodes d’ID3D10Device quand __uuidof(ID3D11Device) est actif |
---|---|
IAGetVertexBuffers | |
IASetIndexBuffer | |
IASetInputLayout | |
IASetPrimitiveTopology | |
IASetVertexBuffers | |
Le tableau suivant montre les méthodes de contexte immédiates que le runtime ne désactive pas lorsque les objets d’état de contexte indiqués sont actifs.
Méthodes d’ID3D11DeviceContext quand __uuidof(ID3D10Device1) ou __uuidof(ID3D10Device) est actif |
Méthodes d’ID3D10Device quand __uuidof(ID3D11Device) est actif |
---|---|
Le tableau suivant présente les méthodes d’interface ID3D10Device que le runtime ne désactive pas, car il ne s’agit pas de méthodes contextuelles immédiates.
Méthodes d’ID3D10Device |
---|
Create*, comme CreateQuery |
Windows Phone 8 : Cette API est prise en charge.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications UWP] |
Serveur minimal pris en charge | Windows Server 2012 et mise à jour de plateforme pour Windows Server 2008 R2 [applications de bureau | Applications UWP] |
Plateforme cible | Windows |
En-tête | d3d11_1.h |
Bibliothèque | D3D11.lib |