Open namidaka opened 2 months ago
Dx12Commands* get(ID3D12CommandQueue* pQueue, const wchar_t* name) { D3D12_COMMAND_QUEUE_DESC queueDesc = pQueue->GetDesc(); EnterCriticalSection(&criticalSection_); Dx12Commands* pCommands = nullptr; for (size_t idx = 0; idx < Capacity && (pCommands == nullptr); idx++) { auto& cmds = buffer[queueDesc.Type][idx]; if (cmds.verify(pQueue) && cmds.available()) { pCommands = &cmds; } } FFX_ASSERT(pCommands); pCommands->occupy(pQueue, name); LeaveCriticalSection(&criticalSection_); return pCommands; } };
pCommands can somehow be null. It happened once to one of our QA
Here is the stack trace
Dx12CommandPool<T>::get (fidelityfx-sdk\src\backends\dx12\FrameInterpolationSwapchain\FrameInterpolationSwapchainDX12_Helpers.h:240) FrameInterpolationSwapChainDX12::presentWithUiComposition (fidelityfx-sdk\src\backends\dx12\FrameInterpolationSwapchain\FrameInterpolationSwapchainDX12.cpp:1041) FrameInterpolationSwapChainDX12::Present (fidelityfx-sdk\src\backends\dx12\FrameInterpolationSwapchain\FrameInterpolationSwapchainDX12.cpp:1223) FD3D12Viewport::PresentChecked FD3D12Viewport::Present FD3D12CommandContextBase::RHIEndDrawingViewport FRHICommand<T>::ExecuteAndDestruct FRHICommandListBase::Execute operator== TGraphTask<T>::ExecuteTask FNamedTaskThread::ProcessTasksNamedThread FNamedTaskThread::ProcessTasksUntilQuit FRHIThread::Run FRunnableThreadWin::Run FRunnableThreadWin::GuardedRun Called from KERNEL32 <unknown>
pCommands can somehow be null. It happened once to one of our QA
Here is the stack trace