강의

멘토링

커뮤니티

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

pakheae님의 프로필 이미지
pakheae

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

질문있습니다.

작성

·

152

·

수정됨

0

질문1)

 

D3D12_DESCRIPTOR_RANGE ranges[2] =

{

{ D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND }, // b0 ~ b4

{ D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND } // t0 ~ t4

};

 

CD3DX12_ROOT_PARAMETER rootParameters[1] = {};

rootParameters[0].InitAsDescriptorTable(_countof(ranges), ranges, D3D12_SHADER_VISIBILITY_ALL);

 

와 같이 루트시그니처에서 테이블의 사용범위를 넓게잡아두고

사용할때만 Shader 에서 buffer를 정의 ( ex :cbuffer WVP: register(b0 )해서

사용해주고있는데 테이블힙의 메모리 낭비를 제외하면 성능에 큰 악영향이 있을까요?

런타임에 터지거나 하는 오류는 현재 없는데 궁금해서 여쭤봅니다.

 

질문2)제목 없음.png제가 이해한게 맞나 궁금해서 질문드립니다.

질문1의 방식처럼 rootSignature 를 만들었다고 하였을때 ,

SetGraphicsRootDescriptorTable 함수인자에 핸들값을 넣을때

RootSignature 에서는 b0~b5 ,t0~t5 의 총10개를 사용한다고 서명했기떄문에 ,

DX에서 읽을때 10개단위로 읽어주기 때문에 선두에 있는 handle 값만 넣어주는 방식이 맞나요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

pakheae님의 질문에 답변드리겠습니다.

질문1) 루트 시그니처에서 데스크립터 테이블의 사용 범위를 넓게 잡아 두고 실제 사용 시에만 쉐이더에서 버퍼를 정의하여 사용하는 경우, 테이블 힙의 메모리 낭비는 있을 수 있지만, 실제 성능에 미치는 악영향은 크지 않습니다. 다만, 루트 시그니처와 데스크립터 테이블을 효율적으로 설계하여 사용하는 것이 좋으며, 이는 메모리 사용 최적화와 관리 측면에서 이점을 줄 수 있습니다.

질문2) 제공하신 이미지와 내용에 따르면, SetGraphicsRootDescriptorTable 함수의 인자로 핸들 값을 넣을 때, RootSignature에서 선언한 f b0~b5, t0~t5까지 총 10개의 데스크립터를 사용한다고 가정했을 때, DX는 이를 10개 단위로 읽어 들이는 방식이 맞습니다. 이때 선두에 있는 핸들 값을 기준으로 연속된 메모리 블록을 참조하여 필요한 정보를 가져오게 됩니다. 이미지 설명을 바탕으로 한 설명이 정확하게 해당 사핞을 이해하셨습니다.

도움이 되었기를 바랍니다. 추가적인 질문이나 궁금하신 점이 있으시다면 언제든지 문의해 주세요.

pakheae님의 프로필 이미지
pakheae

작성한 질문수

질문하기