Freigeben über


Asm-Shaderreferenz

Shader steuern die programmierbare Grafikpipeline.

Vertexshaderreferenz

Vertex-Shaderunterschiede fasst die Unterschiede zwischen Vertex-Shaderversionen zusammen.

Pixelshaderreferenz

Pixelshaderunterschiede fasst die Unterschiede zwischen Pixel-Shaderversionen zusammen.

Shadermodell 4- und 5-Referenz

In den Abschnitten Shadermodell 4-Assembly und Shadermodell 5-Assembly werden die Anweisungen beschrieben, die shadermodell 4 und 5 unterstützen.

Verhalten von Konstantenregistern in Assembly-Shadern

Es gibt zwei Möglichkeiten zum Festlegen von Konstantenregistern in einem Assembly-Shader:

  • 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 überschrieben). Definierte Konstanten in Direct3D 9 haben keine Nebenwirkungen außerhalb des Shaders.

Hier ist ein Beispiel mit 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 ruft der Aufruf von Get***ShaderConstant* nur konstanten Werte ab, 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 Set***ShaderConstant wird sofort wirksam. Betrachten Sie dieses 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 könnte.

Anforderungen des Shadertreibermodells

Direct3D 9-Schnittstellen sind auf DDI-Treiber (Device Driver Interface) beschränkt, die DirectX 7-Ebene und höher sind. Führen Sie zum Überprüfen der DDI-Ebene das DirectX-Diagnosetool aus, und überprüfen Sie die gespeicherte Textdatei.

Zur Referenz funktionieren Direct3D 8-Schnittstellen nur für DDI-Treiber, die DirectX 6-Ebene und höher sind.

Shader-Binärformat

Das bitweise Layout des Shader-Anweisungsstreams wird in D3d9types.h definiert. Wenn Sie Ihren 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

Siehe HLSL-Referenz, um eine C-ähnliche Shadersprache zu erleben.

Referenz für HLSL-