vulkan tutorial - khronos group · 2016-11-04 · vulkan tutorial 2016 khronos seoul devu samsung...

212
Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer ([email protected]) Minwook Kim Senior Graphics Engineer ([email protected])

Upload: others

Post on 21-May-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Vulkan Tutorial2016 Khronos Seoul DevUSAMSUNG Electronics

Hyokuen Lee Senior Graphics Engineer ([email protected])

Minwook KimSenior Graphics Engineer ([email protected])

Page 2: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Who I am

• Graphics R&D Group, MCD, SAMSUNG Electronics.

• Hyokeun Lee([email protected])

Page 3: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

목차

• 소개

• 개발환경

• 초기화 (준비작업)

• 삼각형그리기

• 사각형그리기

• 회전및 3차원투영

• 텍스처입히기

• Standard Validation Layer

Page 4: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

소개

Vulkan

- Low CPU overhead, 멀티플랫폼지원하는 3D graphics, computing API

Page 5: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vulkan 특징

Low CPU Overhead

- 저수준 API 로써불필요한 CPU overhead 제거

출처: GDC 2015 Khronos Vulkan Session 자료

Page 6: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vulkan 특징

Multi-Core 효율성

- Multi-threading 기반 multi-command queue 방식으로병렬처리가능

Page 7: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vulkan 특징

Layer 구조

- 여러개의 layer 구조로구성되어있으며개발자가 layer 를선택, 추가하여

활성화가능

(API 최소한의부하를위해기본적인에러체크, 의존성체크등생략)

Page 8: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vulkan 특징

SPIR-V

- Standard Portable Intermediate Representation

- Binary shading language

- Run-time shader 컴파일이필요없으며미리컴파일된 shader 를사용

Page 9: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

개발환경

• 개발환경설치

• Vulkan SDK 빌드

• Visual Studio 환경설정

Page 10: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

개발환경설치

- Vulkan SDK 설치 (https://vulkan.lunarg.com/app/download )

- Cmake 설치 (https://cmake.org/download/ )

- Python 3 설치 (https://www.python.org/downloads/ )

- GLM library 설치 (http://glm.g-truc.net/0.9.8/index.html )

- Vulkan Graphic Driver 설치

: Nvdia (https://developer.nvidia.com/vulkan-driver )

: AMD (http://www.amd.com/en-us/innovations/software-

technologies/technologies-gaming/vulkan )

• 설치항목

Page 11: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vulkan SDK 빌드

- go to C:\VulkanSDK\1.0.17.0\glslang\build

: cmake –G “Visual Studio 14 Win64” ..

: project 를열어 Debug/Release x64 full build

- go to C:\VulkanSDK\1.0.17.0\spirv-tools\build

: cmake –G “Visual Studio 14 Win64” ..

: project 를열어 Debug/Release x64 full build

- go to C:\VulkanSDK\1.0.17.0\Samples\build

: cmake –G “Visual Studio 14 Win64” ..

: project 를열어 Debug/Release x64 full build

build 폴더는직접생성해야함

• Vulkan SDK 빌드 (Visual Studio 2015, 64-bit computer 기준)

Page 12: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Visual Studio 환경설정

• Vulkan / GLM header path 설정

Page 13: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Visual Studio 환경설정

• Vulkan library path 설정

Page 14: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Visual Studio 환경설정

• Vulkan library

Page 15: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

초기화 (준비작업)

• Instance

• Device (Physical Device / Logical Device)

• Queue / Queue Family

Page 16: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

API Naming Convention

Standard Prefixes

VK : Define / Vk : Type structure / vk : Function

p / PFN / pfn : 포인터및함수포인터

vkCmd : command buffer 에저장할 command

1) Type structure / 함수

VkSurfaceFormatKHR / vkDestorySurfaceKHR( )

2) Define

VK_KHR_mirror_clamp_to_edge / VK_EXT_debug_marker

Extension

Page 17: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Instance

Instance

- Vulkan 과 application 간 connection 역할수행

- 간단한 application 정보들과, instance layer, instance extension 정보들로구성

1) Enable instance layer / extension

- Instance layer 지원여부체크

- Instance extension 지원여부체크

2) Create instance

- Application 정보설정

- Instance layer / extension 정보설정

Creating an Instance

Page 18: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Instance

Page 19: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createInstance()

Page 20: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

checkError()

Page 21: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

destroyInstance()

Page 22: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Device

Physical Device

- Instance 를통하여 physical device 를선택

- System 내의사용가능한 GPU 를의미

- Vulkan 에서는사용가능한 GPU 중사용목적에따라여러개의 GPU 를

사용가능

- Physical device 를통하여 logical device 를생성

- Vulkan program 과 GPU 간의 logical connection

(Vulkan API 사용시 main handle)

- Physical device 로부터여러개의 logical device 생성가능

Logical Device

Page 23: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Queue / Queue Family

Queue

- Vulkan 에서는대부분의명령어를(drawing, texturing, memory transfer

등) command buffer 에저장하고 queue 에 submit 하여사용한다

- 서로다른 queue type 별로 queue family 구분

- 각각의 queue family 는특정명령어 type 을허용한다

예) drawing command 와 computing command 용 queue family 0

memory transfer 용 queue family 1

Queue Family

Page 24: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Physical Device

Selecting Physical Device

- 사용할 GPU 를선택

- Graphics 처리용으로 graphics queue family 지원 GPU 선택

1) System 내사용가능한 physical device(GPU) 열거

2) Graphics queue family 지원여부확인

- VK_QUEUE_GRAPHICS_BIT flag 체크

3) GPU 의 properties 및 features 체크

Page 25: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Physical Device

※ Physical device 는사용할 GPU 를선택하는

것이므로별도의 destroy 처리가필요없음

Page 26: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

selectPhysicalDevice()

Graphics queue family 지원여부확인

Page 27: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

isDeviceSuitable()

Graphics queue family 지원여부확인

Page 28: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

findQueueFamilies() #1

VK_QUEUE_GRAPHICS_BIT flag 가있는지확인

참고 : Present Queue Family 확장 version

Page 29: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Logical Device

Creating Logical Device

- Vulkan program 과 GPU 간의 logical connection

(Vulkan API 사용시 main handle)

- Logical device 생성과정

1) 사용할 queue 명시 (queue family 로부터생성)

2) 사용할 device extension 명시

3) 사용할 device feature 명시

4) Logical device 생성

Page 30: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Logical Device

Page 31: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createLogicalDevice()

- 사용할 Queue 정보

- 사용할 device extension 정보

- 사용할 device feature 정보

Logical device 생성시생성된

queue 의 handle 을얻어온다

Page 32: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

destroyLogicalDevice()

Page 33: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Who I am

• Graphics R&D Group, MCD, SAMSUNG Electronics.

• Minwook Kim([email protected])

Page 34: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

삼각형그리기

• Window System / Surface

• Present Queue

• Swapchain / Framebuffer

• Command Buffer

• Render Pass

• Graphics Pipeline

• Shader (SPIR-V)

• Swapchain Recreation

Page 35: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

삼각형그리기

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicsPipeline

Draw

Submit

0 1 N

Submit Submit

Page 36: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Window System / Surface

Window Surface

- Vulkan 은 platform 중립적(agnostic) API 이므로각 platform 의 window

system 에직접접근불가

- Rendering 된이미지를화면에표시하기위해 WSI (Window System

Integration) 사용

- Platform 별 rendering target surface 필요

- VK_KHR_surface

: Vulkan 과 window system 을연결해주는 WSI

- VK_KHR_win32_surface

: Win32 system 의 window 를사용할수있도록지원하는 extension

※ VK_KHR_xcb_surface(Linux) / VK_KHR_android_surface(android)

Device Extension for Presentation

Page 37: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Window System / Surface

Page 38: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Creating the Surface

Surface 생성

- VkSurfaceKHR surface 객체생성

- Platform 별로 VkSurfaceKHR 객체를생성하는별도의함수를사용

Win32 : vkCreateWin32SurfaceKHR( )

Android : vkCreateAndroidSurfaceKHR( )

Linux : vkCreateXcbSurfaceKHR( )

Page 39: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Creating the Surface

Page 40: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Present Queue

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicsPipeline

Draw

Submit

0 1 N

Submit Submit

Page 41: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Present Queue

Present Queue

- Vulkan 은화면에 rendering 결과를표시하기위하여 present queue 를사용

- Rendering 된 image 를 present queue 에 submit 하여 surface 에전달

Present Queue Family

- Graphics queue family 와동일한 queue 일수도, 아닐수도있음

- vkGetPhysicalDeviceSurfaceSupportKHR( ) 로 present queue family 체크

Page 42: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

findQueueFamilies() #2 참고 : Graphics Queue Family version

Page 43: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Swapchain

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicPipeline

Draw

Submit

0 1 N

Submit Submit

Swapchain ImageView

( VKImageView )

Swapchain ImageView

( VKImageView )

Swapchain ImageView

( VKImageView )

Framebuffer FramebufferFramebuffer

Page 44: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Swapchain

Swapchain

- 출력장치에연속으로표시할수있는하나이상의 image collection

- Refresh rate sync 에맞춰서 rendering 된결과들을화면에출력하는역할

- Swapchain 에연결된 image 에 graphics queue 에기록된 operation 들로

rendering 을수행하고 present queue 에 submit

Page 45: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Swapchain

Swapchain Image

- Swapchain 에연결되는실제 image resource

Swapchain Image View

- Swapchain 에대한추가적인 meta data

예) RGBA component , view type(2D/3D), surface format, mipmap , image

array …

Page 46: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Querying for Swapchain Support

Querying for Swapchain Support

- Swapchain 을만들기위해서 instance, device 정보외에 3 가지추가정보필요

1. Surface capabilities

2. Surface format

3. Presentation Mode

Page 47: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Choosing Swapchain Support 1/3

Surface Capabilities (VkSurfaceCapabilitiesKHR)

- Capability 값들중 extent 값을사용

- Surface capability 예시

Page 48: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Choosing Swapchain Support 2/3

Surface Format (VkSurfaceFormatKHR)

1) format (VkFormat)

- VK_FORMAT_B8G8R8A8_UNORM

2) colorSpace (VkColorSpaceKHR)

- VK_COLOR_SPACE_SRGB_NONLINEAR_KHR

Page 49: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Choosing Swapchain Support 3/3

Presentation Mode

- 화면에이미지를표시하는조건을설정

1) VK_PRESENT_MODE_IMMEDIATE_KHR

2) VK_PRESENT_MODE_FIFO_KHR (wait when queue full)

3) VK_PRESENT_MODE_FIFO_RELAXED_KHR (no wait when queue empty)

4) VK_PRESENT_MODE_MAILBOX_KHR (no wait when queue full)

Page 50: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Swapchain

Page 51: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createSwapchain() #1

Page 52: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createSwapchain() #2

Page 53: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createSwapchain() #3

destroySwapchain()

Page 54: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Swapchain Image View

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicPipeline

Draw

Submit

0 1 N

Submit Submit

Swapchain ImageView

( VKImageView )

Swapchain ImageView

( VKImageView )

Swapchain ImageView

( VKImageView )

Framebuffer FramebufferFramebuffer

Page 55: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Swapchain Image View

Page 56: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createImageViews()

Page 57: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Framebuffer

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicPipeline

Draw

Submit

0 1 N

Submit Submit

Swapchain ImageView

( VKImageView )

Swapchain ImageView

( VKImageView )

Swapchain ImageView

( VKImageView )

Framebuffer FramebufferFramebuffer

Page 58: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Framebuffer

Framebuffer

- Color, depth, stencil target 이되는 buffer

- 각 swapchain image view 를연결하여 frame buffer 를생성

Framebuffer 생성시필요한정보

- 연결할 swapchain image view (color, depth, stencil image view)

- Frame buffer attachment type 을명시한 render pass 객체

- 기타정보 (swapchain extent 정보, swapchain 개수등)

Page 59: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Framebuffer

Page 60: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createFramebuffers() / destroyFramebuffers()

Page 61: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Command Buffer

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicsPipeline

Draw

Submit

0 1 N

Submit Submit

Page 62: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Command Buffer

Command Buffer

- Vulkan 은명령어를 queue 에 submit 하여실행

- Command buffer 로묶어처리하여여러 CPU 에서 multi-thread 처리가가능

- Command buffer 에기록된 command 들은재사용가능

Command Pool

- Command buffer 를할당하기위하여 memory 를관리

- Command buffer 는 command pool 을통하여할당

Page 63: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Command Pool

Page 64: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createCommandPool() /

destroyCommandPool()

Page 65: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Command Buffer

※ Command buffer 는사용한 command pool

소멸시자동으로소멸되므로별도의 destroy

처리를할필요없음

Page 66: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createCommandBuffers()

Page 67: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Render Pass

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicsPipeline

Draw

Submit

0 1 N

Submit Submit

Page 68: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Render Pass

Render Pass

- Rendering 에사용될 framebuffer attachment type 에대해명시

: Framebuffer attachment 정보(color buffer, depth buffer, multisampling .. )

: Subpass 정보 (연속적인 rendering)

Render Pass 생성순서

1) Attachment description

2) Subpass description / dependency

3) Render pass create info

4) Render pass 생성

Page 69: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Render Pass

Page 70: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createRenderPass() #1

LOAD_OP_LOAD : LOAD_OP_CLEAR : LOAD_OP_DONT_CARE :

STORE_OP_STORE : STORE_OP_DONT_CARE :

Page 71: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createRenderPass() #2

Page 72: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Graphics Pipeline

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicsPipeline

Draw

Submit

0 1 N

Submit Submit

Page 73: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Graphics Pipeline

Graphics Pipeline

- 3차원이미지를 2차원 raster 이미지로

표현하기위한일련의단계

- Vulkan 은 graphics pipeline 의각단계를

명시적으로코드로작성

Input assemblerIndex , vertex

Buffer

Vertex Shader

Tessellation

Geometry Shader

Rasterization

Fragment Shader

Color BlendingFramebuffer

ViewPort / Scissor

Page 74: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Shader / SPIR-V

Vertex shader / Fragment shader

- GLSL 를 glslang complier 를통한변환

SPIR-V

- Pre-compiled bytecode format

- Intermediate language for parallel compute and graphics

- Vulkan 은 GL_KHR_vulkan_glsl extension 을따르는 GLSL shader 를 SPIR-V

로 compile 하여사용

Page 75: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Shader (shader.vert)

Vertex attributes

- coordinate

- color

참고 : Vertex buffer version

Page 76: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Fragment Shader (shader.frag)

Shader Compile

C:/VulkanSDK/1.0.17.0/Bin32/glslangValidator.exe –V shader.vert shader.frag

=> vert.spv / frag.spv

Page 77: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createShaderModule()

Page 78: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Graphics Pipeline

Page 79: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline() #1

Page 80: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Graphics Pipeline

Input assemblerIndex , vertex

Buffer

Vertex Shader

Tessellation

Geometry Shader

Rasterization

Fragment Shader

Color BlendingFramebuffer

Done

Done

Skip

Skip

ViewPort / Scissor

Page 81: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline() #2

Page 82: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline() #3

Page 83: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline() #4

Page 84: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline() #5

Page 85: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline() #6

Page 86: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Recording Command Buffer

ONE_TIME_SUBMIT_BIT

RENDER_PASS_CONTINUE_BIT

SIMULTANEOUS_USE_BIT커맨드버퍼재사용가능

BeginCommandBuffer

EndCommandBuffer

Begin RenderPass

End RenderPass

Bind GraphicsPipeline

Draw

Page 87: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

recordingCommandBuffers()

Page 88: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Recording Command Buffer

Page 89: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Drawing Frame

VkSurface (WSI)

Swapchain Image

Swapchain Image

Swapchain Image

PresentQueue

CMD BufferCMD BufferCMD Buffer

Submit

0 1 N

Submit Submit

vkAcquireNextImageKHR

vkQueueSubmit

vkQueuePresentKHR

1st Semaphore

2nd Semaphore

12

3

Page 90: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Semaphore

동기화객체

- Semaphore : Queue 내부또는 queue 간 command sync 처리

- Fence : CPU side 에서 GPU ready 를기다림 (일반적으로, GPU 동작과상관없이

program level 에서 queue 명령어의완료를체크하는데사용)

Semaphore

- Drawing 동작을처리하기위해두종류의 semaphore 를사용

1) Swapchain 의실제 image 를얻기위한 semaphore (Rendering 준비동작)

2) Rendering 이완료되었음을알리기위한 semaphore

Page 91: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Semaphore

Page 92: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createSemaphores() / destroySemaphores()

Page 93: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

drawFrame()

Page 94: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Swapchain Recreation

Swapchain Recreation

- Window surface 크기가바뀔때 swapchain 갱신필요

- 화면의회전, Pause/Resume, 확대/축소시에도 swapchain 갱신

Page 95: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Swapchain Recreation (화면크기변경)

Swapchain Dependency

- Window 변경 > Surface 변경 > Swapchain 갱신

- Surface format 변경 > Render pass 갱신

- Window/surface resolution 변경 > Buffer 갱신

(framebuffer/depth buffer/command buffer)

- Viewport, scissor 영역변경 > Graphics pipeline 갱신

Surface Changed Swapchain

Render Pass

Graphics Pipeline

Buffers

Page 96: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

reInitSwapchain()

Page 97: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createSwapchain()

Page 98: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy Recreate

Swapchain Recreation

Page 99: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

삼각형그리기

• Window System / Surface

• Present Queue

• Swapchain / Framebuffer

• Command Buffer

• Render Pass

• Graphics Pipeline

• Shader (SPIR-V)

• Swapchain Recreation

Page 100: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

사각형그리기

• Vertex Buffer

• Staging Buffer

• Index Buffer

Page 101: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Buffer

Vertex Buffer

- Vertex shader 에 vertex attribute 전달

(coordinate, color, texture coordinate 등)

Vertex Buffer 적용순서

- Vertex shader 수정

- Vertex data 정의

- Vertex binding description 설정

- Vertex attribute description 설정

- Vulkan graphics pipeline 에 vertex binding / attribute description 설정

- Vertex buffer 생성

- Vertex buffer 를이용하여 drawing

Page 102: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Shader 수정

Vertex Shader

- Vertex attribute 는 program(vertex buffer) 으로부터 vertex 단위데이터를

입력받음

- Vertex buffer 로부터 attribute 를전달받기위해서 “in” keyword 를사용

- Vertex shader 수정후 shader 재컴파일수행

Page 103: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Shader (shader.vert)

Vertex attributes

- coordinate

- color

참고 : Fixed version

Page 104: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Data 정의

Vertex Data

- GLM library 사용 (vector, matrix type 등의 linear algebra 사용)

※ GLM

shader 의 vector type (vec2, vec3 등) 과호환이가능한 C++ type 을제공

Page 105: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex data 정의

Page 106: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Binding/Attribute Description

Vertex Binding Description

- 데이터배열에서하나의데이터단위에대한정보전달

(instance rendering 의경우 instance 단위)

- VkVertexInputBindingDescription

Vertex Attribute Description

- 구성하는데이터(좌표, color 등)의 binding index, location, format, offset 정보

등을명시

- VkVertexInputAttributeDescription

Page 107: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Binding/Attribute Description

Page 108: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Vertex Data 정의

Page 109: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline()

Page 110: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Buffer 생성

Vulkan Buffer

- 임의의데이터를저장할수있는 GPU memory 공간

- 사용자가 memory 를명시적으로할당

Vertex Buffer 생성

1) Vertex buffer 생성

2) Memory requirement 확인

3) Memory 할당 (CPU accessible)

4) Vertex buffer 에 memory binding

5) Vertex buffer 에 vertex data 복사

Page 111: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Vertex Buffer 생성

Page 112: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createVertexBuffer()

Page 113: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

findMemoryType()

Page 114: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

destroyVertexBuffer()

Page 115: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Buffer 로그리기

Drawing with the Vulkan Buffer

- Drawing command 실행전, vertex buffer binding 수행

Page 116: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Vertex Buffer 로그리기

Page 117: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

recordCommandBuffers()

Page 118: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Staging Buffer

Memory 성능최적화

- CPU 접근가능한 vertex buffer → 성능에최적화 memory type 이아님

- 성능에최적화된 memory type : VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT

flag 속성 (CPU 접근불가)

Staging Buffer 사용

1) Staging buffer 생성 (GPU memory, CPU accessible)

2) Vertex data 를 staging buffer 에복사

3) Staging buffer 를최종 vertex buffer 에복사 (GPU memory, CPU not accessible)

Page 119: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createBuffer() / destroyBuffer()

Page 120: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

copyBuffer()

1 회용 command buffer 생성

command buffer submit /

1 회용 command buffer 정리

Buffer 복사

Page 121: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createVertexBuffer()

Page 122: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Index Buffer

Index 데이터

- Vertex data 만사용 → vertex 데이터중복문제

- Index 데이터를사용하여 vertex 데이터중복문제해결

Page 123: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Index data 정의

Page 124: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Index Buffer

Page 125: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createIndexBuffer()

Page 126: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

destroyIndexBuffer()

Page 127: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Index Buffer 로그리기

Page 128: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

recordCommandBuffers()

Page 129: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

사각형그리기

• Vertex Buffer

• Staging Buffer

• Index Buffer

Page 130: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

회전및 3차원투영

• Resource Descriptor

• Descriptor Set / Descriptor Set Layout

• Uniform Buffer Object (UBO)

Page 131: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Resource Descriptor

Resource Descriptor

- Vulkan 에서사용하는 resource 를명시

- Resource descriptor 를사용하여 shader 에서 buffer, image 등의 resource 를사용

대표적인 Resource Descriptor

- UBO (Uniform Buffer Object)

: Shader 변경없이 drawing time 에값전달

예) transformation matrix(vertex shader)

- Texture image

Page 132: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set / Descriptor Set Layout

Descriptor Set Layout

- Pipeline 에서, access 할 resource type 및 binding number, pipeline stage 정보

등을명시

Descriptor Pool

- 사용할 descriptor 객체수에대한정보를가짐

- Descriptor pool 로부터 descriptor set 객체를할당

Descriptor Set

- Resource descriptor 에 bound 될실제 resource 에대해서명시

- Descriptor set layout, descriptor pool 로부터생성

Page 133: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set / Descriptor Set Layout

Descriptor 사용순서

1) Graphics pipeline 생성이전 : descriptor set layout 생성

2) Graphics pipeline 생성시점 : descriptor set layout 명시

3) Graphics pipeline 생성이후 : uniform buffer object 및 descriptor

pool/descriptor set 생성

4) Rendering 시점 : descriptor binding

Page 134: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create

Descriptor set layout 생성

Uniform Buffer Object 생성

Descriptor pool / descriptor set 생성

Descriptor set binding

Descriptor set layout 명시

Resource Descriptor

Page 135: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Shader 수정

Vertex Shader

- Vertex shader 에 uniform 추가 (MVP matrix)

- gl_Position 에 MVP transformation 적용

(Model-View-Projection : 회전및 3 차원 projection)

Page 136: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vertex Shader (shader.vert)

Uniform (MVP matrix)

(binding = 0) : Descriptor set layout 에서

index 로참조

MVP transformation

Page 137: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Uniform Data 정의

Uniform Data

- GLM library 를사용하여 matrix type 사용

Page 138: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Uniform data 정의

Page 139: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set Layout 생성

Descriptor Set Layout

- 사용하려는 resource 의구성정보

예) binding 정보, resource type(uniform, texture 등), 사용시점(pipeline stage)

Descriptor Set Layout 생성순서

1) Resource type 별로 descriptor set layout binding 정보설정

(VkDescriptorSetLayoutBinding)

2) Descriptor set layout 생성정보설정 (VkDescriptorSetLayoutCreateInfo)

3) Descriptor set layout 생성

4) Graphics pipeline 에 descriptor set layout 정보설정

Page 140: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set Layout 생성

Page 141: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Set Layout 생성

Page 142: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDescriptorSetLayout()

destroyDescriptorSetLayout()

Page 143: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Set Layout 명시

Page 144: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline()

Page 145: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Uniform Buffer Object 생성

Uniform Buffer Object (UBO)

- 매 frame, uniform (MVP transformation) 정보갱신

- Vulkan buffer (VkBuffer) 를사용하여 program 에서 shader 로 uniform 전달

- Uniform buffer 생성과정은 vertex buffer, index buffer 생성과정과유사

▶매 frame 마다변경되는 uniform 값을 UBO 에복사하여 shader 에전달

Page 146: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Uniform Buffer Object 생성

Page 147: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createStagingUniformBuffer()

destroyStagingUniformBuffer()

Page 148: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createUniformBuffer()

destroyUniformBuffer()

Page 149: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

updateUniformBuffer() 매 frame 마다,

drawFrame() 이전에호출

Page 150: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline()

Invert Y-coordinate

Page 151: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Pool 생성

Descriptor Pool

- Resource type 별로 descriptor pool 을생성

- Descriptor type, descriptor 수등의정보를가지고생성

Page 152: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Pool 생성

Page 153: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDescriptorPool()

destroyDescriptorPool()

Page 154: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set 생성

Descriptor Set

- 준비된 descriptor set layout 및 descriptor pool 로부터 descriptor set 생성

- Descriptor set 생성후 buffer 를할당

Page 155: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Set 생성

※ Descriptor set 은 descriptor pool 소멸시

같이소멸되므로별도의 destroy 처리를할

필요없음

Page 156: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDescriptorSet()

Page 157: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set Binding

Descriptor Set Binding

- Rendering 시점에 descriptor set binding

- Render pass 내에서 drawing 명령어이전에 binding 명령어 submit

Page 158: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Set Binding

Page 159: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

recordCommandBuffers()

Page 160: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

회전및 3차원투영

• Resource Descriptor

• Descriptor Set / Descriptor Set Layout

• Uniform Buffer Object (UBO)

Page 161: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

텍스처입히기

• Texture Image

• Sampler

• Texture Descriptor Set

Page 162: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Fragment Shader 수정

Fragment Shader

- Program(vertex buffer) 으로부터 fragment 단위데이터를입력받음

- Texture 적용을위한 sampler 및 texture 좌표를전달

Page 163: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Fragment Shader (shader.frag)

Page 164: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture Data 정의

Vertex Data

- Vertex 데이터에 texture 좌표정보추가

Page 165: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture data 정의

Page 166: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture Image

Texture Image 생성

- Texture image 생성과정은 vertex buffer 생성과정과유사

: VkImage → Image 객체에대한 handle

: VkDeviceMemory → 실제 image 데이터를저장하고있는 memory 객체

Texture Image 생성순서

1) Image 파일로부터데이터를읽음

2) Texture image 객체생성

3) Image 파일로부터읽어온데이터를 texture image 객체에저장

Page 167: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture Image

Texture Image 와 Vertex buffer 생성비교

Page 168: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createImage()

Page 169: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

destroyImage()

Page 170: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

copyImage()

Page 171: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

beginSingleCommandBuffer() / endSingleCommandBuffer()

Page 172: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture Image

Image Layout

- Vulkan image 객체는사용할용도에따라최적화된 layout 을설정하여사용

- Image layout 변경시 barrier 객체를사용하여동기화

Pipeline barrier

- Resource 의 read/write 동기화에사용

- VK_SHARING_MODE_EXCLUSIVE 모드일때, Image layout transition, queue family

ownership transfer 등에도사용

- Image memory barrier (VkImageMemoryBarrier) : image layout transition 시사용

Buffer memory barrier (VkBufferMemoryBarrier) : buffer 동기화시사용

Page 173: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

transitionImageLayout() #1

Layout transition

Queue family ownership transfer

Page 174: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

transitionImageLayout() #2

Page 175: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Texture Image

Page 176: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createTextureImage() #1

Page 177: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createTextureImage() #2

Page 178: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createTextureImage() #3

Page 179: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture Image View

Image View

- Texture image 객체및추가적인정보를가지는객체

(Texture view type, format, mipmap, texture array 등의 추가정보저장)

- Texture image 객체대신 texture image view 객체를 handle 로사용한다

Page 180: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Texture Image View

Page 181: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createTextureImageView()

destroyTextureImageViews()

Page 182: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createImageView()

Page 183: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Sampler

Sampler

- Shader 는 sampler 객체를통해서 texture access

- Sampler 는 texture filter, mipmap, wrap mode 등에대한처리를지원

Page 184: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Sampler

Page 185: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createTextureSampler()

destroyTextureSampler()

Page 186: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Texture Descriptor Set

Texture Descriptor Set

- Texture image view 및 sampler 를 shader 에전달하기위해 descriptor set 사용

Descriptor 사용순서

1) Graphics pipeline 생성이전 : descriptor set layout 생성

2) Graphics pipeline 생성시점 : descriptor set layout 명시

3) Graphics pipeline 생성이후 : texture image view/sampler 및 descriptor

pool/descriptor set 생성

4) Rendering 시점 : descriptor binding

Page 187: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create

Descriptor set layout 생성

Texture image view / sampler 생성

Descriptor pool / descriptor set 생성

Descriptor set binding

Descriptor set layout 명시

Resource Descriptor

Page 188: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDescriptorSetLayout()

Page 189: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createGraphicsPipeline()

Page 190: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Pool 생성

Descriptor Pool

- 새로운 descriptor type (texture image)을 descriptor pool 에추가

Page 191: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Pool 생성

Page 192: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDescriptorPool()

Page 193: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set 생성

Descriptor Set

- Texture type 의

descriptor set 추가

Page 194: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Set 생성

※ Descriptor set 은 descriptor pool 소멸시같이

소멸되므로별도의 destroy 처리를할필요없음

Page 195: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDescriptorSet()

Page 196: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Descriptor Set Binding

Descriptor Set Binding

- Rendering 시점에 descriptor set binding

- Render pass 내에서 drawing 명령어이전에 binding 명령어 submit

Page 197: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Descriptor Set Binding

Page 198: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

recordCommandBuffers()

Page 199: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

텍스처입히기

• Texture Image

• Sampler

• Texture Descriptor Set

Page 200: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Standard Validation Layer 적용

Vulkan Design Concept

- Driver 에서처리해야하는일을최소화 (Minimal driver overhead)

- 사용자가명시적으로모든것을처리

- 기본적인 error check 최소화

- Vulkan API 를 hooking 하여여러부가적인기능및서비스를제공

- 일반적으로 debug mode 에서 enable, release mode 일때 disable 후배포

Validation Layer

Page 201: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Vulkan API Hooking Example

실제 vkCreateInstance( ) 를호출하기전에 error 체크를수행

실제 vkCreateInstance( ) 를호출뒤후처리수행

Page 202: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Standard Validation Layer

- LunarG Vulkan SDK 에 open source 로 standard validation layer 를제공

- 개발자들이별도의 customizing 된 validation layer 를개발, 제공할수있음

Page 203: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Instance 생성전에 validation layer 관련정보설정

→ Instance 생성시관련정보를전달

Standard Validation Layer 적용

Page 204: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

setupValidationLayers()

Instance 생성시전달할정보설정

- instance layer

- instance extension

- debug report callback 정보

Device Layer : deprecated (SDK ver. 1.0.13.0)

VK_EXT_debug_report

사용자정의 callback 함수

Page 205: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createInstance()

setupValidationLayers( ) 에서정보설정

- instance layer

- instance extension

- debug report callback 정보

Page 206: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

checkInstanceLayerSupport()

Page 207: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

checkInstanceExtensionSupport()

Page 208: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Debug Report Callback 설정

Debug Report Callback

- 활성화한 validation layer 에의해 error detection 된경우 error report 를

받도록별도로설정

Page 209: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

Create Destroy

Debug Report Callback 설정

Page 210: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

createDebugReportCallback() / destroyDebugReportCallback()

- Error report callback 함수는명시적으로생성/소멸처리해야한다

- vkCreateDebugReportCallbackEXT( ), vkDestoryDebugReportCallbackEXT( ) 함수사용

- 이함수들은 extension 함수이기때문에자동으로 loading 되지않으므로, vkGetInstanceProcAddr() 로함수

주소를가져와사용한다

Page 211: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

VulkanDebugCallback()

VkDebugReportCallbackCreateInfoEXT 에등록

Page 212: Vulkan Tutorial - Khronos Group · 2016-11-04 · Vulkan Tutorial 2016 Khronos Seoul DevU SAMSUNG Electronics Hyokuen Lee Senior Graphics Engineer (hk75.lee@samsung.com) Minwook Kim

Samsung Electronics

참고자료

• Vulkan API Specificationhttps://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html

• Vulkan SDK 에포함된 sample project build 방법https://www.youtube.com/watch?v=wHt5wcxIPcE (Tutorial 0)

• Vulkan Validation Layershttp://gpuopen.com/using-the-vulkan-validation-layers/