Condividi tramite


registri ps_1_1__ps_1_2__ps_1_3__ps_1_4

I pixel shader dipendono dai registri per ottenere i dati dei vertici, per restituire i dati dei pixel, per contenere i risultati temporanei durante i calcoli e per identificare le fasi di campionamento delle trame. Esistono diversi tipi di registri, ognuno con una funzionalità univoca. Questa sezione contiene informazioni di riferimento per i registri di input e output implementati dalla versione del pixel shader 1_X.

I registri contengono i dati per l'uso da parte del pixel shader. I registri sono descritti in modo completo nelle sezioni seguenti.

  • I tipi di registro descrivono i quattro tipi di registri disponibili e i relativi scopi.
  • Per informazioni dettagliate sull'uso di più registri in un'unica istruzione, vedere Limiti porte.
  • Read only Read Write descrive quali registri possono essere utilizzati per la lettura, la scrittura o entrambi.
  • Intervallo dettaglia l'intervallo dei dati del componente.

Registra tipi

Nome Digitare Versione 1_1 Versione 1_2 Versione 1_3 Versione 1_4
c# Registro costante 8 8 8 8
r# Registro temporaneo 2 2 2 6
t# Registro trame 4 4 4 6
v# Registro colori 2 2 2 2 nella fase 2

 

  • I registri costanti contengono dati costanti. I dati possono essere caricati in un registro costante usando SetPixelShaderConstantF oppure possono essere definiti usando def - ps. I registri costanti non sono utilizzabili dalle istruzioni per l'indirizzo della trama. L'unica eccezione è la texm3x3spec - ps istruzione, che usa un registro costante per fornire un vettore di raggio oculare.

  • I registri temporanei vengono usati per archiviare i risultati intermedi. r0 funge anche da output del pixel shader. Il valore in r0 alla fine dello shader è il colore pixel per lo shader.

    La convalida dello shader avrà esito negativo CreatePixelShader in qualsiasi shader che tenta di leggere da un registro temporaneo che non è stato scritto da un'istruzione precedente. D3DXAssembleShader avrà esito negativo in modo analogo, presupponendo che la convalida sia abilitata (non usare D3DXSHADER_SKIPVALIDATION).

  • Registri delle trame

    Per pixel shader versione da 1_1 a 1_3, i registri delle trame contengono dati di trama o coordinate di trama. I dati delle trame vengono caricati in un registro di trama quando viene campionata una trama. Il campionamento delle trame usa le coordinate delle trame per cercare, o campione, un valore di colore in corrispondenza delle coordinate specificate (u,v,w,q) tenendo conto degli attributi dello stato della fase della trama. I dati delle coordinate della trama vengono interpolati dai dati delle coordinate della trama dei vertici ed è associato a una fase di trama specifica. Esiste un'associazione uno-a-uno predefinita tra il numero della fase trama e l'ordine di dichiarazione della coordinata della trama. Per impostazione predefinita, il primo set di coordinate di trama definite nel formato vertice è associato alla fase di trama 0.

    Per queste versioni di pixel shader, i registri delle trame si comportano esattamente come i registri temporanei quando vengono usati da istruzioni aritmetiche.

    Per pixel shader versione 1_4, i registri delle trame (t#) contengono dati di coordinate della trama di sola lettura. Ciò significa che il set di coordinate della trama e il numero della fase della trama sono indipendenti l'uno dall'altro. Il numero di fase della trama (da cui campionare una trama) è determinato dal numero di registro di destinazione (da r0 a r5). Per l'istruzione texld, il set di coordinate della trama è determinato dal registro di origine (da t0 a t5), in modo che il set di coordinate della trama possa essere mappato a qualsiasi fase della trama. Inoltre, il registro di origine (specificando le coordinate della trama) per texld può anche essere un registro temporaneo (r#), nel qual caso il contenuto del registro temporaneo viene usato come coordinate di trama.

  • I registri colori contengono valori di colore per pixel. I valori vengono ottenuti dall'iterazione per pixel dei valori di colore diffusi e speculari nei dati dei vertici. Per i pixel shader versione 1_4 shader, i registri colori sono disponibili solo durante la seconda fase.

    Se la modalità shade è impostata su D3DSHADE_FLAT, l'iterazione di entrambi i colori dei vertici (diffusa e speculare) è disabilitata. Indipendentemente dalla modalità ombreggiatura, la nebbia verrà comunque iterata dalla pipeline se la nebbia pixel è abilitata. Tenere presente che la nebbia viene applicata più avanti nella pipeline rispetto al pixelhader.

    È comune caricare il registro v0 con i dati di colore diffusi dei vertici. È anche comune caricare il registro v1 con i dati dei colori speculari dei vertici.

    I valori dei dati dei colori di input sono bloccati (saturi) all'intervallo compreso tra 0 e 1 perché si tratta dell'intervallo di input valido per i registri di colori nel pixel shader.

    I pixel shader hanno accesso in sola lettura ai registri colori. Il contenuto di questi registri è costituito da valori iterati, ma l'iterazione può essere eseguita con precisione molto inferiore rispetto alle coordinate della trama.

Limite di porte di lettura

Il limite di porte di lettura specifica il numero di registri diversi di ogni tipo di registro che può essere usato come registro di origine in una singola istruzione.

Nome Digitare Versione 1_1 Versione 1_2 Versione 1_3 Versione 1_4
c# Registro costante 2 2 2 2
r# Registro temporaneo 2 2 2 3
t# Registro trame 2 3 3 1
v# Registro colori 2 2 2 2 nella fase 2

 

Ad esempio, i registri colori per quasi tutte le versioni hanno un limite di porta di lettura pari a due. Ciò significa che una singola istruzione può usare un massimo di due registri di colori diversi (v0 e v1 per esempio) come registri di origine. Questo esempio mostra due registri colori usati nella stessa istruzione:

mad r0, v1, c2, v0

Sola lettura, lettura/scrittura

I tipi di registro vengono identificati in base alla funzionalità di sola lettura (RO) o alla funzionalità di lettura/scrittura (RW) nella tabella seguente. I registri di sola lettura possono essere usati solo come registri di origine in un'istruzione; non possono mai essere usati come registro di destinazione.

Nome Digitare Versione 1_1 Versione 1_2 Versione 1_3 Versione 1_4
Nome Digitare 1_1 1_2 1_3 1_4
c# Registro costante RO RO RO RO
r# Registro temporaneo RW RW RW RW
t# Registro trame RW RW RW Vedere la nota seguente
v# Registro colori RO RO RO RO

 

I registri che supportano RW possono essere usati per archiviare i risultati intermedi. Sono inclusi i registri temporanei e i registri delle trame per alcune delle versioni dello shader.

Nota

  • Per pixel shader versione 1_4, i registri delle trame sono RO per le istruzioni di indirizzamento delle trame e i registri delle trame non possono essere letti né scritti in da istruzioni aritmetiche. Inoltre, poiché i registri delle trame sono diventati registri di coordinate delle trame, l'accesso ro non è una regressione delle funzionalità precedenti.

 

Gamma

L'intervallo è il valore massimo e minimo dei dati del registro. Gli intervalli variano in base al tipo di registro. Gli intervalli per alcuni registri possono essere sottoposti a query dai limiti di dispositivo usando GetDeviceCaps.

Nome Digitare Gamma Versioni
c# Registro costante da -1 a +1 Tutte le versioni
r# Registro temporaneo - PixelShader1xMaxValue su + PixelShader1xMaxValue Tutte le versioni
t# Registro trame - MaxTextureRepeat to + MaxTextureRepeat Tutte le versioni
v# Registro colori da 0 a 1 Tutte le versioni

 

L'hardware del pixel shader iniziale rappresenta i dati nei registri usando un numero a virgola fissa. Questo limita la precisione a un massimo di otto bit per la parte frazionaria di un numero. Tenere presente questo aspetto durante la progettazione di uno shader.

Per pixel shader versione da 1_1 a 1_3, MaxTextureRepeat deve essere almeno uno. Per 1_4, MaxTextureRepeat deve essere almeno otto.

Per altre informazioni su PixelShader1xMaxValue, vedere D3DCAPS9.

registri