Partager via


Exposition des ressources de diffusion en continu HLSL

Une syntaxe HLSL (High Level Shader Language) spécifique est nécessaire pour prendre en charge les ressources de diffusion en continu dans le modèle de nuanceur 5.

La syntaxe HLSL pour le modèle de nuanceur 5 est autorisée uniquement sur les appareils avec prise en charge des ressources de diffusion en continu. Chaque méthode HLSL pertinente pour les ressources de diffusion en continu dans le tableau suivant accepte un (commentaires) ou deux (pinces et commentaires dans cet ordre) paramètres facultatifs supplémentaires. Par exemple, une méthode Sample est :

Sample(sampler, location [, offset [, clamp [, feedback] ])

Un exemple de méthode Sample est Texture2D.Sample(S,float,int,float,uint).

Les paramètres de décalage, de pince et de retour sont facultatifs. Vous devez spécifier tous les paramètres facultatifs jusqu’à celui dont vous avez besoin, qui est cohérent avec les règles C++ pour les arguments de fonction par défaut. Par exemple, si l’état des commentaires est nécessaire, les paramètres de décalage et de pince doivent être fournis explicitement à Sample, même s’ils peuvent ne pas être logiquement nécessaires.

Le paramètre de pince est une valeur flottante scalaire. La valeur littérale de clamp=0.0f indique que l’opération de pince 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 en mémoire. Vous ne devez pas modifier ou interpréter la valeur du paramètre de commentaires ; mais, le compilateur ne fournit aucune analyse et diagnostics avancés 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 de pince ou de retour est présent, le compilateur émet une variante de l’instruction de base. Par exemple, un exemple de ressource de diffusion en continu génère l’instruction sample_cl_s .

Si ni la pince ni les commentaires ne sont spécifiés, le compilateur émet l’instruction de base, afin qu’il n’y ait aucune modification du comportement actuel.

La valeur de la pince de 0,0f indique qu’aucune pince n’est effectuée ; ainsi, le compilateur de pilotes peut adapter davantage l’instruction au matériel cible. Si le feedback est un registre NULL dans une instruction, celui-ci n’est pas utilisé ; ainsi, le compilateur de pilotes peut adapter davantage l’instruction à l’architecture cible.

Si le compilateur HLSL déduit que la pince est 0.0f et que les commentaires ne sont pas utilisés, le compilateur émet l’instruction de base correspondante (par exemple, sample plutôt que sample_cl_s).

Si un accès aux ressources de diffusion en continu se compose de plusieurs instructions de code d’octet constituantes, par exemple pour les ressources structurées, le compilateur agrège les valeurs de commentaires individuelles via l’opération OR pour produire la valeur de commentaires finale. Par conséquent, vous voyez une valeur de commentaires unique pour un accès aussi complexe.

Il s’agit du tableau récapitulative des méthodes HLSL qui sont modifiées pour prendre en charge les commentaires et/ou les pinces. Tous fonctionnent sur des ressources en mosaïques et non en streaming de toutes les dimensions. Les ressources hors streaming semblent toujours être entièrement mappées.

Objets HLSL Méthodes intrinsèques avec option de commentaires (*) : offre également une option de pince

[RW] Texture2D

[RW] Texture2DArray

TextureCUBE

TextureCUBEArray

Gather

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

Charge

 

Accès de pipeline aux ressources de diffusion en continu