ID3D11Device::CreateGeometryShader-Methode (d3d11.h)
Erstellen Sie einen Geometry-Shader.
Syntax
HRESULT CreateGeometryShader(
[in] const void *pShaderBytecode,
[in] SIZE_T BytecodeLength,
[in, optional] ID3D11ClassLinkage *pClassLinkage,
[out, optional] ID3D11GeometryShader **ppGeometryShader
);
Parameter
[in] pShaderBytecode
Typ: const void*
Ein Zeiger auf den kompilierten Shader.
[in] BytecodeLength
Typ: SIZE_T
Größe des kompilierten Geometrie-Shaders.
[in, optional] pClassLinkage
Typ: ID3D11ClassLinkage*
Ein Zeiger auf eine Klassenverknüpfungsschnittstelle (siehe ID3D11ClassLinkage); der Wert kann NULL sein.
[out, optional] ppGeometryShader
Typ: ID3D11GeometryShader**
Adresse eines Zeigers auf eine ID3D11GeometryShader-Schnittstelle . Wenn dies NULL ist, werden alle anderen Parameter überprüft, und wenn alle Parameter die Überprüfung bestehen, gibt diese API S_FALSE anstelle von S_OK zurück.
Rückgabewert
Typ: HRESULT
Diese Methode gibt einen der folgenden Direct3D 11-Rückgabecodes zurück.
Hinweise
Nach der Erstellung kann der Shader auf das Gerät festgelegt werden, indem ID3D11DeviceContext::GSSetShader aufgerufen wird.
Die Direct3D 11.1-Runtime, die ab Windows 8 verfügbar ist, bietet die folgenden neuen Funktionen für CreateGeometryShader.
Die folgenden Shadermodell 5.0-Anweisungen sind nur für Pixel-Shader und Compute-Shader in der Direct3D 11.0-Runtime verfügbar. Für die Direct3D 11.1-Runtime können Sie diese Anweisungen in allen Shaderphasen verwenden, da ungeordnete Zugriffsansichten (UAV) in allen Shaderphasen verfügbar sind.
Wenn Sie also die folgenden Shadermodell 5.0-Anweisungen in einem Geometrie-Shader verwenden, können Sie den kompilierten Geometrie-Shader erfolgreich an pShaderBytecode übergeben. Das heißt, der Aufruf von CreateGeometryShader ist erfolgreich.
Wenn Sie einen kompilierten Shader an pShaderBytecode übergeben, der eine der folgenden Anweisungen auf einem Gerät verwendet, das uaVs nicht in jeder Shaderphase unterstützt (einschließlich vorhandener Treiber, die nicht zur Unterstützung von UAVs in jeder Shaderphase implementiert sind), schlägt CreateGeometryShader fehl. CreateGeometryShader schlägt auch fehl, wenn der Shader versucht, einen UAV-Slot zu verwenden, der über den Satz von UAV-Slots hinausgeht, die von der Hardware unterstützt werden.
- dcl_uav_typed
- dcl_uav_raw
- dcl_uav_structured
- ld_raw
- ld_structured
- ld_uav_typed
- store_raw
- store_structured
- store_uav_typed
- sync_uglobal
- Alle Atome und unmittelbaren Atome (z. B. atomic_and und imm_atomic_and)
Beispiele
Verwendungsbeispiel
ID3D11GeometryShader* g_pGeometryShader11 = NULL;
ID3DBlob* pGeometryShaderBuffer = NULL;
ID3DBlob * errorbuffer = NULL;
D3DX11CompileFromFile( str, NULL, NULL, "GS", "gs_4_0", dwShaderFlags, 0, NULL,
&pGeometryShaderBuffer, &errorbuffer, NULL );
pd3dDevice->CreateGeometryShader( pGeometryShaderBuffer->GetBufferPointer(),
pGeometryShaderBuffer->GetBufferSize(), NULL, &g_pGeometryShader11 );
Anforderungen
Zielplattform | Windows |
Kopfzeile | d3d11.h |
Bibliothek | D3D11.lib |