해결된 질문
작성
·
135
0
안녕하세요?
Vulkan device를 통해 추상화함으로써 하드웨어 의존성을 벗어난다
-> 코드에서는 mDevice를 vkCreateDevice로 생성하는데요. Logical 한 자원이라는 말은 gpu가 여러개 있지만(예를 들어서 인텔 내장그래픽카드, amd그래픽카드가 설치됨) 각 그래픽카드 마다 vkDeviceCreateInfo를 동일하게 설정할 수 있다는 의미인가요? 동일하게 설정된 구조체로 vkCreateDevice에 넣어서 vulkan device를 만들면 pysical device는 인텔, amd로 각각 다르지만 logical device로는 똑같다는 의미일까요?
Queue Family는 그래픽카드에 queue가 여러개(강의에서는 graphics command processor, ace, dma 등)이 있다는 의미로 family이고, 큐라는 게 하드웨어 반도체 같은 건가요? 강의에서는 VK_QUEUE_GRAPHICS_BIT을 사용한 까닭은 graphics command processor라는 하드웨어 자원을 사용한다는 의미인가요?
답변 2
0
안녕하세요?
dlgmlals3님이 잘 답변해주셨습니다. 감사합니다.
제 답변을 남기면 아래와 같습니다.
먼저 vkCreateDevice로 VkDevice를 만들게 되면 인텔, 엔비디아, AMD에 상관 없이 동일한 디바이스로 생각하시면 됩니다. 좀 더 부연설명을 드리면 GPU A와 GPU B가 있다고 가정해 보겠습니다. GPU A는 특수한 기능이 있습니다. 이 경우 두 GPU를 VkPhysicalDevice로 얻어오면 디바이스의 속성이 다르게 됩니다. 왜냐하면 GPU A는 특수한 기능이 있기 때문이죠. 이때, 특수한 기능을 포기하고 VkDevice를 만들게 되면 GPU A에서 돌아가는 어플리케이션이 GPU B에서도 돌아갈 수 있게 되는 것입니다. 이렇게함으로써 하드웨어를 추상화 시키는 것이죠. 또 나중에 여러개의 GPU를 묶어서 사용할 수 있는데, Logical하게 GPU가 같다면 모든 GPU를 같은 GPU라고 생각하고 사용할 수 있는 것이죠.
그렇습니다. GPU에는 여러개의 Queue가 존재합니다. VK_QUEUE_GRAPHICS_BIT을 검사한 이유는 우리가 렌더링을 위해 기록한 커맨드를 처리할 수 있는 Queue를 선택하기 위함입니다.
감사합니다.
0
안녕하세요 지나가다가 글을 남깁니다.
1. 초기화 과정에서 물리 장치와 맵핑되는 Logical Device 미리 만들어 놓으면,
하드웨어 정보 없이도 생성해 놓은 logical device 통해 우리가
gpu의 명령을 내리기 쉽다는 의미인 것 같습니다.
계속 보시면 아시겠지만 많은 Api 파라메터에 logical device 가 들어갑니다.
c++ 클래스 인터페이스 추상화 의미와 동일 한것같네요
큐라는 것은 CPU 에서 GPU로 가는 연결 통로라고 보시면 됩니다. 추후에 커맨드버퍼를 만들어서 명령어를 큐를 통해 전송을 합니다.
큐도 종류가 있는데,
그래픽 비트가 체크가 되어있는 큐는 렌더링을 하는 명령어를 GPU로 전송할 수 있는 큐입니다.
삼각형 렌더링을 하기 위해 그래픽 비트가 마스킹된 큐를 사용하는 것입니다.
감사합니다!