Textures de vertex dans vs_3_0 (DirectX HLSL)

Le modèle de nuanceur de vertex 3.0 prend en charge la recherche de texture dans le nuanceur de vertex à l’aide de l’instruction texldl - vs texture load. Le moteur de vertex contient quatre étapes d’échantillonneur de texture, nommées D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 et D3DVERTEXTEXTURESAMPLER3. Ceux-ci sont distincts de l’échantillonneur de carte de déplacement et des échantillonneurs de texture dans le moteur de pixels.

Pour échantillonner des textures définies à ces quatre étapes, vous pouvez utiliser le moteur de vertex et programmer les étapes avec la méthode CheckDeviceFormat . Définissez des textures à ces étapes à l’aide de SetTexture, avec l’index de phase D3DVERTEXTEXTURESAMPLER0 à D3DVERTEXTEXTURESAMPLER3. Un nouveau registre a été introduit dans le nuanceur de vertex, le registre de l’échantillonneur (comme dans ps_2_0), qui représente l’échantillonneur de texture de vertex. Ce registre doit être défini dans le nuanceur avant de l’utiliser.

Une application peut interroger si un format est pris en charge en tant que texture de vertex en appelant CheckDeviceFormat avec D3DUSAGE_QUERY_VERTEXTEXTURE.

Notes

Il s’agit d’un indicateur de requête qui n’est pas accepté dans une fonction Createxxx. Une texture de vertex créée dans le pool par défaut peut être définie en tant que texture de pixels et vice versa. Toutefois, pour utiliser le traitement du vertex logiciel, la texture de vertex doit être créée dans le pool de travail (qu’il s’agisse d’un appareil en mode mixte ou d’un dispositif de traitement de vertex logiciels).

 

La fonctionnalité est identique aux textures de pixels, à l’exception des éléments suivants :

  • Le filtrage de textures anisotropes n’est pas pris en charge. Par conséquent, D3DSAMP_MAXANISOTROPY est ignoré et D3DTEXF_ANISOTROPIC ne peut pas être défini pour la loupe ou la minimisation pour ces phases.
  • Les informations sur le taux de modification n’étant pas disponibles, l’application doit calculer le niveau de détail et fournir ces informations en tant que paramètre pour texldl - vs.

Les restrictions sont les suivantes :

  • Comme dans les nuanceurs de pixels, si les textures multiéléments sont prises en charge, D3DSAMP_ELEMENTINDEX est utilisé pour déterminer l’élément à partir duquel échantillonner.
  • L’état D3DSAMP_DMAPOFFSET est ignoré pour ces étapes.
  • Utilisez CheckDeviceFormat avec D3DUSAGE_QUERY_VERTEXTEXTURE » pour interroger une texture et voir si elle peut être utilisée comme texture de vertex.
  • VertexTextureFilterCaps indique le type de filtres autorisés dans les échantillonneurs de texture de vertex. D3DPTFILTERCAPS_MINFANISOTROPIC et D3DPTFILTERCAPS_MAGFANISOTROPIC ne sont pas autorisés.

Registres de l’étape d’échantillonnage

Un registre d’étape d’échantillonnage identifie une unité d’échantillonnage qui peut être utilisée dans les instructions de chargement de texture. Une unité d’échantillonnage correspond à l’étape d’échantillonnage de texture, encapsulant l’état spécifique à l’échantillonnage fourni dans SetSamplerState.

Chaque échantillonneur identifie de manière unique une surface de texture unique qui est définie sur l’échantillonneur correspondant à l’aide de SetTexture. Toutefois, la même surface de texture peut être définie sur plusieurs échantillonneurs.

Au moment du dessin, une texture ne peut pas être définie simultanément en tant que cible de rendu et texture à un stade.

Étant donné que vs_3_0 prend en charge quatre échantillonneurs, jusqu’à quatre surfaces de texture peuvent être lues à partir d’une seule passe de nuanceur. Un registre d’échantillonneur peut apparaître uniquement en tant qu’argument dans l’instruction de charge de texture : texldl - vs.

Dans vs_3_0, si vous utilisez un échantillonneur, il doit être déclaré au début du programme de nuanceur, à l’aide de la dcl_samplerType (sm3 - vs asm) (comme dans ps_2_0).

Traitement logiciel

Cette fonctionnalité sera prise en charge dans le traitement du vertex logiciel. Les types de filtres spécifiques pris en charge peuvent être vérifiés en appelant GetDeviceCaps et en vérifiant VertexTextureFilterCaps. Tous les formats de texture publiés seront pris en charge en tant que textures de vertex dans le traitement du vertex logiciel.

Les applications peuvent case activée si un format de texture particulier est pris en charge dans le mode de traitement du vertex logiciel en appelant CheckDeviceFormat et en fournissant (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) en tant qu’utilisation. Tous les formats sont pris en charge pour le traitement du vertex logiciel. Le pool de travail est requis pour le traitement du vertex logiciel.

Modifications de l’API

   
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
    

#define D3DVERTEXTEXTURESAMPLER  (0x00100000L)

// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;

Vertex Pipeline