ID3D11DeviceContext::Flush 메서드(d3d11.h)
명령 버퍼의 큐에 대기 중인 명령을 GPU(그래픽 처리 장치)로 보냅니다.
구문
void Flush();
반환 값
없음
설명
대부분의 애플리케이션은 이 메서드를 호출할 필요가 없습니다. 애플리케이션이 필요하지 않은 경우 이 메서드를 호출하면 성능 저하가 발생합니다. Flush에 대한 각 호출에는 상당한 양의 오버헤드가 발생합니다.
애플리케이션에서 Microsoft Direct3D 상태 설정, 현재 또는 그리기 명령을 호출하는 경우 해당 명령은 내부 명령 버퍼로 큐에 대기됩니다. Flush 는 처리를 위해 해당 명령을 GPU로 보냅니다. 일반적으로 Direct3D 런타임은 명령 버퍼가 가득 차거나 애플리케이션이 리소스를 매핑할 때와 같이 런타임에서 전송해야 한다고 결정할 때마다 이러한 명령을 GPU에 자동으로 보냅니다. Flush 는 명령을 수동으로 보냅니다.
CPU가 임의의 시간(예: 절전 모드 함수를 호출하는 경우)을 기다릴 때 Flush를 사용하는 것이 좋습니다.
Flush는 비동기적으로 작동하므로 GPU가 큐에 대기 중인 그래픽 명령 실행을 완료하기 전이나 후에 반환할 수 있습니다. 그러나 그래픽 명령은 결국 항상 완료됩니다. D3D11_QUERY_EVENT 값을 사용하여 ID3D11Device::CreateQuery 메서드를 호출하여 이벤트 쿼리를 만들 수 있습니다. 그런 다음, ID3D11DeviceContext::GetData 메서드 호출에서 해당 이벤트 쿼리를 사용하여 GPU가 그래픽 명령 처리를 완료한 시기를 결정할 수 있습니다.
Microsoft Direct3D 11은 개체의 소멸을 지연합니다. 따라서 애플리케이션은 즉시 제거되는 개체를 사용할 수 없습니다. Flush를 호출하면 소멸이 지연된 모든 개체를 삭제합니다. 애플리케이션에서 개체를 동기적으로 파기해야 하는 경우 애플리케이션이 모든 참조를 해제하고 ID3D11DeviceContext::ClearState를 호출한 다음 Flush를 호출하는 것이 좋습니다.
Flip 프레젠테이션 스왑 체인의 지연된 소멸 문제
Direct3D 11은 뷰 및 리소스와 같은 개체가 효율적으로 파괴될 때까지 개체의 소멸을 지연합니다. 이 지연된 파기로 인해 프레젠테이션 모델 스왑 체인 전환에 문제가 발생할 수 있습니다. 대칭 이동 프레젠테이션 모델 스왑 체인에는 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL 플래그가 설정됩니다. 플립 프레젠테이션 모델 스왑 체인을 만들 때 HWND, IWindow 또는 컴퍼지션 표면과 한 번에 하나의 스왑 체인만 연결할 수 있습니다. 애플리케이션이 플립 프레젠테이션 모델 스왑 체인을 삭제하고 다른 스왑 체인으로 바꾸려고 하면 애플리케이션이 원래 스왑 체인의 모든 참조를 즉시 해제할 때 원래 스왑 체인이 제거되지 않습니다.대부분의 애플리케이션은 일반적으로 이전 스왑 체인 버퍼에 대한 새 스왑 체인 버퍼를 대체하는 대부분의 시나리오에 대해 IDXGISwapChain::ResizeBuffers 메서드를 사용합니다. 그러나 애플리케이션이 실제로 이전 스왑 체인을 삭제하고 새 스왑 체인을 만들어야 하는 경우 애플리케이션은 애플리케이션이 해제한 모든 개체를 강제로 파기해야 합니다. 파기를 강제로 적용하려면 ID3D11DeviceContext::ClearState 를 호출한 다음(그렇지 않으면 뷰가 파이프라인 상태에 바인딩되지 않도록) 직접 컨텍스트에서 Flush 를 호출합니다. IDXGIFactory2::CreateSwapChainForHwnd, IDXGIFactory2::CreateSwapChainForCoreWindow 또는 IDXGIFactory2::CreateSwapChainForComposition을 다시 호출하여 새 스왑 체인을 만들기 전에 강제로 파기해야 합니다.
요구 사항
대상 플랫폼 | Windows |
헤더 | d3d11.h |
라이브러리 | D3D11.lib |