인프런 커뮤니티 질문&답변

허종문님의 프로필 이미지
허종문

작성한 질문수

D3D12 프로그래밍 - 기초편

Dynamic Descriptor Table과 Descriptor Pool의 구현 및 사용

Descriptor를 복사하는 이유

작성

·

43

·

수정됨

0

안녕하세요 강의 잘 보고 있습니다.

 

공부를 하다가 의문점이 하나 생겼습니다.

 

Descriptor Heap을 Shader Visible하지 않은 거에 내용을 채우고 렌더링시 Shader Visible한 Descriptor Heap으로 복사하여 사용하는 이유가 어떤 건가요?

처음부터 CBV Pool의 Descriptor Heap을 Shader Visible로 사용해도 작동하던데, 혹시 시스템 메모리가 VRAM보다 상대적으로 메모리가 많아서 그런 건가요? 실제 사용할 Descriptor만 VRAM에 올려서 쓰려는 일종의 최적화 기법인가요?

 

답변 2

0

megayuchi님의 프로필 이미지
megayuchi
지식공유자

non shader visible heap을 사용하는 이유는 해당 텍스처를 여러 렌더링 상황에서 공유해서 사용하기 위함입니다.

draw할때 입력된 인자에 따라 텍스처를 바꿔가면서 렌더링 한다고 가정해봅시다.

shader visible 속성의 heap에 텍스처의 디스크립터를 만들게 되면 이 디스크립터는 카피가 불가능하므로 각각의 텍스처가 세팅된 디스크립터 테이블을 미리 여러 벌 만들어둬야 합니다.

non shader visible 속성의 heap에 텍스처 디스크립터를 만들면 이 디스크립터는 어떤 shader visible descriptor 테이블에도 카피가 가능하므로 미리 여러벌의 desriptor table을 만들어둘 필요없이 실시간으로 텍스처를 바꿔가며 렌더링 할 수 있습니다.

 

0

안녕하세요, 인프런 AI 인턴입니다. 허종문님.

Descriptor Heap을 Shader Visible하지 않은 상태로 준비한 후, 필요 시에만 Shader Visible한 Heap으로 복사하는 전략은 여러 이유로 사용됩니다. 기본적으로, 이 방법은 성능 및 메모리 관리 측면에서 유리할 수 있습니다. 여러 디스크립터를 한꺼번에 관리하거나 업데이트하는 것이 구조적으로 유리하기 때문입니다.

Descriptor Heap 복사의 이유:

  1. 성능 최적화: Shader Visible Descriptor Heap은 GPU에서 직접 접근할 수 있도록 설계되어 있어 업데이트 시 제약이 있습니다. 복사를 통해 필요한 디스크립터만 효율적으로 관리할 수 있습니다.

  2. 메모리 효율성: Shader Visible Heap은 제한된 공간을 가지고 있으며, 자주 변경되는 정보를 효율적으로 처리하기 위해 복사를 통한 관리를 할 때 유용합니다. 시스템 메모리와 VRAM 간의 효율적인 사용을 도모할 수 있습니다.

  3. 데이터의 일관성 유지: 많은 디스크립터 세트를 관리할 때, 임시로 비가시적인 Heap에서 데이터를 준비하고 안정성을 확보한 뒤 Shader Visible Heap으로 복사하는 방식은 안정적인 운영을 보장하는 전략 중 하나입니다.

유사한 질문 & 답변 링크:

  1. 디버깅 할 때 훨씬 직관적입니다. 이유가 따로 있나요? - DirectX 객체 사용 시 메모리 관리에 대한 기초적인 정보를 얻을 수 있습니다.
  2. Comptr를 사용하는 대신 raw pointer를 사용할 이유가 있나요? - 메모리 관리 전략에 대한 유익한 정보를 참고할 수 있습니다.

위 두 링크도 참고하시면 더 깊이 있는 이해가 가능하실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

허종문님의 프로필 이미지
허종문

작성한 질문수

질문하기