Método ID3D12GraphicsCommandList::D ispatch (d3d12.h)
Ejecuta una lista de comandos desde un grupo de subprocesos.
Sintaxis
void Dispatch(
[in] UINT ThreadGroupCountX,
[in] UINT ThreadGroupCountY,
[in] UINT ThreadGroupCountZ
);
Parámetros
[in] ThreadGroupCountX
Tipo: UINT
Número de grupos enviados en la dirección x. ThreadGroupCountX debe ser menor o igual que D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
[in] ThreadGroupCountY
Tipo: UINT
Número de grupos enviados en la dirección y. ThreadGroupCountY debe ser menor o igual que D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
[in] ThreadGroupCountZ
Tipo: UINT
Número de grupos enviados en la dirección z. ThreadGroupCountZ debe ser menor o igual que D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535). En el nivel de característica 10, el valor de ThreadGroupCountZ debe ser 1.
Valor devuelto
None
Observaciones
Se llama al método Dispatch para ejecutar comandos en un sombreador de proceso. Un sombreador de proceso se puede ejecutar en muchos subprocesos en paralelo, dentro de un grupo de subprocesos. Indexe un subproceso determinado, dentro de un grupo de subprocesos mediante un vector 3D proporcionado por (x,y,z).
Ejemplos
El ejemplo D3D12nBodyGravity usa ID3D12GraphicsCommandList::D ispatch de la siguiente manera:
// 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));
}
Vea Código de ejemplo en la referencia de D3D12.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | d3d12.h |
Library | D3d12.lib |
Archivo DLL | D3d12.dll |