次の方法で共有


ID3D12GraphicsCommandList::D ispatch メソッド (d3d12.h)

スレッド グループからコマンド リストを実行します。

構文

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

パラメーター

[in] ThreadGroupCountX

型: UINT

x 方向にディスパッチされたグループの数。 ThreadGroupCountX は、D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) 以下である必要があります。

[in] ThreadGroupCountY

型: UINT

y 方向にディスパッチされたグループの数。 ThreadGroupCountY は、D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION以下である必要があります (65535)。

[in] ThreadGroupCountZ

型: UINT

z 方向にディスパッチされたグループの数。 ThreadGroupCountZ は、D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION以下である必要があります (65535)。 機能レベル 10 では、 ThreadGroupCountZ の値は 1 である必要があります。

戻り値

なし

解説

Dispatch メソッドを呼び出して、コンピューティング シェーダーでコマンドを実行します。 コンピューティング シェーダーは、スレッド グループ内の多数のスレッドで並列に実行できます。 (x,y,z) によって指定された 3D ベクターを使用して、スレッド グループ内の特定のスレッドにインデックスを作成します。

D3D12nBodyGravity サンプルでは、次のように ID3D12GraphicsCommandList::D ispatch を使用します。

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

「D3D12 リファレンス」のコード例を参照してください

要件

要件
対象プラットフォーム Windows
ヘッダー d3d12.h
Library D3d12.lib
[DLL] D3d12.dll

こちらもご覧ください

ID3D12GraphicsCommandList