sample (sm4 - asm)

Samples data from the specified Element/texture using the specified address and the filtering mode identified by the given sampler.

sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler
Articolo Descrizione
dest
[in] Indirizzo del risultato dell'operazione.
srcAddress
[in] Set di coordinate di trama. Per altre informazioni, vedere la sezione Osservazioni.
srcResource
[in] Registro delle trame. Per altre informazioni, vedere la sezione Osservazioni.
srcSampler
[in] Registro sampler. Per altre informazioni, vedere la sezione Osservazioni.

Osservazioni:

I dati di origine possono provenire da qualsiasi tipo di risorsa, ad eccezione dei buffer.

srcAddress fornisce il set di coordinate di trama necessarie per eseguire il campione, come valori a virgola mobile che fanno riferimento allo spazio normalizzato nella trama. Le modalità di wrapping degli indirizzi (wrap/mirror/clamp/border e così via) vengono applicate per le coordinate di trama all'esterno dell'intervallo [0...1], ricavate dallo stato del campionatore (s#) e applicate dopo l'applicazione di qualsiasi offset di indirizzo alle coordinate della trama.

srcResource è un registro delle trame (t#). Si tratta semplicemente di un segnaposto per una trama, incluso il tipo di dati restituito della risorsa campionata. Tutte queste informazioni sono dichiarate nel preambolo shader. La risorsa effettiva da campionare è associata esternamente allo shader in corrispondenza dello slot # (per t#).

srcSampler è un registro sampler (s). Si tratta semplicemente di un segnaposto per una raccolta di controlli di filtro, ad esempio i controlli di ritorno a capo automatico, lineare, mipmapping e wrapping degli indirizzi.

Il set di informazioni necessarie per l'hardware per eseguire il campionamento viene suddiviso in due parti ortogonali. Innanzitutto, il registro trame fornisce informazioni sul tipo di dati di origine, tra cui, ad esempio, informazioni sul fatto che la trama contenga dati SRGB. Fa anche riferimento alla memoria effettiva campionata. In secondo luogo, il registro sampler definisce la modalità di filtro da applicare.

Risorse della matrice

Per Le matrici Texture1D, il componente srcAddress g (POS-swizzle) seleziona la sezione matrice da cui recuperare. Questo valore viene sempre considerato come un valore float ridimensionato, anziché lo spazio normalizzato per le coordinate di trama standard e viene applicato un valore pari da arrotondamento al valore, seguito da un blocco all'intervallo BufferArray disponibile.

Per le matrici Texture2D, il componente srcAddress b (POS-swizzle) seleziona la sezione matrice da recuperare, altrimenti usando la stessa semantica descritta per Le matrici Texture1D .

Offset degli indirizzi

Il suffisso facoltativo [_aoffimmi(u,v,w)] (offset dell'indirizzo per intero immediato) indica che le coordinate della trama per il campione devono essere sfalsati da un set di valori costanti interi dello spazio texel immediato forniti. I valori letterali sono un set di numeri di complemento a 4 bit 2, con intervallo intero [-8,7]. Questo modificatore è definito per tutte le risorse, incluse le matrici Texture1D/2D e Texture3D, ma non è definito per TextureCube.

L'hardware può sfruttare immediatamente le conoscenze che un attraversamento su un footprint di texel su una posizione comune viene eseguito da un set di istruzioni di esempio. Questo può essere trasmesso usando _aoffimmi(u,v,w).

Gli offset vengono aggiunti alle coordinate della trama, nello spazio texel, rispetto a ogni miplevel a cui si accede. Pertanto, anche se le coordinate della trama vengono fornite come valori float normalizzati, l'offset applica un offset di interi di spazio texel.

Gli offset degli indirizzi non vengono applicati lungo l'asse delle matrici Texture1D/2D.

_aoffimmi componenti v,w vengono ignorati per Texture1D.

_aoffimmi componente w viene ignorato per Texture2Ds.

Le modalità di wrapping degli indirizzi (wrap/mirror/clamp/border e così via) dallo stato del campionatore (s#) vengono applicate dopo l'applicazione di qualsiasi offset di indirizzo alle coordinate della trama.

Controllo tipo restituito

Il formato dei dati restituito dall'esempio al registro di destinazione è determinato dal formato di risorsa (DXGI_FORMAT*) associato al parametro srcResource (t#). Ad esempio, se il t# specificato è stato associato a una risorsa con formato DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, l'operazione di campionamento convertirà i texel campionati da gamma 2.0 a 1.0, applica il filtro e il risultato verrà scritto nel registro di destinazione come valori a virgola mobile nell'intervallo [0..1].

I valori restituiti sono 4 vettori (con valori predefiniti specifici del formato per i componenti non presenti nel formato). Lo swizzle in srcResource determina come eseguire lo scorrimento del risultato di 4 componenti restituito dal campione/filtro della trama, dopo il quale .mask su dest determina quali componenti nel dest vengono aggiornati.

Quando l'esempio legge un valore float a 32 bit in un registro a 32 bit, con il campionamento dei punti (nessun filtro), può o meno scaricare valori denormali, ma in caso contrario i numeri non vengono modificati. Se l'incertezza con i valori denormali di campionamento dei punti è un problema per un'applicazione, usare l'istruzione ld , che garantisce che i valori float a 32 bit vengano letti senza modifiche.

Calcolo LOD

Per informazioni dettagliate sul modo in cui i derivati vengono calcolati nel processo di determinazione del LOD per il filtro, vedere deriv_rtx e deriv_rty. L'istruzione di esempio calcola in modo implicito i derivati sulle coordinate della trama usando la stessa definizione usata dalle istruzioni di derivazione shader. Questo non si applica alle istruzioni sample_l o sample_d . Per tali istruzioni, loD o derivati vengono forniti direttamente dall'applicazione.

Per l'istruzione di esempio , le implementazioni possono scegliere di condividere lo stesso calcolo LOD in tutti i 4 pixel in un timbro 2x2 (ma nessuna area più grande) o di eseguire calcoli LOD per pixel.

Dettagli vari

Per Buffer & Texture1D, i componenti srcAddress .gba (POS-swizzle) vengono ignorati. Per le matrici Texture1D, i componenti srcAddress .ba (POS-swizzle) vengono ignorati. Per Texture2Ds, srcAddress .a component (POS-swizzle) viene ignorato.

Il recupero da uno slot di input a cui non è associato alcun valore restituisce 0 per tutti i componenti.

Restrizioni

  • srcResource deve essere un registro t#. srcResource non può essere un ConstantBuffer, che non può essere associato a registri t#.
  • srcSampler deve essere un registro s#.
  • L'indirizzamento relativo su srcResource o srcSampler non è consentito.
  • srcAddress deve essere temp (r#/x#), constantBuffer (cb#), input (v#) register or immediate value(s).
  • dest deve essere un registro temp (r#/x#) o output (o*#).
  • _aoffimmi(u,v,w) non è consentito per TextureCubes.

Questa istruzione si applica alle fasi seguenti dello shader:

Vertex shader Geometry shader Pixel shader
x

Modello di shader minimo

Questa funzione è supportata nei modelli di shader seguenti.

Modello di shader Supportata
Modello shader 5 yes
Modello shader 4.1 yes
Modello shader 4 yes
Modello shader 3 (DirectX HLSL) no
Modello shader 2 (DirectX HLSL) no
Modello shader 1 (DirectX HLSL) no

Assembly del modello shader 4 (DirectX HLSL)