Condividi tramite


Esposizione delle risorse di streaming HLSL

Per supportare le risorse di streaming nel Modello Shader 5 è necessaria una sintassi HLSL (Microsoft High Level Shader Language) specifica.

La sintassi HLSL per il Modello Shader 5 è consentita solo nei dispositivi con supporto delle risorse di streaming. Ogni metodo HLSL pertinente per le risorse di streaming nella tabella seguente accetta uno (feedback) o due (blocco e feedback in questo ordine) parametri facoltativi aggiuntivi. Ad esempio, un metodo Campione è:

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

Un esempio di metodo Campione è Texture2D.Sample(S,float,int,float,uint).

I parametri offset, blocco e feedback sono facoltativi. È necessario specificare tutti i parametri facoltativi fino a quello necessario, che è coerente con le regole C++ per gli argomenti di funzione predefiniti. Ad esempio, se lo stato del feedback è necessario, i parametri offset e blocco devono essere forniti in modo esplicito a Campione, anche se potrebbero non essere necessari logicamente.

Il parametro blocco è un valore di float scalare. Il valore letterale di blocco=0.0f indica che l'operazione di blocco non viene eseguita.

Il parametro feedback è una variabile uint che è possibile fornire alla funzione intrinseca CheckAccessFullyMapped per l'esecuzione di query di accesso alla memoria. Non è necessario modificare o interpretare il valore del parametro di feedback; ma il compilatore non fornisce analisi e diagnostica avanzate per rilevare se il valore è stato modificato.

Ecco la sintassi di CheckAccessFullyMapped:

bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped interpreta il valore di FeedbackVar e restituisce Vero se tutti i dati a cui si accede è stato eseguito il mapping nella risorsa. In caso contrario, CheckAccessFullyMapped restituisce Falso.

Se il parametro blocco o feedback è presente, il compilatore genera una variante dell'istruzione di base. Ad esempio, l'esempio di una risorsa di streaming genera l'istruzione sample_cl_s.

Se non viene specificato alcun blocco né feedback, il compilatore genera l'istruzione di base, in modo che non vi siano modifiche rispetto al comportamento corrente.

Il valore del blocco 0,0f indica che non viene eseguita alcuna morsa; pertanto, il compilatore di driver può personalizzare ulteriormente l'istruzione per l'hardware di destinazione. Se il feedback è un registro NULL in un'istruzione, il feedback non viene usato; pertanto, il compilatore di driver può personalizzare ulteriormente l'istruzione per l'architettura di destinazione.

Se il compilatore HLSL deduce che il blocco è 0,0f e il feedback non è usato, il compilatore genera l'istruzione di base corrispondente, ad esempio sample anziché sample_cl_s.

Se un accesso alle risorse di streaming è costituito da diverse istruzioni di codice di byte costitutive, ad esempio per le risorse strutturate, il compilatore aggrega i singoli valori di feedback tramite l'operazione OR per produrre il valore di feedback finale. Di conseguenza, viene visualizzato un singolo valore di feedback per un accesso così complesso.

Questa è la tabella di riepilogo dei metodi HLSL modificati per supportare il feedback e/o il blocco. Tutti questi elementi funzionano sulle risorse affiancate e non in streaming di tutte le dimensioni. Le risorse non di streaming sembrano essere sempre mappate completamente.

Oggetti HLSL Metodi intrinseci con opzione di feedback (*) - ha anche l'opzione di blocco

[RW]Texture2D

[RW]Texture2DArray

TextureCUBE

TextureCUBEArray

Gather

GatherRed

GatherGreen

GatherBlue

GatherAlpha

GatherCmp

GatherCmpRed

GatherCmpGreen

GatherCmpBlue

GatherCmpAlpha

[RW]Texture1D

[RW]Texture1DArray

[RW]Texture2D

[RW]Texture2DArray

[RW]Texture3D

TextureCUBE

TextureCUBEArray

Campione*

SampleBias*

SampleCmp*

SampleCmpLevelZero

SampleGrad*

SampleLevel

[RW]Texture1D

[RW]Texture1DArray

[RW]Texture2D

Texture2DMS

[RW]Texture2DArray

Texture2DArrayMS

[RW]Texture3D

[RW]Buffer

[RW]ByteAddressBuffer

[RW]StructuredBuffer

Load

 

Accesso della pipeline alle risorse di streaming