텍스처 전송 시 Lock을 걸어야 하는 이유

2024. 9. 5. 06:47정보처리,전산

반응형
 

그래픽스 프로그래밍에서 텍스처를 GPU에 보내는 경우

텍스처 전송 시 Lock을 걸어야 하는 이유

Lock은 텍스처와 같은 리소스를 CPU와 GPU 간의 동기화 문제를 해결하기 위해 사용된다. 텍스처를 GPU로 전송할 때 Lock을 사용하는 이유는

  • 메모리 동기화: CPU와 GPU는 서로 다른 메모리 공간에서 작업한다. 텍스처를 GPU로 전송하려면, 해당 데이터가 GPU 메모리에 안전하게 복사되도록 해야 한다. Lock은 CPU가 메모리 블록에 대한 독점 접근을 보장하여 데이터가 GPU로 전송되는 동안 다른 작업에 의해 변경되지 않도록 한다.
  • 다중 스레드 환경: 그래픽스 API를 사용할 때, 여러 스레드가 동시에 메모리에 접근할 수 있다. Lock을 사용하면 한 스레드가 리소스를 사용하고 있는 동안 다른 스레드가 접근하지 못하게 하여 데이터의 일관성을 유지한다.
  • 텍스처 데이터가 GPU로 복사되는 과정에서 데이터가 변경되거나 손상되지 않도록 보장하기 위해 Lock이 필요하다.
ID3D11Texture2D pTexture; // 텍스처 객체
D3D11_MAPPED_SUBRESOURCE mappedResource;
D3D11_MAPPED_SUBRESOURCE mappedSubresource;

// 텍스처를 Lock하여 CPU가 데이터에 접근할 수 있도록 설정
context->Map(pTexture, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);

// CPU가 텍스처 데이터에 접근하여 수정
void pData = mappedResource.pData;
// 데이터 수정 작업 수행...

// 데이터 수정이 완료된 후 Unlock
context->Unmap(pTexture, 0);

 

  • Map 메서드: 텍스처를 Lock하여 CPU가 데이터에 접근할 수 있게 한다. 이때 D3D11_MAP_WRITE_DISCARD는 기존 데이터를 폐기하고 새로운 데이터를 쓰는 모드이다.
  • Unmap 메서드: 데이터 수정이 완료된 후 텍스처의 Lock을 해제하여 GPU가 데이터를 사용할 수 있게 한다.

 

반응형