ps_1_1__ps_1_2__ps_1_3__ps_1_4 registri

I pixel shader dipendono dai registri per ottenere i dati dei vertici, per restituire i dati dei pixel, per contenere 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.

Registra i dati per l'uso da parte del pixel shader. I registri sono completamente descritti nelle sezioni seguenti.

  • I tipi di registrazione descrivono i quattro tipi di registri disponibili e i relativi scopi.
  • Leggi Limite porta dettagli sulle restrizioni sull'uso di più registri in un'unica istruzione.
  • Sola lettura scrittura descrive quali registri possono essere usati per la lettura, la scrittura o entrambi.
  • Intervallo dettaglia l'intervallo dei dati del componente.

Registrare i tipi

Nome Tipo 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 trama 4 4 4 6
Presso # 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 dell'indirizzo della trama. L'unica eccezione è l'istruzione texm3x3spec- ps , 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 pixel shader. Il valore in r0 alla fine del shader è il colore pixel per lo shader.

    La convalida shader avrà esito negativo su 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 trama

    Per pixel shader versione 1_1 a 1_3, i registri delle trame contengono dati di trama o coordinate della trama. I dati della trama vengono caricati in un registro trama quando viene campionata una trama. Il campionamento della trama usa le coordinate della trama per cercare, o campione, un valore di colore alle coordinate specificate (u,v,w,q) tenendo conto degli attributi dello stato della fase di trama. I dati delle coordinate della trama vengono interpolati dai dati delle coordinate della trama del vertice e sono associati a una fase di trama specifica. Esiste un'associazione uno-a-uno predefinita tra il numero di fase trama e l'ordine di dichiarazione della coordinata trama. Per impostazione predefinita, il primo set di coordinate della trama definite nel formato del 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 usati dalle istruzioni aritmetiche.

    Per pixel shader versione 1_4, i registri delle trame (t#) contengono dati sulle coordinate della trama di sola lettura. Ciò significa che il set di coordinate della trama e il numero di fase della trama sono indipendenti tra loro. Il numero di fase della trama (da cui campione una trama) è determinato dal numero di registro di destinazione (r0 a r5). Per l'istruzione texld, il set di coordinate della trama è determinato dal registro di origine (t0 a t5), in modo che il set di coordinate della trama possa essere mappato a qualsiasi fase di trama. Inoltre, il registro di origine (specificando coordinate 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 del vertice. Per pixel shader versione 1_4 shader, i registri dei colori sono disponibili solo durante la seconda fase.

    Se la modalità shade è impostata su D3DSHADE_FLAT, l'iterazione di entrambi i colori del vertice (diffusa e speculare) è disabilitata. Indipendentemente dalla modalità ombreggiatura, la nebbia verrà comunque iterazione 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 dei colori diffusi del vertice. È anche comune caricare il registro v1 con i dati del colore speculare del vertice.

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

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

Limite porta di lettura

Il limite di porta 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 Tipo 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 trama 2 3 3 1
Presso # 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, ad esempio) come registri di origine. Questo esempio mostra due registri di colore usati nella stessa istruzione:

mad r0, v1, c2, v0

Sola 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 utilizzati come registro di destinazione.

Nome Tipo Versione 1_1 Versione 1_2 Versione 1_3 Versione 1_4
Nome Tipo 1_1 1_2 1_3 1_4
c# Registro costante RO RO RO RO
R # Registro temporaneo LS LS LS LS
T # Registro trame LS LS LS Vedere la nota seguente
Presso # 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, la presenza di accesso ro non è una regressione delle funzionalità precedenti.

 

Intervallo

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 del dispositivo usando GetDeviceCaps.

Nome Tipo Intervallo Versioni
c# Registro costante da -1 a +1 Tutte le versioni
R # Registro temporaneo - PixelShader1xMaxValue su + PixelShader1xMaxValue Tutte le versioni
T # Registro trame - MaxTextureRepeat a + MaxTextureRepeat Tutte le versioni
Presso # 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 circa 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