2014-10-17 3 views
5

나는 잠시 동안 Directx 11을 공부했지만 Directx 11이 메모리를 관리하는 방법에 대해서는 여전히 혼란 스럽습니다. 예를 들어 ID3D11Device :: CreateBuffer를 사용하여 정점 버퍼를 만들면 새 버퍼가 어디에 저장됩니까? 나는 그것이 버퍼에 포인터를 반환한다는 것을 알기 때문에 그것이 CPU RAM에 저장되어야 함을 의미합니까? 그러나, CPU RAM에서 GPU RAM으로 버퍼를 복사해야하기 때문에 ID3D11DeviceContext :: IASetVertexBuffers가 매우 느린 프로세스가 될 것이라고 생각했습니다. 그러나 ID3D11Device : CreateBuffer로 생성 된 모든 버퍼가 GPU RAM에 저장 되었다면 GPU RAM이 정말로 빨리 채워지지 않을까요? 기본적으로 알고 싶습니다. 버퍼를 만들면 해당 데이터는 어디에 저장됩니까? CPU RAM 또는 GPU RAM에 있습니까? 또한, ID3D11DeviceContext :: IASetVertexBuffers는 버퍼 (복사/설정?)로 무엇을하고 있는가?Directx 11 메모리 관리

답변

7

일반적인 대답은 "운전자가 원하는 곳이면 어디든"입니다. "동적"리소스의 경우 일반적으로 CPU와 GPU에서 액세스 할 수있는 메모리에 저장됩니다 (최신 PC에서는 PCIe 버스에서 공유 됨). "STATIC"리소스의 경우 '공유'메모리 창을 통해 복사 된 GPU에서만 액세스 할 수있는 비디오 RAM에있을 수 있으며 공간이 제한되어 있으면 '공유'메모리 창에 저장됩니다. 렌더링 타겟은 일반적으로 비디오 RAM에 저장됩니다.

Direct3D 비디오 메모리 관리에 대한 자세한 내용은 "Windows 게임이 2,147,352,576에서 실행되지 않는 이유"를 확인하십시오. 더 이상 MSDN Downloads에 없지만 내 blog에서 찾을 수 있습니다.

하드웨어 세부 정보는 driver writer's documentation을 참조하십시오.

MSDN 코드 갤러리 교육에서 Video Memory 샘플을 찾을 수도 있습니다.