Metodo ID3D11Device::CreateGeometryShader (d3d11.h)
Creare uno shader geometry.
Sintassi
HRESULT CreateGeometryShader(
[in] const void *pShaderBytecode,
[in] SIZE_T BytecodeLength,
[in, optional] ID3D11ClassLinkage *pClassLinkage,
[out, optional] ID3D11GeometryShader **ppGeometryShader
);
Parametri
[in] pShaderBytecode
Tipo: const void*
Puntatore allo shader compilato.
[in] BytecodeLength
Tipo: SIZE_T
Dimensioni dello shader geometry compilato.
[in, optional] pClassLinkage
Tipo: ID3D11ClassLinkage*
Puntatore a un'interfaccia di collegamento di classe (vedere ID3D11ClassLinkage); il valore può essere NULL.
[out, optional] ppGeometryShader
Tipo: ID3D11GeometryShader**
Indirizzo di un puntatore a un'interfaccia ID3D11GeometryShader . Se è NULL, tutti gli altri parametri verranno convalidati e se tutti i parametri superano la convalida, questa API restituirà S_FALSE anziché S_OK.
Valore restituito
Tipo: HRESULT
Questo metodo restituisce uno dei codici restituiti Direct3D 11 seguenti.
Commenti
Dopo la creazione, lo shader può essere impostato sul dispositivo chiamando ID3D11DeviceContext::GSSetShader.
Il runtime direct3D 11.1, disponibile a partire da Windows 8, fornisce le nuove funzionalità seguenti per CreateGeometryShader.
Le istruzioni del modello di shader 5.0 seguenti sono disponibili solo per pixel shader e compute shader nel runtime di Direct3D 11.0. Per il runtime direct3D 11.1, poiché le visualizzazioni di accesso non ordinato sono disponibili in tutte le fasi dello shader, è possibile usare queste istruzioni in tutte le fasi dello shader.
Pertanto, se si usano le istruzioni del modello di shader 5.0 seguenti in un geometry shader, è possibile passare correttamente lo shader geometry compilato a pShaderBytecode. Ovvero, la chiamata a CreateGeometryShader ha esito positivo.
Se si passa uno shader compilato a pShaderBytecode che usa una delle istruzioni seguenti in un dispositivo che non supporta UAV in ogni fase dello shader (inclusi i driver esistenti che non vengono implementati per supportare le UAV in ogni fase dello shader), CreateGeometryShader ha esito negativo. CreateGeometryShader ha esito negativo anche se lo shader tenta di usare uno slot UAV oltre il set di slot UAV supportati dall'hardware.
- 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
- Tutte le atomiche e le atomiche immediate (ad esempio, atomic_and e imm_atomic_and)
Esempio
Esempio di utilizzo
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 );
Requisiti
Piattaforma di destinazione | Windows |
Intestazione | d3d11.h |
Libreria | D3D11.lib |