Informations de référence sur le nuanceur Asm

Les nuanceurs pilotent le pipeline graphique programmable.

Informations de référence sur le nuanceur de vertex

Les différences de nuanceur de vertex résument les différences entre les versions du nuanceur de vertex.

Informations de référence sur le nuanceur de pixels

Les différences du nuanceur de pixels résument les différences entre les versions du nuanceur de pixels.

Référence des modèles de nuanceur 4 et 5

Les sections Assembly du nuanceur Modèle 4 et Shader Model 5 Assembly décrivent les instructions prises en charge par les modèles de nuanceur 4 et 5.

Comportement des registres de constantes dans les nuanceurs d’assembly

Il existe deux façons de définir des registres de constantes dans un nuanceur d’assembly :

  • Déclarez une constante de nuanceur dans le code d’assembly à l’aide de l’une des instructions def*.
  • Utilisez l’une des méthodes d’API Set***ShaderConstant*.

Constantes de nuanceur Direct3D 9

Dans Direct3D 9, la durée de vie des constantes définies dans un nuanceur donné est limitée à l’exécution de ce nuanceur uniquement (et n’est pas substituable). Les constantes définies dans Direct3D 9 n’ont aucun effet secondaire en dehors du nuanceur.

Voici un exemple utilisant 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.

Dans Direct3D 9, l’appel de Get***ShaderConstant* récupère uniquement les valeurs constantes définies via Set***ShaderConstant*.

Constantes de nuanceur Direct3D 8

Ce comportement est différent dans 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

Dans Direct3D 8.x Set**ShaderConstant prend effet immédiatement. Examinez le scénario suivant :

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)

Le résultat indésirable est que l’ordre dans lequel les nuanceurs sont définis peut affecter le comportement observé des nuanceurs individuels.

Configuration requise du modèle de pilote de nuanceur

Les interfaces Direct3D 9 sont limitées aux pilotes DDI (Device Driver Interface) qui sont de niveau DirectX 7 et supérieur. Pour case activée le niveau DDI, exécutez l’outil de diagnostic DirectX et examinez le fichier texte enregistré.

Pour référence, les interfaces Direct3D 8 fonctionnent uniquement sur les pilotes DDI de niveau DirectX 6 et supérieur.

Format binaire du nuanceur

La disposition au niveau du bit du flux d’instructions du nuanceur est définie dans D3d9types.h. Si vous souhaitez concevoir votre propre compilateur ou outils de construction de nuanceur et que vous souhaitez obtenir plus d’informations sur le flux de jetons de nuanceur, reportez-vous au Kit de développement de pilotes Direct3D 9 (DDK).

Langage de nuanceur de type C

Consultez Référence HLSL pour découvrir un langage de nuanceur C.

Référence pour HLSL