Поделиться через


Интерфейс ID3D12GraphicsCommandList (d3d12.h)

Инкапсулирует список графических команд для отрисовки. Включает API для инструментирования выполнения списка команд, а также для настройки и очистки состояния конвейера.

Примечание В Windows 10 Creators Update появилась последняя версия этого интерфейса ID3D12GraphicsCommandList1. Приложения, предназначенные для Windows 10 Creators Update, должны использовать интерфейс ID3D12GraphicsCommandList1 вместо ID3D12GraphicsCommandList.
 

Наследование

Интерфейс ID3D12GraphicsCommandList наследуется от ID3D12CommandList. ID3D12GraphicsCommandList также имеет следующие типы элементов:

Методы

Интерфейс ID3D12GraphicsCommandList содержит следующие методы.

 
ID3D12GraphicsCommandList::BeginEvent

Не предназначен для непосредственного вызова.  Используйте среду выполнения событий PIX для вставки событий в список команд. (ID3D12GraphicsCommandList.BeginEvent)
ID3D12GraphicsCommandList::BeginQuery

Запускает выполнение запроса. (ID3D12GraphicsCommandList.BeginQuery)
ID3D12GraphicsCommandList::ClearDepthStencilView

Очищает ресурс трафарета глубины. (ID3D12GraphicsCommandList.ClearDepthStencilView)
ID3D12GraphicsCommandList::ClearRenderTargetView

Устанавливает для всех элементов в целевом объекте отрисовки одно значение.
ID3D12GraphicsCommandList::ClearState

Сбрасывает состояние прямого списка команд обратно в состояние, в которое он находился при создании списка команд. (ID3D12GraphicsCommandList.ClearState)
ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat

Задает для всех элементов в представлении неупорядоченного доступа указанные значения с плавающей точкой.
ID3D12GraphicsCommandList::ClearUnorderedAccessViewUint

Устанавливает для всех элементов в представлении без упорядоченного доступа (UAV) указанные целочисленные значения.
ID3D12GraphicsCommandList::Close

Указывает, что запись в список команд завершена. (ID3D12GraphicsCommandList.Close)
ID3D12GraphicsCommandList::CopyBufferRegion

Копирует область буфера из одного ресурса в другой.
ID3D12GraphicsCommandList::CopyResource

Копирует все содержимое исходного ресурса в целевой ресурс.
ID3D12GraphicsCommandList::CopyTextureRegion

Этот метод использует GPU для копирования данных текстуры между двумя расположениями. Источник и назначение могут ссылать данные текстуры, расположенные в буферном ресурсе или ресурсе текстуры.
ID3D12GraphicsCommandList::CopyTiles

Копирует плитки из буфера в ресурс с плитками или наоборот. (ID3D12GraphicsCommandList.CopyTiles)
ID3D12GraphicsCommandList::D iscardResource

Отменяет ресурс.
ID3D12GraphicsCommandList::D ispatch

Выполняет шейдер вычислений в группе потоков.
ID3D12GraphicsCommandList::D rawIndexedInstanced

Рисует индексированные экземплярные примитивы.
ID3D12GraphicsCommandList::D rawInstanced

Рисует неиндексированные экземплярные примитивы.
ID3D12GraphicsCommandList::EndEvent

Не предназначен для непосредственного вызова.  Используйте среду выполнения событий PIX для вставки событий в список команд. (ID3D12GraphicsCommandList.EndEvent)
ID3D12GraphicsCommandList::EndQuery

Завершает выполняемый запрос.
ID3D12GraphicsCommandList::ExecuteBundle

Выполняет пакет.
ID3D12GraphicsCommandList::ExecuteIndirect

Приложения выполняют непрямые операции рисования и отправки с помощью метода ExecuteIndirect.
ID3D12GraphicsCommandList::IASetIndexBuffer

Задает представление для буфера индекса.
ID3D12GraphicsCommandList::IASetPrimitiveTopology

Привязка сведений о примитивном типе и порядке данных, описывающих входные данные для этапа входного ассемблер. (ID3D12GraphicsCommandList.IASetPrimitiveTopology)
ID3D12GraphicsCommandList::IASetVertexBuffers

Задает дескриптор ЦП для буферов вершин.
ID3D12GraphicsCommandList::OMSetBlendFactor

Задает коэффициент смешивания, который модулирует значения для пиксельного шейдера, целевого объекта отрисовки или и того, и другого.
ID3D12GraphicsCommandList::OMSetRenderTargets

Задает дескриптор ЦП для целевых объектов отрисовки и трафарета глубины.
ID3D12GraphicsCommandList::OMSetStencilRef

Задает эталонное значение для тестов трафарета глубины.
ID3D12GraphicsCommandList::Reset

Сбрасывает список команд в исходное состояние, как если бы новый список команд был только что создан. (ID3D12GraphicsCommandList.Reset)
ID3D12GraphicsCommandList::ResolveQueryData

Извлекает данные из запроса. ResolveQueryData работает со всеми типами кучи (по умолчанию, отправке и обратному чтению).  ResolveQueryData работает со всеми типами кучи (по умолчанию, отправке и обратному чтению). .
ID3D12GraphicsCommandList::ResolveSubresource

Скопируйте ресурс из нескольких выборок в ресурс без нескольких выборок.
ID3D12GraphicsCommandList::ResourceBarrier

Уведомляет драйвер о необходимости синхронизации нескольких обращений к ресурсам. (ID3D12GraphicsCommandList.ResourceBarrier)
ID3D12GraphicsCommandList::RSSetScissorRects

Привязывает массив прямоугольников ножницы к этапу растеризатора.
ID3D12GraphicsCommandList::RSSetViewports

Привяжите массив окне просмотра к этапу растеризатора конвейера. (ID3D12GraphicsCommandList.RSSetViewports)
ID3D12GraphicsCommandList::SetComputeRoot32BitConstant

Задает константу в корневой сигнатуре вычислений.
ID3D12GraphicsCommandList::SetComputeRoot32BitConstants

Задает группу констант в корневой сигнатуре вычислений.
ID3D12GraphicsCommandList::SetComputeRootConstantBufferView

Задает дескриптор ЦП для буфера констант в корневой сигнатуре вычислений.
ID3D12GraphicsCommandList::SetComputeRootDescriptorTable

Задает таблицу дескриптора в корневой сигнатуре вычислений.
ID3D12GraphicsCommandList::SetComputeRootShaderResourceView

Задает дескриптор ЦП для ресурса шейдера в корневой сигнатуре вычислений.
ID3D12GraphicsCommandList::SetComputeRootSignature

Задает макет корневой сигнатуры вычислений.
ID3D12GraphicsCommandList::SetComputeRootUnorderedAccessView

Задает дескриптор ЦП для ресурса неупорядоченного доступа и представления в корневой сигнатуре вычислений.
ID3D12GraphicsCommandList::SetDescriptorHeaps

Изменяет текущие привязанные кучи дескрипторов, связанные со списком команд.
ID3D12GraphicsCommandList::SetGraphicsRoot32BitConstant

Задает константу в корневой сигнатуре графического каталога.
ID3D12GraphicsCommandList::SetGraphicsRoot32BitConstants

Задает группу констант в корневой сигнатуре графического каталога.
ID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView

Задает дескриптор ЦП для буфера констант в корневой сигнатуре графического каталога.
ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable

Задает таблицу дескрипторов в корневую сигнатуру графического каталога.
ID3D12GraphicsCommandList::SetGraphicsRootShaderResourceView

Задает дескриптор ЦП для ресурса шейдера в корневой сигнатуре графического каталога.
ID3D12GraphicsCommandList::SetGraphicsRootSignature

Задает макет корневой подписи графического каталога.
ID3D12GraphicsCommandList::SetGraphicsRootUnorderedAccessView

Задает дескриптор ЦП для ресурса неупорядоченного доступа и представления в корневой сигнатуре графического каталога.
ID3D12GraphicsCommandList::SetMarker

Не предназначен для непосредственного вызова.  Используйте среду выполнения событий PIX для вставки событий в список команд. (ID3D12GraphicsCommandList.SetMarker)
ID3D12GraphicsCommandList::SetPipelineState

Задает для всех шейдеров и программ большую часть состояния фиксированной функции конвейера графического модуля обработки (GPU).
ID3D12GraphicsCommandList::SetPredication

Задает предикат отрисовки.
ID3D12GraphicsCommandList::SOSetTargets

Задает представления выходного буфера потока.

Комментарии

Этот интерфейс является новым для D3D12, инкапсулирующим большую часть функциональных возможностей интерфейса ID3D11CommandList и включая новые функции, описанные в разделе Отрисовка.

Примеры

В примере D3D12nBodyGravity используется ID3D12GraphicsCommandList следующим образом:

Объявите объекты конвейера.

D3D12_VIEWPORT m_viewport;
D3D12_RECT m_scissorRect;
ComPtr<IDXGISwapChain3> m_swapChain;
ComPtr<ID3D12Device> m_device;
ComPtr<ID3D12Resource> m_renderTargets[FrameCount];
ComPtr<ID3D12CommandAllocator> m_commandAllocator;
ComPtr<ID3D12CommandQueue> m_commandQueue;
ComPtr<ID3D12RootSignature> m_rootSignature;
ComPtr<ID3D12DescriptorHeap> m_rtvHeap;
ComPtr<ID3D12PipelineState> m_pipelineState;
ComPtr<ID3D12GraphicsCommandList> m_commandList;
UINT m_rtvDescriptorSize;

Заполнение списков команд.

// Fill the command list with all the render commands and dependent state.
void D3D12nBodyGravity::PopulateCommandList()
{
    // Command list allocators can only be reset when the associated
    // command lists have finished execution on the GPU; apps should use
    // fences to determine GPU execution progress.
    ThrowIfFailed(m_commandAllocators[m_frameIndex]->Reset());

    // However, when ExecuteCommandList() is called on a particular command
    // list, that command list can then be reset at any time and must be before
    // re-recording.
    ThrowIfFailed(m_commandList->Reset(m_commandAllocators[m_frameIndex].Get(), m_pipelineState.Get()));

    // Set necessary state.
    m_commandList->SetPipelineState(m_pipelineState.Get());
    m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());

    m_commandList->SetGraphicsRootConstantBufferView(RootParameterCB, m_constantBufferGS->GetGPUVirtualAddress() + m_frameIndex * sizeof(ConstantBufferGS));

    ID3D12DescriptorHeap* ppHeaps[] = { m_srvUavHeap.Get() };
    m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);

    m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);
    m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_POINTLIST);
    m_commandList->RSSetScissorRects(1, &m_scissorRect);

    // Indicate that the back buffer will be used as a render target.
    m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));

    CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
    m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, nullptr);

    // Record commands.
    const float clearColor[] = { 0.0f, 0.0f, 0.1f, 0.0f };
    m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);

    // Render the particles.
    float viewportHeight = static_cast<float>(static_cast<UINT>(m_viewport.Height) / m_heightInstances);
    float viewportWidth = static_cast<float>(static_cast<UINT>(m_viewport.Width) / m_widthInstances);
    for (UINT n = 0; n < ThreadCount; n++)
    {
        const UINT srvIndex = n + (m_srvIndex[n] == 0 ? SrvParticlePosVelo0 : SrvParticlePosVelo1);

        D3D12_VIEWPORT viewport;
        viewport.TopLeftX = (n % m_widthInstances) * viewportWidth;
        viewport.TopLeftY = (n / m_widthInstances) * viewportHeight;
        viewport.Width = viewportWidth;
        viewport.Height = viewportHeight;
        viewport.MinDepth = D3D12_MIN_DEPTH;
        viewport.MaxDepth = D3D12_MAX_DEPTH;
        m_commandList->RSSetViewports(1, &viewport);

        CD3DX12_GPU_DESCRIPTOR_HANDLE srvHandle(m_srvUavHeap->GetGPUDescriptorHandleForHeapStart(), srvIndex, m_srvUavDescriptorSize);
        m_commandList->SetGraphicsRootDescriptorTable(RootParameterSRV, srvHandle);

        m_commandList->DrawInstanced(ParticleCount, 1, 0, 0);
    }

    m_commandList->RSSetViewports(1, &m_viewport);

    // Indicate that the back buffer will now be used to present.
    m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));

    ThrowIfFailed(m_commandList->Close());
}

См. пример кода в справочнике по D3D12.

Требования

Требование Значение
Целевая платформа Windows
Header d3d12.h

См. также раздел

Основные интерфейсы

ID3D12CommandList

ID3D12GraphicsCommandList1