Exposition aux ressources en mosaïques HLSL
Une nouvelle syntaxe HLSL (High Level Shader Language) de Microsoft est requise pour prendre en charge les ressources en mosaïques dans le modèle de nuanceur 5.
La nouvelle syntaxe HLSL est autorisée uniquement sur les appareils avec prise en charge des ressources en mosaïques. Chaque méthode HLSL pertinente pour les ressources en mosaïques dans le tableau suivant accepte un (commentaires) ou deux paramètres facultatifs supplémentaires (pince et commentaires dans cet ordre). Par exemple, une méthode Sample est :
Sample(sampler, location [, offset [, clamp [, feedback] ])
Texture2D.Sample(S,float,int,float,uint) est un exemple de méthode Sample.
Les paramètres offset, clamp et feedback sont facultatifs. Vous devez spécifier tous les paramètres facultatifs jusqu’à ceux dont vous avez besoin, ce qui est cohérent avec les règles C++ pour les arguments de fonction par défaut. Par exemple, si le status de commentaires est nécessaire, les paramètres de décalage et de pince doivent être fournis explicitement à Sample, même s’ils ne sont pas logiquement nécessaires.
Le paramètre clamp est une valeur float scalaire. La valeur littérale clamp=0.0f indique que l’opération de serrage n’est pas effectuée.
Le paramètre de commentaires est une variable uint que vous pouvez fournir à la fonction checkAccessFullyMapped intrinsèque d’interrogation d’accès à la mémoire. Vous ne devez pas modifier ou interpréter la valeur du paramètre de commentaires ; mais, le compilateur ne fournit aucune analyse avancée et diagnostics pour détecter si vous avez modifié la valeur.
Voici la syntaxe de CheckAccessFullyMapped :
bool CheckAccessFullyMapped(in uint FeedbackVar);
CheckAccessFullyMapped interprète la valeur de FeedbackVar et retourne true si toutes les données consultées ont été mappées dans la ressource ; sinon, CheckAccessFullyMapped retourne false.
Si le paramètre clamp ou feedback est présent, le compilateur émet une variante de l’instruction de base. Par exemple, l’exemple d’une ressource en mosaïque génère l’instruction sample_cl_s
. Si ni pince ni commentaires n’est spécifié, le compilateur émet l’instruction de base, afin qu’il n’y ait aucune modification du comportement actuel. La valeur de serrage de 0,0f indique qu’aucune pince n’est effectuée ; par conséquent, le compilateur de pilotes peut adapter davantage l’instruction au matériel cible. Si les commentaires sont un enregistrement NULL dans une instruction, le commentaire n’est pas utilisé ; par conséquent, le compilateur de pilotes peut adapter davantage l’instruction à l’architecture cible.
Si le compilateur HLSL déduit que clamp est 0.0f et que les commentaires sont inutilisés, le compilateur émet l’instruction de base correspondante (par exemple, sample
au lieu de sample_cl_s
).
Si un accès à une ressource en mosaïque se compose de plusieurs instructions de code d’octet constituant, par exemple, pour les ressources structurées, le compilateur agrège des valeurs de commentaires individuelles via l’opération OR pour produire la valeur de commentaires finale. Par conséquent, vous voyez une seule valeur de commentaires pour un accès aussi complexe.
Il s’agit du tableau récapitulatif des méthodes HLSL qui sont modifiées pour prendre en charge les commentaires et/ou les pinces. Tous ces éléments fonctionnent sur des ressources en mosaïques et non en mosaïques de toutes les dimensions. Les ressources non mosaïques semblent toujours être entièrement mappées.
Objets HLSL | Méthodes intrinsèques avec option de commentaires (*) - a également l’option clamp |
---|---|
[RW] Texture2D [RW] Texture2DArray TextureCUBE TextureCUBEArray |
Recueillir CollectRed CollectGreen CollectBlue CollectAlpha CollectCmp CollectCmpRed CollectCmpGreen CollectCmpBlue CollectCmpAlpha |
[RW] Texture1D [RW] Texture1DArray [RW] Texture2D [RW] Texture2DArray [RW] Texture3D TextureCUBE TextureCUBEArray |
Échantillon* SampleBias* SampleCmp* SampleCmpLevelZero SampleGrad* SampleLevel |
[RW] Texture1D [RW] Texture1DArray [RW] Texture2D Texture2DMS [RW] Texture2DArray Texture2DArrayMS [RW] Texture3D [RW] Tampon [RW] ByteAddressBuffer [RW] StructuredBuffer |
Load |