강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của pakheae8814
pakheae8814

câu hỏi đã được viết

[Tuyển tập phát triển game MMORPG bằng C++ và Unreal] Phần 2: Toán học game và DirectX12

질문있습니다.

Viết

·

168

·

Đã chỉnh sửa

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 값만 넣어주는 방식이 맞나요?

directx게임수학

Câu trả lời 1

0

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

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

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

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

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

Hình ảnh hồ sơ của pakheae8814
pakheae8814

câu hỏi đã được viết

Đặt câu hỏi