Runtime et handles de pilote Direct3D version 10
Le runtime et les handles de pilote Direct3D version 10 partagent la même durée de vie. Le runtime Direct3D spécifie la durée de vie d’un objet entre les appels aux fonctions de type create (par exemple, CreateResource(D3D10)) et les appels aux fonctions de type destroy (par exemple , DestroyResource(D3D10)). Le runtime fournit des valeurs de pilote-handle ainsi que des valeurs runtime-handle. Ces handles sont essentiellement des pointeurs qui sont encapsulés avec un type fort pour identifier l’objet sur lequel est opéré. Voici des exemples de handles d’exécution et de pilote pour les ressources :
// Strongly typed handle to identify a resource object to the driver:
typedef struct D3D10DDI_HRESOURCE
{
void* pDrvPrivate; // Pointer to memory location as large as the driver requested.
} D3D10DDI_HRESOURCE;
// Strongly typed handle to identify a resource object to the runtime:
typedef struct D3D10DDI_HRTRESOURCE
{
void* handle;
} D3D10DDI_HRTRESOURCE;
Tous les handles de pilote pour un objet de périphérique de rendu et ses objets enfants subissent le mécanisme de création en deux passes suivant :
Pour déterminer la valeur du pointeur de handle de pilote, le runtime appelle d’abord une fonction CalcPrivateObjTypeSize (par exemple, la fonction CalcPrivateResourceSize ). Dans cet appel, le runtime passe les paramètres de création (par exemple, un pointeur vers la structure D3D10DDIARG_CREATERESOURCE ). Le runtime transmet également les paramètres de création dans l’appel à une fonction Create ObjType.
Le pilote d’affichage en mode utilisateur n’est généralement pas nécessaire pour allouer quoi que ce soit pendant un appel à CalcPrivateObjTypeSize. Toutefois, si le pilote fait et échoue ou doit indiquer tout autre type de condition de défaillance, le pilote peut retourner SIZE_T( -1 ) pour empêcher la création de handle. Le runtime retourne ensuite une condition d’erreur E_OUTOFMEMORY à l’application appelante.
Au minimum, le pilote doit retourner sizeof( void* ) à partir d’un appel à CalcPrivateObjTypeSize.
Si le runtime peut allouer suffisamment d’espace pour satisfaire la taille requise par le pilote d’affichage en mode utilisateur, le runtime appelle alors une fonction Create ObjType (par exemple, CreateResource(D3D10)) avec les mêmes paramètres de création, ainsi que la nouvelle valeur unique pour le handle de pilote. La valeur de pointeur du handle de pilote est unique et constante pour la durée de vie du handle, car elle pointe vers une région de mémoire dont la taille a été retournée par CalcPrivateObjTypeSize. Le pilote d’affichage en mode utilisateur peut utiliser cette région de mémoire en fonction des besoins. Le pilote doit gagner en efficacité en localisant toutes les données fréquemment consultées dans la région de mémoire fournie par le runtime.