Bagikan melalui


METODE ID3D12GraphicsCommandList::D ispatch (d3d12.h)

Menjalankan daftar perintah dari grup utas.

Sintaks

void Dispatch(
  [in] UINT ThreadGroupCountX,
  [in] UINT ThreadGroupCountY,
  [in] UINT ThreadGroupCountZ
);

Parameter

[in] ThreadGroupCountX

Jenis: UINT

Jumlah grup yang dikirim ke arah x. ThreadGroupCountX harus kurang dari atau sama dengan D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).

[in] ThreadGroupCountY

Jenis: UINT

Jumlah grup yang dikirim ke arah y. ThreadGroupCountY harus kurang dari atau sama dengan D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).

[in] ThreadGroupCountZ

Jenis: UINT

Jumlah grup yang dikirim ke arah z. ThreadGroupCountZ harus kurang dari atau sama dengan D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535). Di tingkat fitur 10 nilai untuk ThreadGroupCountZ harus 1.

Mengembalikan nilai

Tidak ada

Keterangan

Anda memanggil metode Pengiriman untuk menjalankan perintah dalam shader komputasi. Shader komputasi dapat dijalankan pada banyak utas secara paralel, dalam grup utas. Indeks utas tertentu, dalam grup utas menggunakan vektor 3D yang diberikan oleh (x,y,z).

Contoh

Sampel D3D12nBodyGravity menggunakan ID3D12GraphicsCommandList::D ispatch sebagai berikut:

// 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));
}

Lihat Contoh Kode di Referensi D3D12.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header d3d12.h
Pustaka D3d12.lib
DLL D3d12.dll

Lihat juga

ID3D12GraphicsCommandList