1 <html devsite> 2 <head> 3 <title>Vulkan</title> 4 <meta name="project_path" value="/_project.yaml" /> 5 <meta name="book_path" value="/_book.yaml" /> 6 </head> 7 <body> 8 <!-- 9 Copyright 2017 The Android Open Source Project 10 11 Licensed under the Apache License, Version 2.0 (the "License"); 12 you may not use this file except in compliance with the License. 13 You may obtain a copy of the License at 14 15 http://www.apache.org/licenses/LICENSE-2.0 16 17 Unless required by applicable law or agreed to in writing, software 18 distributed under the License is distributed on an "AS IS" BASIS, 19 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 See the License for the specific language governing permissions and 21 limitations under the License. 22 --> 23 24 25 26 <p>Android 7.0 adds support for 27 <a href="https://www.khronos.org/vulkan/">Vulkan</a>, a low-overhead, 28 cross-platform API for high-performance 3D graphics. Like OpenGL ES, Vulkan 29 provides tools for creating high-quality, real-time graphics in applications. 30 Vulkan advantages include reductions in CPU overhead and support for the 31 <a href="https://www.khronos.org/spir">SPIR-V Binary Intermediate</a> language. 32 </p> 33 34 <p>System on chip vendors (SoCs) such as GPU Independent Hardware Vendors (IHVs) 35 can write Vulkan drivers for Android; OEMs simply need to integrate these 36 drivers for specific devices. For details on how a Vulkan driver interacts with 37 the system, how GPU-specific tools should be installed, and Android-specific 38 requirements, see <a href="/devices/graphics/implement-vulkan.html">Implementing 39 Vulkan.</a></p> 40 41 <p>Application developers can take advantage of Vulkan to create apps that 42 execute commands on the GPU with significantly reduced overhead. Vulkan also 43 provides a more direct mapping to the capabilities found in current graphics 44 hardware, minimizing opportunities for driver bugs and reducing developer 45 testing time (e.g. less time required to troubleshoot Vulkan bugs).</p> 46 47 <p>For general information on Vulkan, refer to the 48 <a href="http://khr.io/vulkanlaunchoverview">Vulkan Overview</a> or see the list 49 of <a href="#resources">Resources</a> below.</p> 50 51 <h2 id=vulkan_components>Vulkan components</h2> 52 <p>Vulkan support includes the following components:</p> 53 <p><img src="/devices/graphics/images/ape_graphics_vulkan.png"></p> 54 <p class=img-caption>Figure 1: Vulkan components</p> 55 56 <ul> 57 <li><strong>Vulkan Validation Layers</strong> (<em>provided in the Android 58 NDK</em>). A set of libraries used by developers during the development of 59 Vulkan apps. The Vulkan runtime library and the Vulkan driver from graphics 60 vendors do not contain runtime error-checking to keep Vulkan runtime efficient. 61 Instead, the validation libraries are used (only during development) to find 62 errors in an application's use of the Vulkan API. The Vulkan Validation 63 libraries are linked into the app during development and perform this error 64 checking. After all API usage issues are found, the aplication no longer needs 65 to include these libraries in the app.</li> 66 <li><strong>Vulkan Runtime </strong><em>(provided by Android)</em>. A native 67 library <code>(libvulkan.so</code>) that provides a new public native API 68 called <a href="https://www.khronos.org/vulkan">Vulkan</a>. Most functionality 69 is implemented by a driver provided by the GPU vendor; the runtime wraps the 70 driver, provides API interception capabilities (for debugging and other 71 developer tools), and manages the interaction between the driver and platform 72 dependencies such as BufferQueue.</li> 73 <li><strong>Vulkan Driver </strong><em>(provided by SoC)</em>. Maps the Vulkan 74 API onto hardware-specific GPU commands and interactions with the kernel 75 graphics driver.</li> 76 </ul> 77 78 <h2 id=modified_components>Modified components</h2> 79 <p>Android 7.0 modifies the following existing graphics components to support 80 Vulkan:</p> 81 82 <ul> 83 <li><strong>BufferQueue</strong>. The Vulkan Runtime interacts with the existing 84 BufferQueue component via the existing <code>ANativeWindow</code> interface. 85 Includes minor modifications (new enum values and new methods) to 86 <code>ANativeWindow</code> and BufferQueue, but no architectural changes.</li> 87 <li><strong>Gralloc HAL</strong>. Includes a new, optional interface for 88 discovering whether a given format can be used for a particular 89 producer/consumer combination without actually allocating a buffer.</li> 90 </ul> 91 92 <p>For details on these components, see 93 <a href="/devices/graphics/arch-bq-gralloc.html">BufferQueue and 94 gralloc</a> (for details on <code>ANativeWindow</code>, see 95 <a href="/devices/graphics/arch-egl-opengl.html">EGLSurface and OpenGL 96 ES</a>). 97 98 <h2 id=apis>Vulkan API</h2> 99 <p>The Android platform includes an 100 <a href="https://developer.android.com/ndk/guides/graphics/index.html">Android-specific 101 implementation</a> of the <a href="https://www.khronos.org/vulkan/">Vulkan API 102 specification</a> from the Khronos Group. Android applications must use the 103 <a href="/devices/graphics/implement-vulkan.html#wsi">Window System 104 Integration (WSI) extensions</a> to output their rendering.</p> 105 106 <h2 id=resources>Resources</h2> 107 <p>Use the following resources to learn more about Vulkan:</p> 108 <ul> 109 110 <li> 111 <a href="https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/#">Vulkan 112 Loader </a>(libvulkan.so) at <code>platform/frameworks/native/vulkan</code>. 113 Contains Android's Vulkan loader, as well as some Vulkan-related tools useful to 114 platform developers.</li> 115 116 <li><a href="https://android.googlesource.com/platform/frameworks/native/+/master/vulkan/doc/implementors_guide/implementors_guide.html">Vulkan 117 Implementor's Guide</a>. Intended for GPU IHVs writing Vulkan drivers for 118 Android and OEMs integrating those drivers for specific devices. It describes 119 how a Vulkan driver interacts with the system, how GPU-specific tools should be 120 installed, and Android-specific requirements.</li> 121 122 <li><a href="https://developer.android.com/ndk/guides/graphics/index.html">Vulkan 123 Graphics API Guide</a>. Includes information on getting started with using 124 Vulkan in an Android app, details on Vulkan design guidelines on the Android 125 platform, how to use Vulkan's shader compilers, and how to use use validation 126 layers to help assure stability in apps using Vulkan.</li> 127 128 <li><a href="https://www.khronos.org/#slider_vulkan">Vulkan News</a>. Covers 129 events, patches, tutorials, and more Vulkan-related news articles.</li> 130 </ul> 131 132 </body> 133 </html> 134