728x90

Deferred Context를 이용하여 텍스처를 수정하고 렌더링하는 과정에서 


D3D11 WARNING: ID3D11Device::RemoveContext: Deferred Context removal has been triggered for the following reason (어쩌구 저쩌구...)


라는 엄청 긴 메세지와 함께 프로그램은 실행되고 있지만, DebugView에서 엄청나게 많은 메세지를 찍어대면서 몇개의 영상이 멈추었다.




그래서 인터넷에 찾아보니 ID3D11CommandList는 SAFE_RELEASE()를 매크로를 사용하지말고 그냥 Release() 함수를 사용해야만 한다고 한다.


// Deferred Execute

for (int i = 0; i < DEFERRED_COUNT; ++i)

{

    if (m_pDX11DisplayProperty->m_pRenderingCommandList[i] != nullptr)

    {

        DeviceContext->ExecuteCommandList(m_pDX11DisplayProperty->m_pRenderingCommandList[i], TRUE);

        //SAFE_RELEASE(m_pDX11DisplayProperty->m_pRenderingCommandList[i]);     // <-- 이렇게 사용하면 안됨.

        m_pDX11DisplayProperty->m_pRenderingCommandList[i]->Release();

    }


    //m_pUpdateClass[i].m_pKeyedMutex->ReleaseSync(uRelKey);

}


출처 : https://community.amd.com/thread/128535



위에 이야기는 테스트 결과로 봤을 때 잘못된 정보였다 !!!!


결과만 말하면 FinishCommandList()가 ExecuteCommandList()보다 많이 호출되어 CommandList의 데이터가 소모가 되지 않고 쌓이기 때문에 Memory Leak 처럼 보인 것이다.


항상 ExecuteCommandList()가 FinishCommandList() 보다 더 많이 호출될 수 있게 하도록 하자.

728x90

+ Recent posts