Types d’appareils et exigences de traitement des vertex (Direct3D 9)

Les performances des opérations de traitement des vertex, y compris la transformation et l’éclairage, dépendent fortement de l’emplacement de la mémoire tampon de vertex dans la mémoire et du type de périphérique de rendu utilisé. Les applications contrôlent l’allocation de mémoire pour les tampons de vertex lors de leur création. Lorsque l’indicateur de mémoire D3DPOOL_SYSTEMMEM est défini, la mémoire tampon de vertex est créée dans la mémoire système. Lorsque l’indicateur de mémoire D3DPOOL_DEFAULT est utilisé, le pilote de périphérique détermine l’emplacement le mieux alloué à la mémoire mémoire du tampon de vertex, souvent appelé mémoire optimale pour le pilote. La mémoire optimale du pilote peut être de la mémoire vidéo locale, de la mémoire vidéo non locale ou de la mémoire système.

La définition de la constante D3DUSAGE_SOFTWAREPROCESSING avec IDirect3DDevice9::CreateVertexBuffer permet le traitement du vertex logiciel sur les données de la mémoire tampon de vertex. Cet indicateur est requis pour le traitement du vertex logiciel en mode mixte. L’indicateur ne peut pas être utilisé pour le mode de traitement du vertex matériel. Les tampons de vertex utilisés avec le traitement du vertex logiciel sont les suivants :

Le raisonnement que vous utilisez pour déterminer l’emplacement de la mémoire (système ou pilote optimal) pour les tampons de vertex est le même que pour les textures. Le traitement des vertex, y compris la transformation et l’éclairage, dans le matériel fonctionne mieux lorsque les mémoires tampons de vertex sont allouées dans une mémoire optimale pour le pilote, tandis que le traitement des vertex logiciels fonctionne mieux avec les tampons de vertex alloués dans la mémoire système. Pour les textures, la rastérisation matérielle fonctionne mieux lorsque les textures sont allouées dans une mémoire optimale pour les pilotes, tandis que la rastérisation logicielle fonctionne mieux avec les textures de mémoire système.

Microsoft Direct3D 9 prend en charge le traitement autonome des sommets, sans rendu de primitive avec la méthode IDirect3DDevice9::P rocessVertices . Ce traitement de vertex autonome est toujours effectué dans un logiciel sur le processeur hôte. Pour cette raison, les tampons de vertex utilisés comme sources définies avec IDirect3DDevice9::SetStreamSource doivent être créés avec l’indicateur D3DUSAGE_SOFTWAREPROCESSING. Les fonctionnalités fournies par IDirect3DDevice9::P rocessVertices sont identiques à celles des méthodes IDirect3DDevice9::D rawPrimitive et IDirect3DDevice9::D rawIndexedPrimitive lors du traitement du vertex logiciel.

Si votre application effectue son propre traitement de vertex et passe les sommets transformés, éclairés et coupés aux méthodes de rendu, l’application peut écrire directement les sommets dans une mémoire tampon de vertex allouée dans la mémoire optimale du pilote. Cette technique empêche toute opération ultérieure de copie redondante. Notez que cette technique ne fonctionnera pas correctement si votre application lit des données à partir d’une mémoire tampon de vertex, car les opérations de lecture effectuées par l’hôte à partir de la mémoire optimale du pilote peuvent être très lentes. Par conséquent, si votre application doit lire ou écrire des données dans la mémoire tampon de manière irrégulière, une mémoire tampon de vertex de mémoire système est un meilleur choix.

Lorsque vous utilisez les fonctionnalités de traitement des vertex Direct3D (en transmettant des sommets non transformés aux méthodes de rendu de la mémoire tampon de vertex), le traitement peut se produire dans du matériel ou des logiciels en fonction du type d’appareil et des indicateurs de création d’appareil. Il est recommandé d’allouer des mémoires tampons de vertex dans les D3DPOOL_DEFAULT de pool pour des performances optimales dans pratiquement tous les cas. Lorsqu’un appareil utilise le traitement du vertex matériel, il existe un certain nombre d’optimisations supplémentaires qui peuvent être effectuées en fonction des indicateurs D3DUSAGE_DYNAMIC et D3DUSAGE_WRITEONLY. Pour plus d’informations sur l’utilisation de ces indicateurs, consultez IDirect3DDevice9::CreateVertexBuffer.

Tampons de vertex