D3DCompile-Funktion (d3dcompiler.h)

Kompilieren Sie HLSL-Code oder eine Effektdatei in Bytecode für ein bestimmtes Ziel.

Syntax

HRESULT D3DCompile(
  [in]            LPCVOID                pSrcData,
  [in]            SIZE_T                 SrcDataSize,
  [in, optional]  LPCSTR                 pSourceName,
  [in, optional]  const D3D_SHADER_MACRO *pDefines,
  [in, optional]  ID3DInclude            *pInclude,
  [in, optional]  LPCSTR                 pEntrypoint,
  [in]            LPCSTR                 pTarget,
  [in]            UINT                   Flags1,
  [in]            UINT                   Flags2,
  [out]           ID3DBlob               **ppCode,
  [out, optional] ID3DBlob               **ppErrorMsgs
);

Parameter

[in] pSrcData

Typ: LPCVOID

Ein Zeiger auf nicht kompilierte Shaderdaten; entweder ASCII-HLSL-Code oder ein kompilierter Effekt.

[in] SrcDataSize

Typ: SIZE_T

Länge von pSrcData.

[in, optional] pSourceName

Typ: LPCSTR

Sie können diesen Parameter für Zeichenfolgen verwenden, die Fehlermeldungen angeben. Wenn sie nicht verwendet wird, legen Sie auf NULL fest.

[in, optional] pDefines

Typ: const D3D_SHADER_MACRO*

Ein optionales Array von D3D_SHADER_MACRO Strukturen, die Shadermakros definieren. Jede Makrodefinition enthält einen Namen und eine Definition mit NULL-Beendigung. Wenn sie nicht verwendet wird, legen Sie auf NULL fest. Die letzte Struktur im Array dient als Abschlusszeichen, und alle Member müssen auf NULL festgelegt sein.

[in, optional] pInclude

Typ: ID3DInclude*

Optional. Ein Zeiger auf eine ID3DInclude für die Verarbeitung von Includedateien. Wenn Sie diesen Wert auf NULL festlegen, wird ein Kompilierfehler ausgelöst, wenn ein Shader einen #include enthält. Sie können das D3D_COMPILE_STANDARD_FILE_INCLUDE Makro übergeben, bei dem es sich um einen Zeiger auf einen standardmäßigen Includehandler handelt. Dieser standardmäßige Includehandler umfasst Dateien, die relativ zum aktuellen Verzeichnis sind, und Dateien, die relativ zum Verzeichnis der ursprünglichen Quelldatei sind. Wenn Sie D3D_COMPILE_STANDARD_FILE_INCLUDE verwenden, müssen Sie den Namen der Quelldatei im pSourceName-Parameter angeben. Der Compiler leitet das anfängliche relative Verzeichnis von pSourceName ab.

#define D3D_COMPILE_STANDARD_FILE_INCLUDE ((ID3DInclude*)(UINT_PTR)1)

[in, optional] pEntrypoint

Typ: LPCSTR

Der Name der Shadereinstiegspunktfunktion, in der die Shaderausführung beginnt. Wenn Sie mit einem fx-Profil kompilieren (z. B. fx_4_0, fx_5_0 usw.), ignoriert D3DCompilepEntrypoint. In diesem Fall wird empfohlen, pEntrypoint auf NULL festzulegen, da es eine gute Programmierpraxis ist, einen Zeigerparameter auf NULL festzulegen, wenn die aufgerufene Funktion ihn nicht verwendet. Für alle anderen Shaderprofile ist ein gültiger pEntrypoint erforderlich.

[in] pTarget

Typ: LPCSTR

Eine Zeichenfolge, die das Shaderziel oder die Gruppe der Shaderfeatures angibt, für die kompiliert werden soll. Das Shaderziel kann Shadermodell 2, Shadermodell 3, Shadermodell 4 oder Shadermodell 5 sein. Das Ziel kann auch ein Effekttyp sein (z. B. fx_4_1). Informationen zu den Zielen, die von verschiedenen Profilen unterstützt werden, finden Sie unter Angeben von Compilerzielen.

[in] Flags1

Typ: UINT

Durch D3D-Kompilierungskonstanten definierte Flags.

[in] Flags2

Typ: UINT

Durch D3D-Kompilierungseffektkonstanten definierte Flags. Wenn Sie einen Shader und keine Effektdatei kompilieren, ignoriert D3DCompileFlags2; Es wird empfohlen, Flags2 auf 0 festzulegen, da es eine gute Programmierpraxis ist, einen Nicht-Zeigerparameter auf 0 festzulegen, wenn die aufgerufene Funktion ihn nicht verwendet.

[out] ppCode

Typ: ID3DBlob**

Ein Zeiger auf eine Variable, die einen Zeiger auf die ID3DBlob-Schnittstelle empfängt, mit der Sie auf den kompilierten Code zugreifen können.

[out, optional] ppErrorMsgs

Typ: ID3DBlob**

Ein Zeiger auf eine Variable, die einen Zeiger auf die ID3DBlob-Schnittstelle empfängt, mit der Sie auf Compilerfehlermeldungen zugreifen können, oder NULL , wenn keine Fehler vorliegen.

Rückgabewert

Typ: HRESULT

Gibt einen der Direct3D 11-Rückgabecodes zurück.

Hinweise

Der Unterschied zwischen D3DCompile und D3DCompile2 besteht darin, dass die letztere Methode einige optionale Parameter verwendet, die verwendet werden können, um einige Aspekte der Bytecodegenerierung zu steuern. Wenn diese zusätzliche Flexibilität nicht erforderlich ist, gibt es keinen Leistungsgewinn durch die Verwendung von D3DCompile2.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3dcompiler.h
Bibliothek d3dcompiler.lib
DLL d3dcompiler_47.dll

Siehe auch

Funktionen