1+ <!DOCTYPE html>
2+ < html >
3+ < head >
4+ < title > Vulkan Tutorial</ title >
5+
6+ < meta name ="description " content ="A tutorial for using the Vulkan graphics and compute API " />
7+ < meta name ="author " content ="Alexander Overvoorde " />
8+ < meta name ="keywords " content ="vulkan, tutorial, guide, info, help, glnext, khronos, spir-v " />
9+
10+ < link rel ="shortcut icon " type ="image/png " href ="favicon.png "/>
11+
12+ < link rel ="stylesheet " href ="main.css " />
13+ </ head >
14+
15+ < body >
16+ < header >
17+ < img src ="logo.png " alt ="Vulkan logo " />
18+ </ header >
19+
20+ < article >
21+ < aside >
22+ This website is a work in progress and will be updated
23+ continuously as more info is released.
24+ </ aside >
25+
26+ < h1 > Overview</ h1 >
27+
28+ Vulkan is a new open standard API by Khronos that offers low-level
29+ control of GPUs for graphics and general purpose computation. It has
30+ been designed from the ground up around the capabilities of modern
31+ hardware.
32+
33+ < ul class ="features ">
34+ < li >
35+ < h2 > Direct GPU control with minimal driver overhead</ h2 >
36+
37+ < p >
38+ For example, data is written directly to GPU memory
39+ instead of using calls equivalent to glUniform.
40+ Applications can implement their own memory allocation
41+ strategies. (< a href ="http://blog.imgtec.com/powervr/trying-out-the-new-vulkan-graphics-api-on-powervr-gpus "> Source</ a > )
42+ </ p >
43+
44+ < p >
45+ Another feature is the < em > render pass</ em > , which
46+ offers control over loading of render targets at the
47+ start and end of renders, which is very useful for
48+ tiling architectures.
49+ </ p >
50+ </ li >
51+ < li >
52+ < h2 > Multi-threading friendly architecture</ h2 >
53+
54+ < p >
55+ Multiple threads can create and populate command buffers
56+ at the same time, which can then be submitted to the GPU
57+ by a separate thread.
58+ </ p >
59+ </ li >
60+ < li >
61+ < h2 > Unified API for desktop, mobile and embedded platforms</ h2 >
62+
63+ < p >
64+ There is no equivalent of OpenGL ES, Vulkan offers the
65+ same API on all platforms.
66+ </ p >
67+ </ li >
68+ < li >
69+ < h2 > Intermediate bytecode for shaders</ h2 >
70+
71+ < p >
72+ The driver accepts shaders in the < a href ="https://www.khronos.org/registry/spir-v/specs/1.0/SPIRV.pdf "> SPIR-V</ a > bytecode
73+ format. Khronos will supply a separate compiler for GLSL
74+ that targets this intermediate format. Third-party
75+ developers will be able to write their own compilers for
76+ other languages.
77+ </ p >
78+ </ li >
79+ </ ul >
80+
81+ All of these features lead to simpler drivers, more predictable
82+ performance, more control and less differences between vendor
83+ implementations. (< a href ="https://www.khronos.org/vulkan "> Source</ a > )
84+
85+ < h1 > API</ h1 >
86+
87+ Not much is known about the API yet, but the blog post linked above
88+ offers some insight. API calls have the < code > vk</ code > prefix and
89+ functions take the state that they will change as their first
90+ parameter.
91+
92+ < pre >
93+ vkCmdBindDescriptorSet(cmdBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, textureDescriptorSet[0], 0);
94+ vkQueueSubmit(graphicsQueue, 1, &cmdBuffer, 0, 0, fence);
95+ vkMapMemory(staticUniformBufferMemory, 0, (void **)&data);
96+ // ...
97+ vkUnmapMemory(staticUniformBufferMemory);
98+ </ pre >
99+
100+ All hardware that supports OpenGL ES 3.1 or later can also support
101+ Vulkan.
102+
103+ < h1 > Tools</ h1 >
104+
105+ Valve, LunarG, Codeplay and other parties are already developing
106+ tools. Displayed below is a screenshot of the Vulkan debugger being
107+ developed by Valve and LunarG.
108+
109+ < p > < img src ="debugger.png " /> </ p >
110+
111+ Khronos has announced that these utilities will be available at the
112+ same time as the first drivers. (< a href ="https://www.khronos.org/assets/uploads/developers/library/overview/2015_vulkan_v1_Overview.pdf "> Source</ a > )
113+
114+ < h1 > Demo</ h1 >
115+
116+ < a href ="http://imgtec.com/ "> Imagination Technologies</ a > has
117+ developed a proof-of-concept driver for Vulkan for their PowerVR
118+ GPUs. They have ported an OpenGL ES 3.0 demo to Vulkan.
119+
120+ < p >
121+ < iframe width ="700 " height ="394 " src ="https://www.youtube.com/embed/KdnRI0nquKc " frameborder ="0 " allowfullscreen > </ iframe >
122+ </ p >
123+ </ article >
124+
125+ < a href ="https://github.com/Overv/VulkanTutorial "> < img style ="position: absolute; top: 0; left: 0; border: 0; " src ="https://camo.githubusercontent.com/567c3a48d796e2fc06ea80409cc9dd82bf714434/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f6461726b626c75655f3132313632312e706e67 " alt ="Fork me on GitHub " data-canonical-src ="https://s3.amazonaws.com/github/ribbons/forkme_left_darkblue_121621.png "> </ a >
126+
127+ < script >
128+ ( function ( i , s , o , g , r , a , m ) { i [ 'GoogleAnalyticsObject' ] = r ; i [ r ] = i [ r ] || function ( ) {
129+ ( i [ r ] . q = i [ r ] . q || [ ] ) . push ( arguments ) } , i [ r ] . l = 1 * new Date ( ) ; a = s . createElement ( o ) ,
130+ m = s . getElementsByTagName ( o ) [ 0 ] ; a . async = 1 ; a . src = g ; m . parentNode . insertBefore ( a , m )
131+ } ) ( window , document , 'script' , '//www.google-analytics.com/analytics.js' , 'ga' ) ;
132+
133+ ga ( 'create' , 'UA-60335079-1' , 'auto' ) ;
134+ ga ( 'send' , 'pageview' ) ;
135+ </ script >
136+ </ body >
137+ </ html >
0 commit comments