ID3D12Device::GetDescriptorHandleIncrementSize metode (d3d12.h)

Mendapatkan ukuran kenaikan handel untuk jenis tumpukan deskriptor yang diberikan. Nilai ini biasanya digunakan untuk menambah handel ke dalam array deskriptor dengan jumlah yang benar.

Sintaks

UINT GetDescriptorHandleIncrementSize(
  [in] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType
);

Parameter

[in] DescriptorHeapType

Nilai jenis D3D12_DESCRIPTOR_HEAP_TYPE yang menentukan jenis tumpukan deskriptor untuk mendapatkan ukuran kenaikan handel.

Menampilkan nilai

Mengembalikan ukuran kenaikan handel untuk jenis tumpukan deskriptor yang diberikan, termasuk padding yang diperlukan.

Keterangan

Ukuran deskriptor yang dikembalikan oleh metode ini digunakan sebagai satu input ke struktur pembantu CD3DX12_CPU_DESCRIPTOR_HANDLE dan CD3DX12_GPU_DESCRIPTOR_HANDLE.

Contoh

Sampel D3D12PredicationQueries menggunakan ID3D12Device::GetDescriptorHandleIncrementSize sebagai berikut:

Buat timbunan deskriptor untuk sumber daya. Variabel m_rtvDescriptorSize menyimpan pendeskripsi tampilan target render menangani ukuran kenaikan, dan digunakan di bagian Buat sumber daya bingkai dari kode.

// Create descriptor heaps.
{
    // Describe and create a render target view (RTV) descriptor heap.
    D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc = {};
    rtvHeapDesc.NumDescriptors = FrameCount;
    rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
    rtvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
    ThrowIfFailed(m_device->CreateDescriptorHeap(&rtvHeapDesc, IID_PPV_ARGS(&m_rtvHeap)));

    // Describe and create a depth stencil view (DSV) descriptor heap.
    D3D12_DESCRIPTOR_HEAP_DESC dsvHeapDesc = {};
    dsvHeapDesc.NumDescriptors = 1;
    dsvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;
    dsvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
    ThrowIfFailed(m_device->CreateDescriptorHeap(&dsvHeapDesc, IID_PPV_ARGS(&m_dsvHeap)));

    // Describe and create a constant buffer view (CBV) descriptor heap.
    D3D12_DESCRIPTOR_HEAP_DESC cbvHeapDesc = {};
    cbvHeapDesc.NumDescriptors = CbvCountPerFrame * FrameCount;
    cbvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
    cbvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
    ThrowIfFailed(m_device->CreateDescriptorHeap(&cbvHeapDesc, IID_PPV_ARGS(&m_cbvHeap)));

    // Describe and create a heap for occlusion queries.
    D3D12_QUERY_HEAP_DESC queryHeapDesc = {};
    queryHeapDesc.Count = 1;
    queryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_OCCLUSION;
    ThrowIfFailed(m_device->CreateQueryHeap(&queryHeapDesc, IID_PPV_ARGS(&m_queryHeap)));

    m_rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
    m_cbvSrvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
}

// Create frame resources.
{
    CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart());

    // Create a RTV and a command allocator for each frame.
    for (UINT n = 0; n < FrameCount; n++)
    {
        ThrowIfFailed(m_swapChain->GetBuffer(n, IID_PPV_ARGS(&m_renderTargets[n])));
        m_device->CreateRenderTargetView(m_renderTargets[n].Get(), nullptr, rtvHandle);
        rtvHandle.Offset(1, m_rtvDescriptorSize);

        ThrowIfFailed(m_device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&m_commandAllocators[n])));
    }    
}

Lihat Contoh Kode dalam Referensi D3D12.

Persyaratan

   
Target Platform Windows
Header d3d12.h
Pustaka D3D12.lib
DLL D3D12.dll

Lihat juga

ID3D12Device