프로그래머
C++,x86/x64 ASM, DirectX9/11/12, Metal, OpenGL, CUDA, win32, winsock/bsd socket
Blog : https://megayuchi.com
Youtube : https://youtube.com/megayuchi
LinkedIn : https://www.linkedin.com/in/megayuchi/
강의
수강평
- D3D12 프로그래밍 - 기초편
게시글
질문&답변
질문있습니다.
안녕하세요 유영천입니다. 놀랍게도 ai가 답변한 내용이 맞습니다. 말이 좀 이상하지만 어쨌든 맞긴 맞습니다. -_-1번 질문)바깥에서 디스크립터를 설정(CopyDescriptorSimple등을 이용)하지 않아도 쉐이더에서 해당 리소스를 억세스 하지 않는 이상,D3D런타임이나 쉐이더 코드는 그 위치(b0, t0등)의 디스크립터가 설정이되어있는지조차 알지 못합니다. 만일 이렇게 설정을 하지 않은 상태에서 쉐이더 코드에서 해당 위치(b0, t0등)를 억세스 할 경우에는 gpu쪽에서 크래시하게 됩니다.어쨌든 쉐이더 코드에서 정말 사용하지 않는다면 문제 없습니다. 2) RootSignature를 전달하는 이유 자체가 해당 주소로부터 순서대로 억세스하기 위함입니다. 따라서 시작 위치와 개수를 알면 중간 원소들에 대해선 별도의 바인딩이 필요없는것이죠. 쉐이더코드 RootSignature에 적혀있는대로 시작 위치와 개수만을 무조건 믿고 처리합니다.질문하신대로 RootSignature에서 총 10개의 레지스터를 사용하고 있다면(디스크립터 10칸) 추가되는 draw코드에선 10칸만큼(10 x DescriptorSize) 이동한 descriptor handle을 전달하면 됩니다.
- 0
- 2
- 289
질문&답변
소스코드
확인이 늦어서 죄송합니다. 강의노트에 소스코드 주소를 추가했습니다.여기서 받으시면 됩니다.https://github.com/megayuchi/DebuggingTip
- 1
- 2
- 121
질문&답변
Descriptor를 복사하는 이유
non shader visible heap을 사용하는 이유는 해당 텍스처를 여러 렌더링 상황에서 공유해서 사용하기 위함입니다. draw할때 입력된 인자에 따라 텍스처를 바꿔가면서 렌더링 한다고 가정해봅시다.shader visible 속성의 heap에 텍스처의 디스크립터를 만들게 되면 이 디스크립터는 카피가 불가능하므로 각각의 텍스처가 세팅된 디스크립터 테이블을 미리 여러 벌 만들어둬야 합니다.non shader visible 속성의 heap에 텍스처 디스크립터를 만들면 이 디스크립터는 어떤 shader visible descriptor 테이블에도 카피가 가능하므로 미리 여러벌의 desriptor table을 만들어둘 필요없이 실시간으로 텍스처를 바꿔가며 렌더링 할 수 있습니다.
- 0
- 2
- 165
질문&답변
코드에 대한질문있습니다.
IDXGIAdapter::GetDesc()함수를 사용하면 Device ID를 얻을 수 있습니다.RTX4090의 Device ID를 얻어서 다음과 같이 비교해서 4090이 아니면 스킵시키면 됩니다.내부 코드로는 이 정도로 충분하고 배포를 한다면 그래픽 카드를 선택할 수 있는 옵션을 주는게 좋겠죠.#define DEVICE_ID_RTX4090 XXXXXX...DXGI_ADAPTER_DESC desc;pAdapter->GetDesc(&adapterDesc);if (DEVICE_ID_RTX4090 != adapterDesc.DeviceId){ continue;}
- 0
- 2
- 128
질문&답변
Comptr 을 안쓸시 메모리 해제순서
d3ddevice에서 생성한 객체부터 먼저 해제하고 d3ddevice는 가장 나중에 해제하는게 기본입니다. 디버깅과 정확한 테스트를 위해서 d3d뿐 아니라 모든 com객체는 생성순서의 역순으로 해제하는게 좋습니다.
- 0
- 2
- 154
질문&답변
raw pointer 쓰시는 이유가 따로 있으신가요?
디버깅 할 때 훨씬 직관적입니다. 이게 가장 중요한 이유입니다.빌드가 빠릅니다.코드사이즈가 작게 나옵니다.런타임 속도가 더 빠릅니다. 그리고 기본적으로 예제코드는 최대한 캡슐화를 배제하고 날것으로 노출합니다. 이쪽이 코드를 분석하기 편합니다.
- 0
- 1
- 241