Informazioni di riferimento su Asm Shader

Gli shader guidano la pipeline grafica programmabile.

Informazioni di riferimento sul vertex shader

Le differenze tra vertex shader riepilogano le differenze tra le versioni del vertex shader.

Informazioni di riferimento su Pixel Shader

Le differenze tra pixel shader riepilogano le differenze tra le versioni del pixel shader.

Riferimento al modello shader 4 e 5

Le sezioni Assembly e Assembly model 5 shader model 5 shader descrivono le istruzioni supportate dal modello shader 4 e 5.

Comportamento dei registri costanti negli assembly shader

Esistono due modi per impostare i registri costanti in uno shader di assembly:

  • Dichiarare una costante shader nel codice assembly usando una delle istruzioni def*.
  • Usare uno dei metodi API Set**ShaderConstant*.

Costanti dello shader Direct3D 9

In Direct3D 9 la durata delle costanti definite in un determinato shader è limitata all'esecuzione solo di tale shader (e non è sottoponibile a override). Le costanti definite in Direct3D 9 non hanno effetti collaterali esterni allo shader.

Ecco un esempio che usa Direct3D 9:

Given: 
    Create shader1 which references c4 and defines it with the def instruction

Scenario 1:
    Call Set***Shader shader1
    Call Set***ShaderConstant* to set c4
    Call Draw
    Result: The shader will see the def'd value in c4

    
Given: 
    Scenario 1 has just completed
    Create shader2 (which references c4 but does not use the def instruction
      to define it) 

Scenario 2: 
    Call Set***Shader shader2
    Call Draw
    Result: The shader will see the value last set in c4 by 
     Set***ShaderConstant* in scenario 1. This is because shader 2 
     didn't def c4.

In Direct3D 9, la chiamata a Get^ShaderConstant* recupererà solo i valori costanti impostati tramite Set**ShaderConstant*.

Costanti shader Direct3D 8

Questo comportamento è diverso in Direct3D 8.x.

Given:
    Create shader1 which references c4 and defines it with the def instruction

Scenario 1 (repeated with Direct3D 8):
    Call Set***Shader with shader1
    Call Set***ShaderConstant to set c4
    Call Draw
    Result: The shader will see the value in c4 from Set***ShaderConstant

In Direct3D 8.x Set^ShaderConstant diventa immediatamente effettivo. Si consideri lo scenario indicato di seguito.

Given:
    Create shader1 which references c4 and defines it with the def instruction
    
Scenario 3:
    Call Set***Shader with shader1
    Call Draw
    Result: The shader will see the def'd value in c4

Given:
    Scenario 3 has just completed
    Create shader2 (which references c4 but does not use the def instruction 
      to define it)     
    
Scenario 4 :    
    Call Set***Shader with shader2
    Call Draw
    Result: The shader will see the def'd value in c4 (set by def in shader 1)

Il risultato indesiderato è che l'ordine in cui vengono impostati gli shader potrebbe influire sul comportamento osservato dei singoli shader.

Requisiti del modello di driver shader

Le interfacce Direct3D 9 sono limitate ai driver DDI (Device Driver Interface) di livello 7 e superiore. Per controllare il livello DDI, eseguire lo strumento di diagnostica DirectX ed esaminare il file di testo salvato.

Per riferimento, le interfacce Direct3D 8 funzionano solo su driver DDI di livello DirectX 6 e versioni successive.

Formato binario shader

Il layout bit per bit del flusso di istruzioni dello shader è definito in D3d9types.h. Per progettare un compilatore shader personalizzato o strumenti di costruzione e si vogliono altre informazioni sul flusso di token dello shader, fare riferimento a Direct3D 9 Driver Development Kit (DDK).

Linguaggio shader simile a C

Vedere Riferimenti HLSL per l'esperienza di un linguaggio shader simile a C.

Riferimento per HLSL