Referenz zum Asm-Shader

Shader steuern die programmierbare Grafikpipeline.

Vertexshaderreferenz

Vertex-Shaderunterschiede fasst die Unterschiede zwischen Vertexshaderversionen zusammen.

Pixelshaderreferenz

Pixelshaderunterschiede fasst die Unterschiede zwischen Pixelshaderversionen zusammen.

Referenz zum Shadermodell 4 und 5

In den Abschnitten Assembly des Shadermodells 4 und Shadermodell 5 werden die Anweisungen beschrieben, die das Shadermodell 4 und 5 unterstützt.

Verhalten von Konstantenregistern in Assembly-Shadern

Es gibt zwei Möglichkeiten zum Festlegen von Konstantenregistern in einem Assemblyshader:

  • Deklarieren Sie eine Shaderkonstante im Assemblycode mithilfe einer der def*-Anweisungen.
  • Verwenden Sie eine der Set***ShaderConstant*-API-Methoden.

Direct3D 9-Shaderkonstanten

In Direct3D 9 ist die Lebensdauer definierter Konstanten in einem bestimmten Shader nur auf die Ausführung dieses Shaders beschränkt (und ist nicht überschreibbar). Definierte Konstanten in Direct3D 9 haben keine Nebenwirkungen außerhalb des Shaders.

Hier sehen Sie ein Beispiel für die Verwendung von 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 werden durch Aufrufen von Get***ShaderConstant* nur konstante Werte abgerufen, die über Set***ShaderConstant* festgelegt wurden.

Direct3D 8-Shaderkonstanten

Dieses Verhalten unterscheidet sich 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 wird Set***ShaderConstant sofort wirksam. Betrachten Sie folgendes Szenario:

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)

Das unerwünschte Ergebnis ist, dass die Reihenfolge, in der die Shader festgelegt werden, das beobachtete Verhalten einzelner Shader beeinflussen kann.

Anforderungen an das Shadertreibermodell

Direct3D 9-Schnittstellen sind auf DDI-Treiber (Device Driver Interface) beschränkt, die DirectX 7-Level und höher aufweisen. Um die DDI-Ebene zu überprüfen, führen Sie das DirectX-Diagnosetool aus , und untersuchen Sie die gespeicherte Textdatei.

Zur Referenz: Direct3D 8-Schnittstellen funktionieren nur auf DDI-Treibern, die DirectX 6-Level und höher aufweisen.

Shader-Binärformat

Das bitweise Layout des Shader-Anweisungsdatenstroms ist in D3d9types.h definiert. Wenn Sie Einen eigenen Shadercompiler oder -konstruktionstools entwerfen möchten und weitere Informationen zum Shadertokenstream benötigen, lesen Sie das Direct3D 9 Driver Development Kit (DDK).

C-like Shader Language

Informationen zu einer C-ähnlichen Shadersprache finden Sie unter HLSL-Referenz .

Referenz für HLSL