ID3D12GraphicsCommandList :: Close () возвращает E_INVALIDARG

Я следую учебным пособиям Rastertek по Direct3D12, которые можно найти Вот.

Я дважды проверил, чтобы убедиться, что весь мой код такой же, как у него, но у меня проблемы с списком команд. Когда я закрываю список команд только после очистки заднего буфера, метод ID3D12GraphicsCommandList::Close() возвращается E_INVALIDARG, что означает, что я сделал что-то не так во время записи списка команд. Тем не менее, ничего, что я делаю, похоже, не так.

D3D12_RESOURCE_BARRIER Barrier;

hr = CommandAllocator->Reset(); HANDLE_HR(__LINE__);

hr = CommandList->Reset (
CommandAllocator,
nullptr
); HANDLE_HR(__LINE__);

Barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
Barrier.Transition.pResource = RenderTargetResource[BufferIndex];
Barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT;
Barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
Barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
Barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;

CommandList->ResourceBarrier(1, &Barrier);

RenderTargetViewPtr.ptr = RenderTargetViewHandle.ptr + BufferIndex * RenderTargetBytes;

CommandList->OMSetRenderTargets(1, &RenderTargetViewPtr, FALSE, nullptr);

FLOAT color[] = { 1.0, 1.0, 1.0, 1.0 };

CommandList->ClearRenderTargetView(RenderTargetViewHandle, color, 0, nullptr);

Barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;
Barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;

CommandList->ResourceBarrier(1, &Barrier);

hr = CommandList->Close(); HANDLE_HR(__LINE__);

Весь мой проект можно найти на эта ветка github.

В чем проблема с этим кодом?

Кажется, проблема заключается в ресурсных барьерах, но они довольно безобидны. Комментируя OMSetRenderTargets() а также ClearRenderTargetView() по-прежнему приводит к E_INVALIDARG возвращается из Close(),

Я также пытался использовать ID3D12InfoQueue интерфейс, чтобы узнать, в чем проблема. В очереди нет сообщений, когда Close() возвращает ошибку — я проверил, чтобы интерфейс работал правильно, так как сообщения делать появляются, когда возникают другие ошибки.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]