今下記のようなエラーが出ていて困っています
どなたかご教授お願い致します。
D3D12 ERROR: ID3D12CommandQueue::ExecuteCommandLists: Using IDXGISwapChain::Present on Command List (0x107AFFD0:'Internal DXGI CommandList'): Resource state (0x4: D3D12_RESOURCE_STATE_RENDER_TARGET) of resource (0x107D20B0:'Unnamed ID3D12Resource Object') (subresource: 0) is invalid for use as a PRESENT_SOURCE. Expected State Bits (all): 0x0: D3D12_RESOURCE_STATE_[COMMON|PRESENT], Actual State: 0x4: D3D12_RESOURCE_STATE_RENDER_TARGET, Missing State: 0x0: D3D12_RESOURCE_STATE_[COMMON|PRESENT]. [ EXECUTION ERROR #538: INVALID_SUBRESOURCE_STATE]
原因と思われるソースは↓です
/*
スワップチェーンを動作させる
1、コマンドアロケーターとコマンドリストをリセット
2、レンダーターゲットをバックバッファにセット
3、レンダーターゲットを指定色でリセット
4、レンダーターゲットをクローズ
5、たまったコマンドをコマンドリストに投げる
6、スワップチェーンのフリップ処理
*/
// 1
result = _cmdAllocator->Reset();
// 2 auto bbIdx = _swapchain->GetCurrentBackBufferIndex(); auto rtvH = rtvHeaps->GetCPUDescriptorHandleForHeapStart(); rtvH.ptr += bbIdx * _dev->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); /* リソースバリア */ D3D12_RESOURCE_BARRIER BarrierDesc = {}; BarrierDesc.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; BarrierDesc.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; BarrierDesc.Transition.pResource = _backBuffers[bbIdx]; BarrierDesc.Transition.Subresource = 0; BarrierDesc.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; BarrierDesc.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET; _cmdList->ResourceBarrier(1, &BarrierDesc); _cmdList->OMSetRenderTargets(1, &rtvH, true, nullptr); // 3 float clearColor[] = { 0.0f,1.0f,1.0f,0.0f }; _cmdList->ClearRenderTargetView(rtvH, clearColor, 0, nullptr); // 4 _cmdList->Close(); // 5 ID3D12CommandList* cmdlists[] = { _cmdList }; _cmdQueue->ExecuteCommandLists(1, cmdlists); /* フェンス */ ID3D12Fence* _fence = nullptr; UINT64 _fenceVal = 0; result = _dev->CreateFence(_fenceVal, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&_fence)); _cmdQueue->Signal(_fence, ++_fenceVal); if (_fence->GetCompletedValue() != _fenceVal) { auto event = CreateEvent(nullptr, false, false, nullptr); _fence->SetEventOnCompletion(_fenceVal, event); WaitForSingleObject(event, INFINITE); CloseHandle(event); } result = _cmdAllocator->Reset(); result = _cmdList->Reset(_cmdAllocator, nullptr); /* リソースバリア */ BarrierDesc.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; BarrierDesc.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT; _cmdList->ResourceBarrier(1, &BarrierDesc); // 6 _swapchain->Present(1, 0);