Vertextexturen in vs_3_0 (DirectX HLSL)

Das Vertex-Shader 3.0-Modell unterstützt die Textursuche im Vertex-Shader mithilfe der Anweisung texldl - vs texture load. Die Vertex-Engine enthält vier Textur-Samplerphasen mit dem Namen D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 und D3DVERTEXTEXTURESAMPLER3. Diese unterscheiden sich von den Verschiebungskarten-Samplern und Textur-Samplern in der Pixel-Engine.

Zum Beispiel für Texturen, die in diesen vier Phasen festgelegt sind, können Sie die Vertex-Engine verwenden und die Phasen mit der CheckDeviceFormat-Methode programmieren. Legen Sie Texturen in diesen Phasen mit SetTexture mit dem Phasenindex D3DVERTEXTEXTURESAMPLER0 bis D3DVERTEXTEXTURESAMPLER3 fest. Im Vertex-Shader wurde ein neues Register eingeführt, das Samplerregister (wie in ps_2_0), das den Vertextextur-Sampler darstellt. Dieses Register muss vor der Verwendung im Shader definiert werden.

Eine Anwendung kann abfragen, ob ein Format als Vertextextur unterstützt wird, indem CheckDeviceFormat mit D3DUSAGE_QUERY_VERTEXTEXTURE aufgerufen wird.

Hinweis

Dies ist ein Abfrageflag, sodass es in keiner Createxxx-Funktion akzeptiert wird. Eine im Standardpool erstellte Scheitelpunkttextur kann als Pixeltextur festgelegt werden und umgekehrt. Um die Softwarevertexverarbeitung zu verwenden, muss die Vertextextur jedoch im Scratchpool erstellt werden (unabhängig davon, ob es sich um ein Gerät im gemischten Modus oder ein Softwarevertexverarbeitungsgerät handelt).

 

Die Funktionalität ist mit den Pixeltexturen identisch, mit Ausnahme der folgenden:

  • Die Anisotrope Texturfilterung wird nicht unterstützt, daher wird D3DSAMP_MAXANISOTROPY ignoriert und D3DTEXF_ANISOTROPIC kann für diese Phasen nicht für Vergrößerung oder Miniifizierung festgelegt werden.
  • Die Rate der Änderungsinformationen ist nicht verfügbar, daher muss die Anwendung den Detailgrad berechnen und diese Informationen als Parameter für texldl - vs bereitstellen.

Es gelten folgende Beschränkungen:

  • Wenn Multielementtexturen unterstützt werden, wird wie bei Pixel-Shadern D3DSAMP_ELEMENTINDEX verwendet, um herauszufinden, aus welchem Element ein Beispiel verwendet werden soll.
  • Der Zustand D3DSAMP_DMAPOFFSET wird für diese Phasen ignoriert.
  • Verwenden Sie CheckDeviceFormat mit D3DUSAGE_QUERY_VERTEXTEXTURE" , um eine Textur abzufragen, um zu ermitteln, ob sie als Vertextextur verwendet werden kann.
  • VertexTextureFilterCaps gibt an, welche Filter an den Vertextextur-Samplern zulässig sind. D3DPTFILTERCAPS_MINFANISOTROPIC und D3DPTFILTERCAPS_MAGFANISOTROPIC sind nicht zulässig.

Stichprobenstufenregister

Ein Stichprobenstufenregister identifiziert eine Stichprobeneinheit, die in Texturladeanweisungen verwendet werden kann. Eine Samplingeinheit entspricht der Texturstichprobenahmephase, die den stichprobenspezifischen Zustand in SetSamplerState kapselt.

Jeder Sampler identifiziert eindeutig eine einzelne Texturoberfläche, die mithilfe von SetTexture auf den entsprechenden Sampler festgelegt ist. Die gleiche Texturoberfläche kann jedoch auf mehrere Sampler festgelegt werden.

Zur Zeichnungszeit kann eine Textur nicht gleichzeitig als Renderziel und Textur in einer Phase festgelegt werden.

Da vs_3_0 vier Sampler unterstützt, können in einem einzigen Shaderdurchlauf bis zu vier Texturoberflächen gelesen werden. Ein Samplerregister kann nur als Argument in der Texturlade-Anweisung texldl - vs angezeigt werden.

Wenn Sie in vs_3_0 einen Sampler verwenden, muss dieser am Anfang des Shaderprogramms mit dem dcl_samplerType (sm3 - vs. asm) deklariert werden (wie in ps_2_0).

Softwareverarbeitung

Dieses Feature wird bei der Softwarevertexverarbeitung unterstützt. Die unterstützten spezifischen Filtertypen können durch Aufrufen von GetDeviceCaps und Überprüfen von VertexTextureFilterCaps überprüft werden. Alle veröffentlichten Texturformate werden als Vertextexturen in der Softwarevertexverarbeitung unterstützt.

Anwendungen können überprüfen, ob ein bestimmtes Texturformat im Softwarevertexverarbeitungsmodus unterstützt wird, indem sie CheckDeviceFormat aufrufen und bereitstellen (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) als Nutzung. Alle Formate werden für die Softwarevertexverarbeitung unterstützt. Der Scratch-Pool ist für die Softwarevertexverarbeitung erforderlich.

API-Änderungen

   
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
    

#define D3DVERTEXTEXTURESAMPLER  (0x00100000L)

// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;

Vertexpipeline