본문 바로가기

Vulkan14

5. Presentation And Synchronize ( Fence, Semaphore, Event ) 이번 챕터에서는 세마포어와 펜스를 살펴본다. 세마포어와 펜스를 활용하는 화면출력 (Presentation) 부분을 먼저 확인합니다.동기화를 적용할때, 더 큰 범위의 동기화를 사용하게 되면 최적화의 문제가 있다.예를 들어 큐와 큐의 동기화 할수있는 부분을 펜스를 사용하게 되면, cpu time을 낭비할 수 있다.그렇기에 적절한 동기화 방법을 선택해서 구현하자. 1. 표현 (Presentation)화면 출력할때 사용하는 단계 입니다.화면 출력은 3가지로 정의 된다.1) 화면에 표시할 이미지 인덱스 얻어오기2) 커맨드 버퍼 큐에 제출3) 이미지 인덱스 참조하여 이미지 출력  다음 화면 해당하는 이미지 인덱스 가져오기커맨드 버퍼가 색칠 작업에 사용할 프레젠테이션 이미지를 가져오고,타깃 프레젠테이션 이미지가 변경.. 2024. 6. 27.
4. Pipeline Barrier And Image Layout 파이프라인 배리어란 ?파이프 라인인 내부 장벽을 설치하여 장벽 전의 명령을 완료하는 동기화하는 메커니즘이다.함수 이름이 vkCmdPipelineBarrier 를 사용하여 일반적으로 파이프 라인 배리어 라고 불리고,이미지 레이아웃을 진행할때, 메모리를 동기화 하는데 사용을 해야 하기 때문에메모리 장벽이라고도 불린다.  메모리 장벽 (MemoryBarrier) 이란 ? 메모리 장벽은 데이터와 읽기와 쓰기를 동기화 하는데 도움이 된다. 메모리 장벽은 메모리 장벽 전 후 지정한 작업이 동기화 되도록 보장한다.즉 메모리 장벽을 삽입하면 메모리 지시를 실행하기 앞서 메모리 장벽이 실행되기 전메모리 작동이 완료 됐는지를 확인한다. 메모리 장벽 종류1) 전역 메모리 장벽 - 이 유형의 메모리 장벽은 모든 종류의 실행 .. 2024. 6. 24.
3. Command buffer 이전 챕터에서 스왑체인을 생성하고 스왑체인에 사용될 이미지와 이미지 뷰를 생성했었다.이번 시간에는 커맨드 버퍼와 풀에 대해서 알아보자. 0. 커맨드 풀과 버퍼 란 ?커맨드는 Vulkan API 명령어 들이며,커맨드 버퍼는 커맨드들이 레코딩이 되어 들어가는 공간이다.커맨드 풀에서 커맨드 버퍼를 관리를 하며, 커맨드 버퍼를 미리 생성해놓고 사용을 한다. 커맨드 풀을 통해서 커맨드 버퍼를 할당 받고, 연속된 커맨드를 커맨드 버퍼에 레코딩을 하며,커맨드 버퍼에서 꺼낸 커맨드를 실행을 함으로써 이미지에 렌더링 과정이 이루어진다.  커맨드 버퍼 라이프사이클  Initial 단계는 커맨더 버퍼를 할당한다.Begin 단계는 vkCmdBeginCommandBuffer() 실행, Recording 과정이 진행된다.End .. 2024. 6. 21.
2. Surface And SwapChain 서피스 란 ?Vulkan은 플랫폼에 구애 받지 않는 API이므로 자체적으로 윈도우 시스템과 직접 인터페이스 할 수 없습니다.Vulkan과 윈도우 시스템 간의 연결을 설정하여 결과를 화면에 표시하려면WSI (Window System Integration) 확장을 사용해야 합니다.이전 챕터 초기화 과정에서 VK_KHR_Surface, VK_KHR_android_surface  라이브러리를 인스턴스 기반 확장을 했습니다.아래에서 Surface를 생성해봅니다. 스왑 체인 이란 ?Vulkan에는 "기본 프레임 버퍼"라는 개념이 없으므로화면에 시각화하기 전에 렌더링할 버퍼를 소유할 인프라가 필요.이 인프라는 스왑 체인 으로 알려져 있으며 Vulkan에서 명시적으로 생성되어야 합니다.스왑 체인은 렌더링 결과를 플랫폼.. 2024. 6. 11.