ID3D12GraphicsCommandList::D ispatch-Methode (d3d12.h)
Führt eine Befehlsliste aus einer Threadgruppe aus.
Syntax
void Dispatch(
[in] UINT ThreadGroupCountX,
[in] UINT ThreadGroupCountY,
[in] UINT ThreadGroupCountZ
);
Parameter
[in] ThreadGroupCountX
Typ: UINT
Die Anzahl der Gruppen, die in x-Richtung verteilt werden. ThreadGroupCountX muss kleiner oder gleich D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) sein.
[in] ThreadGroupCountY
Typ: UINT
Die Anzahl der Gruppen, die in y-Richtung verteilt werden. ThreadGroupCountY muss kleiner oder gleich D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) sein.
[in] ThreadGroupCountZ
Typ: UINT
Die Anzahl der Gruppen, die in z-Richtung verteilt werden. ThreadGroupCountZ muss kleiner oder gleich D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) sein. In Featureebene 10 muss der Wert für ThreadGroupCountZ 1 sein.
Rückgabewert
Keine
Bemerkungen
Sie rufen die Dispatch-Methode auf, um Befehle in einem Compute-Shader auszuführen. Ein Compute-Shader kann in vielen Threads parallel innerhalb einer Threadgruppe ausgeführt werden. Indizieren Sie einen bestimmten Thread innerhalb einer Threadgruppe mithilfe eines 3D-Vektors, der von (x,y,z) angegeben wird.
Beispiele
Im D3D12nBodyGravity-Beispiel wird ID3D12GraphicsCommandList::D ispatch wie folgt verwendet:
// Run the particle simulation using the compute shader.
void D3D12nBodyGravity::Simulate(UINT threadIndex)
{
ID3D12GraphicsCommandList* pCommandList = m_computeCommandList[threadIndex].Get();
UINT srvIndex;
UINT uavIndex;
ID3D12Resource *pUavResource;
if (m_srvIndex[threadIndex] == 0)
{
srvIndex = SrvParticlePosVelo0;
uavIndex = UavParticlePosVelo1;
pUavResource = m_particleBuffer1[threadIndex].Get();
}
else
{
srvIndex = SrvParticlePosVelo1;
uavIndex = UavParticlePosVelo0;
pUavResource = m_particleBuffer0[threadIndex].Get();
}
pCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(pUavResource, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS));
pCommandList->SetPipelineState(m_computeState.Get());
pCommandList->SetComputeRootSignature(m_computeRootSignature.Get());
ID3D12DescriptorHeap* ppHeaps[] = { m_srvUavHeap.Get() };
pCommandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);
CD3DX12_GPU_DESCRIPTOR_HANDLE srvHandle(m_srvUavHeap->GetGPUDescriptorHandleForHeapStart(), srvIndex + threadIndex, m_srvUavDescriptorSize);
CD3DX12_GPU_DESCRIPTOR_HANDLE uavHandle(m_srvUavHeap->GetGPUDescriptorHandleForHeapStart(), uavIndex + threadIndex, m_srvUavDescriptorSize);
pCommandList->SetComputeRootConstantBufferView(RootParameterCB, m_constantBufferCS->GetGPUVirtualAddress());
pCommandList->SetComputeRootDescriptorTable(RootParameterSRV, srvHandle);
pCommandList->SetComputeRootDescriptorTable(RootParameterUAV, uavHandle);
pCommandList->Dispatch(static_cast<int>(ceil(ParticleCount / 128.0f)), 1, 1);
pCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(pUavResource, D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE));
}
Weitere Informationen finden Sie unter Beispielcode in der D3D12-Referenz.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Windows |
Kopfzeile | d3d12.h |
Bibliothek | D3d12.lib |
DLL | D3d12.dll |