Vulkan Tutorial

Total Page:16

File Type:pdf, Size:1020Kb

Vulkan Tutorial Vulkan Tutorial Alexander Overvoorde August 2018 Contents 1 Introduction 7 About....................................7 E-book....................................8 Tutorial structure . .8 2 Overview 10 Origin of Vulkan . 10 What it takes to draw a triangle . 11 Step 1 - Instance and physical device selection . 11 Step 2 - Logical device and queue families . 11 Step 3 - Window surface and swap chain . 12 Step 4 - Image views and framebuffers . 12 Step 5 - Render passes . 12 Step 6 - Graphics pipeline . 13 Step 7 - Command pools and command buffers . 13 Step 8 - Main loop . 14 Summary . 14 API concepts . 15 Coding conventions . 15 Validation layers . 15 3 Development environment 17 Windows . 17 Vulkan SDK . 17 GLFW . 19 GLM.................................. 19 Setting up Visual Studio . 21 Linux .................................... 27 Vulkan SDK . 27 GLFW . 28 GLM.................................. 30 Setting up a makefile project . 30 MacOS . 34 Vulkan SDK . 34 1 GLFW . 34 GLM.................................. 36 Setting up Xcode . 36 4 Base code 42 General structure . 42 Resource management . 44 Integrating GLFW . 44 5 Instance 47 Creating an instance . 47 Checking for extension support . 49 Cleaning up . 50 6 Validation layers 51 What are validation layers? . 51 Using validation layers . 52 Message callback . 54 Configuration . 60 7 Physical devices and queue families 61 Selecting a physical device . 61 Base device suitability checks . 63 Queue families . 65 8 Logical device and queues 67 Introduction . 67 Specifying the queues to be created . 68 Specifying used device features . 68 Creating the logical device . 68 Retrieving queue handles . 70 9 Window surface 71 Window surface creation . 71 Querying for presentation support . 73 Creating the presentation queue . 74 10 Swap chain 76 Checking for swap chain support . 76 Querying details of swap chain support . 78 Choosing the right settings for the swap chain . 80 Surface format . 80 Presentation mode . 82 Swap extent . 83 Creating the swap chain . 84 Retrieving the swap chain images . 88 2 11 Image views 90 12 Introduction 93 13 Shader modules 97 Vertex shader . 98 Fragment shader . 100 Per-vertex colors . 101 Compiling the shaders . 102 Loading a shader . 104 Creating shader modules . 105 Shader stage creation . 106 14 Fixed functions 108 Vertex input . 108 Input assembly . 109 Viewports and scissors . 109 Rasterizer . 111 Multisampling . 112 Depth and stencil testing . 113 Color blending . 113 Dynamic state . 115 Pipeline layout . 116 Conclusion . 116 15 Render passes 118 Setup . 118 Attachment description . 119 Subpasses and attachment references . 120 Render pass . 121 16 Conclusion 123 17 Framebuffers 126 18 Command buffers 129 Command pools . 129 Command buffer allocation . 131 Starting command buffer recording . 132 Starting a render pass . 133 Basic drawing commands . 134 Finishing up . 135 19 Rendering and presentation 136 Setup . 136 Synchronization . 136 Semaphores . 137 3 Acquiring an image from the swap chain . 138 Submitting the command buffer . 139 Subpass dependencies . 140 Presentation . 141 Frames in flight . 144 Conclusion . 149 20 Swap chain recreation 150 Introduction . 150 Recreating the swap chain . 150 Suboptimal or out-of-date swap chain . 153 Handling resizes explicitly . 155 Handling minimization . 156 21 Vertex input description 157 Introduction . 157 Vertex shader . 157 Vertex data . 158 Binding descriptions . 159 Attribute descriptions . 159 Pipeline vertex input . 161 22 Vertex buffer creation 162 Introduction . 162 Buffer creation . 162 Memory requirements . 164 Memory allocation . 166 Filling the vertex buffer . 167 Binding the vertex buffer . 168 23 Staging buffer 171 Introduction . 171 Transfer queue . 171 Abstracting buffer creation . 172 Using a staging buffer . 173 Conclusion . ..
Recommended publications
  • Multithreaded Rendering for Cross-Platform 3D Visualization Based on Vulkan Api
    The International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences, Volume XLIV-4/W1-2020, 2020 3rd BIM/GIS Integration Workshop and 15th 3D GeoInfo Conference, 7–11 September 2020, London, UK MULTITHREADED RENDERING FOR CROSS-PLATFORM 3D VISUALIZATION BASED ON VULKAN API C. Ioannidis, A.-M. Boutsi* Laboratory of Photogrammetry, School of Rural and Surveying Engineering, National Technical University of Athens, Greece; [email protected], [email protected] KEY WORDS: Computer graphics, 3D visualization, graphics API, Vulkan, geospatial data ABSTRACT: The visualization of large-sized 3D geospatial models is a graphics intensive task. With ever increasing size and complexity, more computing resources are needed to attain speed and visual quality. Exploiting the parallelism and the multi-core performance of the Graphics Processing Unit (GPU), a cross-platform 3D viewer is developed based on the Vulkan API and modern C++. The proposed prototype aims at the visualization of a textured 3D mesh of the Cultural Heritage by enabling a multi-threaded rendering pipeline. The rendering workload is distributed across many CPU threads by recording multiple command buffers in parallel and coordinating the host and the GPU rendering phases. To ensure efficient multi-threading behavior and a minimum overhead, synchronization primitives are exploiting for ordering the execution of queues and command buffers. Furthermore, push-constants are used to send uniform data to the GPU and render passes to adapt to the tile-based rendering of the mobile devices. The proposed methodology and technical solution are designed, implemented and tested for Windows, MacOS and Android on Vulkan-compatible GPU hardware by compiling the same codebase.
    [Show full text]
  • 3.2.1 Opengl Context and Window Creation
    OpenGL Context and Window Stefano Markidis and Sergio Rivas-Gomez Four Key-points • OpenGL does not include window creation and management. You will need separate libraries to manage the windows • As window creation and management, we suggest that you use either GLUT/FreeGLUT or GLFW • GLUT/FreeGLUT are easy to use and likely already installed on your systems, GLFW is the future but you need to install it • When using OpenGL, it is better to install and use a library for OpenGL function pointer management. We will install and use GLAD OpenGL Initialization … Without OpenGL! • We initialize OpenGL, by creating an OpenGL context, which is essentially a state machine that stores all data related to the rendering of our application. • Problem: Creating a window and an OpenGL context is not part of the OpenGL specification. • The reason that this is done differently on different platforms and OpenGL can’t guarantee portability. • There are libraries, not included in OpenGL, out there that supports window creation and management. Typical Program Flow with Window Management Libraries Every application making use of real-time graphics will have a program flow that comes down to this render loop Suggested Libraries to Create/Manage Windows • GLUT: OpenGL Utility Toolkit (GLUT) library • Easiest to use • Already installed on lab machines and likely on your laptop. • Not designed for core-profile OpenGL • Free-GLUT newly developed version of GLUT, supported and new license type • GLFW: • Little more difficult to use than GLUT • Most modern and best integration with modern OpenGL. • It doesn’t support deprecated immediate-mode legacy OpenGL Create a Window with GLUT / Free GLUT • We first initialize window with glutInit, glutInitWindowSize(), glutCreateWindow() • We tell GLUT what is the function responsible for the rendering and define it.
    [Show full text]
  • The State of Vulkan on Apple 03June 2021
    The State of Vulkan on Apple Devices Why you should be developing for the Apple ecosystem with Vulkan, and how to do it. Richard S. Wright Jr., LunarG June 3, 2021 If you are reading this, you likely already know what Vulkan is -- a low-overhead, high-performance, cross-platform, graphics and compute API designed to take maximum advantage of today's highly parallel and scalable graphics and compute hardware. To be sure, there are other APIs with this goal such as Microsoft’s DirectX and Apple’s Metal API. For a long time OpenGL matured to meet the needs of rapidly evolving hardware and met well the challenges of cross-platform development of high-performance graphics applications. OpenGL will remain viable for a very long time for many applications (and can actually be layered on top of Vulkan), but to take maximum advantage of modern hardware, a new and somewhat reinvented approach is called for. Everyone does not need the level of control that Vulkan provides, but if you do, you can think of Vulkan as a lower-level successor to OpenGL in that it attempts to enable highly portable, yet high-performance, application development across desktop and mobile device platforms. Writing platform specific code does have its advantages, and vendors such as Microsoft and Apple certainly adore having best of breed titles available exclusively for their customers as it adds value to their ecosystem. For developers though, it is often in our best interests to make our products available as widely as possible. Aside from gaming consoles with their mostly closed development environments, Windows, Linux, Apple, and Android combined represent most of the market for developers of end user software and games today.
    [Show full text]
  • Opengl! ! Where It fits! ! What It Contains! ! How You Work with It
    11(40) Information Coding / Computer Graphics, ISY, LiTH OpenGL! ! where it fits! ! what it contains! ! how you work with it 11(40) Information Coding / Computer Graphics, ISY, LiTH OpenGL! ! The cross-platform graphics library!! ! Open = Open specification! ! Runs everywhere - Linux, Mac, Windows...! ! Any language! ! Three branches:! ! OpenGL - ordinary computers! OpenGL ES - phones and tablets! WebGL - web browsers 12(40)12(40) Information Coding / Computer Graphics, ISY, LiTH OpenGL and Related APIs application program GLUT! GLX,! SDL! X, OSX, WGL,! GLFW GLU Win32 etc CGL,! NSOpenGL GL drivers, hardware 13(40)13(40) Information Coding / Computer Graphics, ISY, LiTH OpenGL parts:! ! GL = Graphics Library (core lib)! ! GLU = GL Utilities (no longer supported)! ! GLX, WGL, CGL, NSOpenGL = System dependent libraries! ! ! ! GLUT = GL Utility Toolkit (optional)! ! FreeGLUT, MicroGlut! ! Also note: SDL (Simple Directmedia Layer)! ! GLFW (similar to GLUT) 14(40)14(40) Information Coding / Computer Graphics, ISY, LiTH OpenGL versions OpenGL 1-2: Old OpenGL. Avoid! Big leap here! OpenGL 3.2 and up: Modern OpenGL! Latest version 4.5. Even hotter (but harder): Vulkan (released 2016) 15(40)15(40) Information Coding / Computer Graphics, ISY, LiTH Simple OpenGL example! ! A single triangle! ! • upload to the GPU once! ! • draw any time you want! ! but also! ! • upload shader to specify transformations and colors 16(40)16(40) Information Coding / Computer Graphics, ISY, LiTH Vital concepts! ! • VAO, VBO! ! • Vertex shader! ! • Fragment shader 17(40)17(40)
    [Show full text]
  • Advanced Graphics Opengl and Shaders I
    Advanced Graphics OpenGL and Shaders I 1 Alex Benton, University of Cambridge – [email protected] Supported in part by Google UK, Ltd 3D technologies today Java OpenGL ● Common, re-usable language; ● Open source with many well-designed implementations ● Steadily increasing popularity in ● Well-designed, old, and still evolving industry ● Fairly cross-platform ● Weak but evolving 3D support DirectX/Direct3d (Microsoft) C++ ● Microsoft™ only ● Long-established language ● Dependable updates ● Long history with OpenGL Mantle (AMD) ● Long history with DirectX ● Targeted at game developers ● Losing popularity in some fields (finance, web) but still strong in ● AMD-specific others (games, medical) Higher-level commercial libraries JavaScript ● RenderMan ● WebGL is surprisingly popular ● AutoDesk / SoftImage 2 OpenGL OpenGL is… A state-based renderer ● Hardware-independent ● many settings are configured ● Operating system independent before passing in data; rendering ● Vendor neutral behavior is modified by existing On many platforms state ● Great support on Windows, Mac, Accelerates common 3D graphics linux, etc operations ● Support for mobile devices with ● Clipping (for primitives) OpenGL ES ● Hidden-surface removal ● Android, iOS (but not (Z-buffering) Windows Phone) ● Texturing, alpha blending ● Android Wear watches! NURBS and other advanced ● Web support with WebGL primitives (GLUT) 3 Mobile GPUs ● OpenGL ES 1.0-3.2 ● A stripped-down version of OpenGL ● Removes functionality that is not strictly necessary on mobile devices (like recursion!) ● Devices ● iOS: iPad, iPhone, iPod Touch OpenGL ES 2.0 rendering (iOS) ● Android phones ● PlayStation 3, Nintendo 3DS, and more 4 WebGL ● JavaScript library for 3D rendering in a web browser ● Based on OpenGL ES 2.0 ● Many supporting JS libraries ● Even gwt, angular, dart..
    [Show full text]
  • GRAPHICS PROGRAMMING THEN and NOW How the Ways of Showing Pixels on Screen Have Changed
    Aatu Mikkonen GRAPHICS PROGRAMMING THEN AND NOW How the ways of showing pixels on screen have changed GRAPHICS PROGRAMMING THEN AND NOW How the ways of showing pixels on screen have changed Aatu Mikkonen Bachelor’s Thesis Spring 2021 Bachelor’s Degree of Information Tech- nology Oulu University of Applied Sciences ABSTRACT Oulu University of Applied Sciences Bachelor’s degree of Information technology Author(s): Aatu Mikkonen Title of the thesis: Graphics Programming Then and Now Thesis examiner(s): Kari Laitinen Term and year of thesis completion: Spring 2021 Pages: 20 Graphics programming is relatively unknown form of programming even though everyone uses its capabilities every day, e.g., writing documents, creating art on a computer and playing or creating video games. Graphics programming, at least in Finland, does not have much literature written for it. The purpose of this report is to examine how the graphics programming has evolved from the old times to modern times, and examine how the tools for writing graphics programming has changed. The author applied background knowledge learned in school and in free time about the research. The work was carried out by using the internet with search engines and online documentation searches. A variety of books, videos, articles and documentation pages were used as materials. The main results are a brief overview on the differences in graphics programming from the old times to modern times, descriptions on the areas graphics programming handles and a small example on the implementation of graphics program. Keywords: graphics, graphics programming, graphics history, api CONTENTS TERMINOLOGY AND ABBREVIATIONS .....................................................................................
    [Show full text]
  • P5 Documentation Release 0.7.0
    p5 Documentation Release 0.7.0 Abhik Pal Aug 31, 2020 Contents 1 Installation3 1.1 Prerequisites: Python...............................3 1.2 Prerequisites: GLFW...............................3 1.3 Installing p5...................................4 1.4 Troubleshooting.................................4 2 Tutorials7 2.1 Coordinate System and Shapes.........................7 2.2 Color....................................... 10 2.3 Objects...................................... 15 2.4 Interactivity.................................... 22 2.5 Typography.................................... 47 2.6 Strings and Drawing Text............................ 61 2.7 Arrays...................................... 77 2.8 Images and Pixels................................ 91 2.9 Curves...................................... 99 2.10 2D Transformations............................... 106 2.11 PShape...................................... 122 2.12 Data........................................ 131 2.13 Trigonometry Primer............................... 154 2.14 Two-dimensional Arrays............................. 158 2.15 Electronics.................................... 162 2.16 Network..................................... 184 2.17 Vector....................................... 191 3 Examples 221 3.1 Structure..................................... 221 3.2 Transform.................................... 227 3.3 Color....................................... 231 3.4 Arrays...................................... 236 3.5 Input....................................... 239 3.6 Form......................................
    [Show full text]
  • CSE 328 & 528 (Spring 2021) Recitation 01 --Opengl Tutorial
    CSE 328 & 528 (Spring 2021) Recitation 01 --OpenGL Tutorial Xi Han Department of Computer Science, Stony Brook University [email protected] Your TA & Assignment Info Introduction to OpenGL Contents OpenGL Environment Setup: CMake + GLFW + GLAD on ubuntu OpenGL Examples & Explanation Some Tips 2 Your TA: Xi Han Please reach me by email [email protected] Online Office Hours: Tu Th 20:00 – 22:00 via zoom: https://stonybrook.zoom.us/j/93231831459?pwd=cEZ1YVY4VjIvRUF Your TA vNE14WTVmdnVYQT09 Meeting ID: 932 3183 1459 Passcode: 670454 If you are coming, please email your TA in advance! 3 Please compress your assignment in a .zip file <your_sbuid>_pa1.zip and submit via Blackboard. Please include: A README file explaining what your files do, what functionalities you have implemented and what you have not, how to compile/run your program (including dependencies), and with any other information you would like to include. Assignments Your source code A Linux64 executable Please do NOT include: Temporary files, IDE-specific configuration files, etc. All assignments should be done using C/C++ and OpenGL. The build system of your program can be makefile or CMake. 4 Structure of your submission: <your_subid>_pa<x> ├── CMakeLists.txt ├── README.md ├── bin │ └── pa<x> Assignments ├── include │ ├── bar.h │ └── foo.h └── src ├── bar.cpp ├── foo.cpp └── main.cpp 5 Open Graphics Library (OpenGL) is mainly considered a 3D rendering API that we can use to manipulate graphics and images. Introduction to However, OpenGL by itself is NOT an API, but merely a standard OpenGL specification developed and maintained by www.khronos.org.
    [Show full text]
  • Getting Started with Opengl ES 3+ Programming
    Getting Started with OpenGL ES 3+ Programming Learn Modern OpenGL Basics Hans de Ruiter Getting Started with OpenGL ES 3+ Programming Hans de Ruiter Version 1.1 – 5 April 2017 Copyright © 2017 by Kea Sigma Delta Limited, all rights reserved. Distribute the Link, Not the Book It takes a lot of time and effort to produce resources like this, and we think it’s great when people find it useful and want to share. However, please share the following link instead of distributing (illegal) copies. That way they get a legitimate copy and we’re able to continue producing quality content: https://keasigmadelta.com/gles3-sdl2-tutorial We’ve done everything we can to make the contents of this book as accurate as possible. However, due to the complex nature of the topics and possible human error, we cannot guarantee absolute accuracy. Also, continual research and development means that things are ever changing. No liability is assumed for losses or damages due to the information provided. You are responsible for your own choices, actions, and results. 2 Table of Contents Introduction..............................................................................................................................................5 Who is this For?...................................................................................................................................5 Why OpenGL ES 3+ and SDL2?........................................................................................................5 How to Get the Most Out of These Tutorials......................................................................................6
    [Show full text]
  • Open Source Solutions for Multiplatfrom Graphics Programming
    Lappeenranta University of Technology Faculty of Industrial Engineering and Management Degree Program in Information Technology Master’s thesis Mikko Kaistinen OPEN SOURCE SOLUTIONS FOR MULTIPLATFROM GRAPHICS PROGRAMMING Examiners: Associate Professor Uolevi Nikula D.Sc. (Tech.) Jussi Kasurinen Supervisors: Associate Professor Jouni Ikonen D.Sc. (Tech.) Jussi Kasurinen ABSTRACT Lappeenranta University of Technology Faculty of Industrial Engineering and Management Degree Program in Information Technology Mikko Kaistinen Open source solutions for multiplatform graphics programming Master’s thesis 24.11.2015 59 page, 9 figures, 5 tables, 3 appendices Examiners: Associate Professor Uolevi Nikula D.Sc. (Tech.) Jussi Kasurinen Supervisors: Associate Professor Jouni Ikonen D.Sc. (Tech.) Jussi Kasurinen Keywords: OpenGL, WebGL, computer graphics New emerging technologies in the recent decade have brought new options to cross platform computer graphics development. This master thesis took a look for cross platform 3D graphics development possibilities. All platform dependent and non real time solutions were excluded. WebGL and two different OpenGL based solutions were assessed via demo application by using most recent development tools. In the results pros and cons of the each solutions were noted. ii TIIVISTELMÄ Lappeenrannan teknillinen yliopisto Tuotantotaloudellinen tiedekunta Tietotekniikan koulutusohjelma Mikko Kaistinen Avoimen lähdekoodin tarjoamat mahdollisuudet monialusta grafiikkaohjelmointiin Diplomityö 24.11.2015 59 sivua, 9 kuva,
    [Show full text]
  • KHRONOS GROUP Update to Web3d
    Update to Web3D Los Angeles, July 2019 Neil Trevett Khronos President NVIDIA VP Developer Ecosystems [email protected] | @neilt3d ® © Khronos Group 2019 © Khronos® Group Inc. 2019 - Page 1 Active Khronos Standards 3D Commerce Working Group Announced at SIGGRAPH! Khronos is an open, member-driven industry consortium developing royalty-free standards, to harness the power of silicon acceleration for demanding graphics rendering and computationally intensive applications © Khronos® Group Inc. 2019 - Page 2 Vulkan Explicit GPU Control Simpler drivers - application has the best knowledge for holistic optimization – no ‘driver magic’ Complex drivers Application cause overhead Single thread per context Explicit creation of API objects and inconsistent Application before usage – efficient, behavior across Memory allocation Multiple Front-end predictable execution vendors Thread management Explicit Synchronization Compilers Easier portability - no fighting High-level Driver GLSL, HLSL etc. Always active Multi-threaded generation with different vendor heuristics of command buffers error handling Abstraction Layered GPU Control Validation and debug layers Full GLSL Context management SPIR-V loaded only when needed preprocessor and Memory allocation pre-compiled shaders compiler in Full GLSL compiler SPIR-V intermediate language: Error detection driver Thin Driver Loadable debug and shading language flexibility Explicit GPU Control validation layers OpenGL vs. Unified API across mobile and OpenGL ES desktop platforms GPU GPU Multiple graphics, command and DMA queues A Graphics API A GPU API © Khronos® Group Inc. 2019 - Page 3 Pervasive Vulkan Major GPU Companies supporting Vulkan for Desktop and Mobile Platforms http://vulkan.gpuinfo.org/ Platforms Consoles Desktop Mobile (Android 7.0+) Media Players Virtual Reality Cloud Services Game Streaming Embedded Game Engines Croteam Serious Engine © Khronos® Group Inc.
    [Show full text]
  • GLFW Users Guide API Version 2.7 Page 1/40
    GLFW Users Guide API version 2.7 July 3, 2012 c 2002-2006 Marcus Geelnard c 2006-2010 Camilla Berglund Summary This document is a users guide for the GLFW API that gives a practical introduction to using GLFW. For a more detailed description of the GLFW API you should refer to the GLFW Reference Manual. Trademarks OpenGL and IRIX are registered trademarks of Silicon Graphics, Inc. Microsoft and Windows are registered trademarks of Microsoft Corporation. Mac OS is a registered trademark of Apple Computer, Inc. Linux is a registered trademark of Linus Torvalds. FreeBSD is a registered trademark of Wind River Systems, Inc. Solaris is a trademark of Sun Microsystems, Inc. UNIX is a registered trademark of The Open Group. X Window System is a trademark of The Open Group. POSIX is a trademark of IEEE. Truevision, TARGA and TGA are registered trademarks of Truevision, Inc. IBM is a registered trademark of IBM Corporation. All other trademarks mentioned in this document are the property of their respective owners. i Contents 1 Introduction 1 2 Getting Started 2 2.1 Including the GLFW header................................2 2.2 Initializing GLFW.....................................2 2.3 Opening An OpenGL Window...............................3 2.4 Using Keyboard Input....................................4 2.5 Putting It Together: A Minimal GLFW Application....................4 3 Window Operations7 3.1 Setting Window Properties.................................7 3.2 Getting Window Properties.................................9 3.3 Buffer Swapping...................................... 12 3.4 Querying Video Modes................................... 12 4 Input Handling 14 4.1 Event Polling........................................ 14 4.2 Keyboard Input....................................... 14 4.2.1 Key state...................................... 15 4.2.2 Character input..................................
    [Show full text]