Accès aux ressources
Il existe plusieurs façons d’accéder aux ressources. Quoi qu’il en soit, Direct3D garantit le retour de zéro pour toute ressource accessible hors limites.
Accéder par décalage d’octets
Deux nouveaux types de mémoire tampon sont accessibles à l’aide d’un décalage d’octets :
- ByteAddressBuffer est une mémoire tampon en lecture seule.
- RWByteAddressBuffer est une mémoire tampon de lecture ou d’écriture.
Accès par index
Les types de ressources peuvent utiliser un index pour référencer un emplacement spécifique dans la ressource. Examinez cet exemple :
uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];
Cet exemple montre comment affecter les 4 valeurs float stockées au niveau du texel situé à la position pos dans la ressource de texture 2D myTexture à la variable myVar .
Notes
La valeur par défaut pour accéder à une texture de cette façon est le niveau mipmap zéro (le niveau le plus détaillé).
Notes
La ligne « float4 myVar = myTexture[pos]; » équivaut à « float4 myVar = myTexture.Load(uint3(pos,0)); ». L’accès par index est une nouvelle amélioration de la syntaxe HLSL.
Notes
Le compilateur de la version de juin 2010 du Kit de développement logiciel (SDK) DirectX et ultérieur vous permet d’indexer tous les types de ressources à l’exception des mémoires tampons d’adresses d’octets.
Notes
Le compilateur de juin 2010 et les versions ultérieures vous permettent de déclarer des variables de ressources locales. Vous pouvez affecter des ressources définies globalement (comme myTexture) à ces variables et les utiliser de la même façon que leurs équivalents globaux.
Access by Mips, méthode
Les objets texture ont une méthode mips (par exemple, Texture2D.mips), que vous pouvez utiliser pour spécifier le niveau mipmap. Cet exemple lit la couleur stockée à (7,16) au niveau mipmap 2 dans une texture 2D :
uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];
Il s’agit d’une amélioration du compilateur de juin 2010 et des versions ultérieures. L’expression « myTexture.mips[2][uint2(x,y)] » équivaut à « myTexture.Load(uint3(x,y,2)) ».
Rubriques connexes