참고블로그 : https://emacser.tistory.com/84 https://github.com/microsoft/DirectX-Graphics-Samples/blob/master/Samples/Desktop/D3D12Multithreading/src/D3D12Multithreading.cpp

위의 블로그에서의 이미지

위의 블로그에서의 이미지

최종적으로 내가 샘플코드를 보고 이해한 과정

  1. 메인스레드가 잠들어있던 WorkerThread를 SetEvent 로 깨워서 Shadow Pass 관련 CommandList를 병렬로 작성하게 한다.
  2. 메인스레드는 모든 WorkerThread 들이 Shadow Pass Command를 작성할 때까지 기다린다.
  3. WorkerThread 들이 모두 SetEvent 로 메인 스레드에게 작업이 끝났음을 알리면 메인스레드가 Pre → Mid → ShadowPass Command 순으로 명령어를 제출한다.
  4. 그동안 WorkerThread들은 병렬로 Scene을 BackBuffer에 그리기위한 Command 작성을 수행한다.
  5. 메인 스레드가 만약 Shadow Pass CommandList 까지 제출을 끝냈다면, 동기화를 위해 모든 WorkerThread들이 Scene Render 관련 Command 작성을 다 마칠때까지 기다린다.
  6. WorkerThread 들이 모두 SetEvent 로 메인 스레드에게 작업이 끝났음을 알리면 메인스레드가 ScenePass → Post Command 순으로 명령어를 제출한다.