Visual Studio
[Graphics] DX12의 CreateCommittedResource() 와 같은 동작을 Vulkan에서 하려면? 본문
Graphics
[Graphics] DX12의 CreateCommittedResource() 와 같은 동작을 Vulkan에서 하려면?
emacser 2024. 12. 23. 17:27많은 DX12 예제에서 버퍼 등의 리소스를 생성할 때 ID3D12Device::CreateCommittedResource() 함수를 사용한다.
MS 문서를 보면, ID3D12Device::CreateCommittedResource() 함수는 생성될 리소스를 포함하는 크기의 암시적 힙(Implicit Heap)과 리소스를 생성한다고 되어있다.
Vulkan을 배웠을 때는 이렇게 메모리와 리소스 할당을 같이 해주는 함수의 도움 없이 직접 아래의 과정을 거쳤어야 했기 때문에, 이런것들이 모여서 DX12와 Vulkan의 난이도 차이를 만드는 구나... 라는 생각을 했었다. (물론 Vulkan의 높은 난이도의 주범은 파편화와 스케줄링이라고 알고 있다.)
(Buffer Resource 생성시)
1. vkCreateBuffer() 함수 호출로 버퍼 객체를 생성한다.
2. vkGetMemoryRequirements() 함수로 Buffer Resource를 담기 위해 갖춰야 할 메모리의 정보를 가져온다.
3. vkAllocateMemory로 Requirements로부터 가져온 정보(Size, Memory Type 등)를 바탕으로 메모리를 할당한다.
4. vkBindMemory로 버퍼 리소스를 메모리에 바인딩한다.
물론 DX12에서는 메모리 할당과 리소스 생성을 별개로 해줄 수 없는 것은 아니다.
힙을 미리 만들고 해당 힙에 리소스를 배치시키고 싶을 때는 ID3D12Device::CreatePlacedResource() 함수를 사용할 수 있다.
이 경우 CreateHeap() 함수로 먼저 Heap을 만들고 생성한 힙 객체의 포인터를 ID3D12Device::CreatePlacedResource() 함수에 넘겨주면 된다.
'Graphics' 카테고리의 다른 글
[DX12] D3D12Multithreading 예제 분석 (0) | 2024.12.22 |
---|---|
[Vulkan] Framebuffer의 재활용에 대하여 (0) | 2024.12.13 |
[Vulkan] Cubemap Texture 로드시 주의사항들 (0) | 2024.11.18 |
[Vulkan] Tangent, Bitangent, Normal 시각화 (0) | 2024.11.09 |
[Vulkan] Instanced Rendering 시에 Instance Buffer와 Storage Buffer의 성능 비교 (0) | 2024.10.23 |