⭐ Vulkan & CMake/Vulkan
[Vulkan] Vulkan Image View
[Vulkan] Vulkan Image View
2024.08.15Vulkan에서 Image View는 이미지 리소스에 접근하기 위한 객체다. 이미지 자체는 Vulkan에서 메모리에 저장된 데이터이지만, 이 데이터를 셰이더에서 사용할 수 있게 하려면 Image View가 필요하다. 목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Vulkan Image View Vulkan Image view란? 그래픽스 파이프라인은 Vulkan Image를 직접 접근할 수 없다. 그래픽스 파이프라인은 Vulkan Image view를 통해 Vulkan Image에 접근할 수 있다.Vulkan Image view는 Vulkan Image에 대한 인터페이스 역할을 한다. VkIma..
[Vulkan] Color Animation, Vulkan Semaphore
[Vulkan] Color Animation, Vulkan Semaphore
2024.08.14Vulkan의 세마포어(semaphore)는 GPU 간의 동기화를 관리하기 위해 사용되는 동기화 프리미티브다. Vulkan에서는 작업을 효율적으로 관리하기 위해 다양한 동기화 메커니즘을 제공하는데, 그중 하나가 세마포어다. Vulkan Semaphore은 주로 큐 간의 동기화에 사용되며, 여러 GPU 작업이 서로의 완료를 기다리도록 제어한다.. 목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Color Animation 렌더링 로직 현재 로직 현재의 렌더링 로직은 Vulkan Command buffer를 실시간으로 기록하지 않아 실시간 렌더링을 할 수 없다. 위의 로직은 단순히 Swapchai..
[Vulkan] Vulkan Pipeline barrier
[Vulkan] Vulkan Pipeline barrier
2024.08.08목차 Vulkan Pipeline barrier 잘못된 Vulkan Pipeline barrier 사용으로 인해 발생하는 문제 예시들 Vulkan Pipeline barrier란? Vulkan Pipeline barrier는 Pipeline stage 내에서 리소스 접근 순서, 리소스 상태 전환을 제어하는 동기화 메커니즘이다. Vulkan Pipeline barrier를 사용해서 Vulkan Image layout을 변경할 수 있다. VkImageMemoryBarrier 구조체 typedef struct VkImageMemoryBarrier { VkStructureType sType; const void* pNext; VkAccessFlags..
[Vulkan] Vulkan Image Layer
[Vulkan] Vulkan Image Layer
2024.08.08목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Vulkan Image LayerVulkan Image Layer을 배우는 주된 목적 중 하나는 Validation Error 해결 때문이다. 에러 메시지 에러 메시지VUID-vkCmdClearColorImage-imageLayout-01394: imageLayout must be VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL orVK_IMAGE_LAYOUT_GENERAL 해결 방안Image Layout을 이들 중 하나로 변경한 후에 vkCmdClearColorIm..
[Vulkan] Vulkan Fence
[Vulkan] Vulkan Fence
2024.08.07목차 Vulkan Fence Vulkan Fence를 사용하는 이유는? VUID-vkAcquireNextImageKHR-semaphore-01780: semaphore and fence must not both be equal to VK_NULL_HANDLE 위의 에러 메시지는, ' vkAcquireNextImageKHR 호출 시 Semaphore와 Fence 중 하나 이상이 VK_NULL_HANDLE이 아니어야 한다 '는 메시지다. Vulkan Fence를 사용하면 Validation Error를 해결할 수 있다. Vulkan Fence란? 작업의 완료를 Host(CPU)에서 확인할 수 있게 하는 동기화 객체다. Vulkan Fence는 두가지 상태, Signal 상태, Unsignal ..
[Vulkan] 화면에 색 출력하기
[Vulkan] 화면에 색 출력하기
2024.08.07목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! 화면에 색 출력하기 화면에 단색 출력하기 Vulkan Swapchain의 Vulkan Image를 단색으로 초기화한다.Command를 기록하기 위해 Vulkan Command buffer를 Recording 상태로 변경한다.Vulkan Swapchain의 Vulkan Image를 단색으로 클리어하는 Command를 기록한다.Vulkan Command buffer의 기록을 끝마친다. 상태는 Executable다.Vulkan Command buffer를 Vulkan Queue에 제출한다.제출된 Vulkan Command buffer가 처리될 때까지 기다린다..
[Vulkan] Command buffer
[Vulkan] Command buffer
2024.08.06목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Command buffer Command buffer란? Vulkan Command buffer는 Command를 기록하는데 사용되는 객체다.Command는 무언가를 그리거나 계산하기 위해 필요한 모든 행동을 의미한다. Vulkan Command buffer 생명 주기 Vulkan Command buffer는 내부적으로 생명 주기를 가지고 있다.초기 상태는 Initial이며, VkQueue에 제출하기 위해서는 Executable 상태여야 한다. Initial Command buffer가 할당되고 아직 어떠한 Command도 기록되지 않은 상태R..
[Vulkan] Command Pool
[Vulkan] Command Pool
2024.08.06목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Command Pool Vulkan Command pool이란? Vulkan Command buffer를 할당하고 관리하는 객체다.Vulkan Command pool은 특정 Queue family에 바인딩된다.Vulkan Command pool은 스레드 안정성이 보장되지 않아 스레드마다 생성해야 한다.Vulkan은 최대한 오버헤드를 줄이기 위해 설계되었다스레드 안정을 보장하는 것은 동기화 비용을 발생시키기 때문에, Vulkan의 경우 개발자가 명시적으로 Command Pool의 동기화를 직접 관리하게 했다. 이렇게 명시적으로 관리함으로써 더 효율적인..
[Vulkan] Command
[Vulkan] Command
2024.08.05목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Command Command란? Command는 ' 사용자가 컴퓨터에게 특정 작업을 수행하도록 지시하는 입력 '이다. glUseProgram(program);glBindVertexArray(vertexArray);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0)glBindVertexArray(0);glUseProgram(0);위의 코드는 OpenGL의 코드다. program을 사용하고 vertexArray를 바인딩하고 primitive를 드로우하고 있다.각 API의 호출이 GPU에게 특정 작업을 수행하도록 지..
[Vulkan] Vulkan Swapchain
[Vulkan] Vulkan Swapchain
2024.08.05목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Vulkan Swapchain Vulkan Swapchain이란? Vulkan Swapchain은 화면에 출력되는 버퍼를 관리하는 객체다.Vulkan Swapchain을 생성시, 화면 출력을 위한 컬러 스페이스, 이미지 포맷 등 다양한 옵션을 설정할 수 있다. 일련의 chain된 이미지가 있고 화면에 표시하기 위해 Swap한다.ex. GPU가 ImageB를 렌더링 하는 동안 ImageA를 사용자에게 보여준다. Vulkan Swapchain 생성 VkSwapchainCreateInfoKHR 구조체 typedef struct VkSwapchainCr..
[Vulkan] Vulkan Surface
[Vulkan] Vulkan Surface
2024.08.04Vulkan은 플랫폼에 구애받지 않는 API이기 때문에 자체적으로 윈도우 시스템과 직접 인터페이스할 수 없다. 화면에 결과를 제시하기 위해 Vulkan과 VK_KHR_surface 확장을 사용해야 한다. 목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! Vulkan Surface Vulkan Surface란? Vulkan Surface는 Window를 나타내는 객체다.Vulkan Surface를 통해 Window와 Window에 연결된 Display에 대한 정보를 얻을 수 있다. Android에서 Vulkan Surface 생성하기 위한 준비 Vulkan Surface를 생성하기 위해서는 Wind..
[Vulkan] 화면 출력을 위해 필요한 Vulkan Extension
[Vulkan] 화면 출력을 위해 필요한 Vulkan Extension
2024.08.04목차 인프런 삼각형님의 '삼각형의 실전! Vulkan 중급' 강의를 참고하였습니다. 😎 [삼각형의 실전! Vulkan 중급] 강의 들으러 가기! 화면 출력을 위해 필요한 Vulkan Extension 화면 출력 기능에 대한 Vulkan의 정책 대개 Graphics API를 사용해서 렌더링 결과를 화면에 출력하는 것이 일반적이다. ex. DirectX12, Metal 하지만 Vulkan 렌더링 결과를 화면에 출력하는 기능은 필수가 기능이 아닌 Extension으로 분류하고 있다. (원하지 않으면 안 그릴 수 있다.)렌더링 결과를 화면에 직접 출력할 필요가 없는 서버 사이드 렌더링이 대표적인 예다. ex. Stadia게임이 서버에 렌더링되고 결과가 사용자의 모니터로만 전송된다. Vulkan에서 렌더..