{"id":1244,"date":"2017-09-22T15:06:21","date_gmt":"2017-09-22T21:06:21","guid":{"rendered":"https:\/\/www.lunarg.com\/?p=1244"},"modified":"2025-01-15T18:19:45","modified_gmt":"2025-01-16T01:19:45","slug":"tutorial-overview-of-vulkan-loader-layers","status":"publish","type":"post","link":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/","title":{"rendered":"Overview of Vulkan Loader and Layers"},"content":{"rendered":"<h2><span style=\"font-weight: 400;\">Learning the Vulkan API? Check out this overview of Vulkan Loader and Layers.\u00a0<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Vulkan is a layered architecture, made up of the following elements: 1)\u00a0<\/span>The Vulkan Application, 2) The Vulkan Loader, 3) Vulkan Layers, and 4) Installable Client Drivers (ICDs).<\/p>\n<p><span style=\"font-weight: 400;\">While this tutorial is primarily targeted at developers of Vulkan applications, drivers, and layers, the information contained in it could be useful to anyone wanting a better understanding of the Vulkan runtime. \u00a0These general concepts are applicable to the loaders available for Windows-, Linux-, and Android-based systems.<\/span><\/p>\n<h3><b>The Loader<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The application sits on one end of, and interfaces directly with, the loader. On the other end of the loader from the application are the ICDs, which control the Vulkan-capable hardware. An important point to remember is that Vulkan-capable hardware can be graphics-based, compute-based, or both. Between the application and the ICDs the loader can inject a number of optional <\/span><a href=\"https:\/\/vulkan.lunarg.com\/doc\/view\/1.0.61.1\/windows\/LoaderAndLayerInterface.html#user-content-layers\"><span style=\"font-weight: 400;\">layers<\/span><\/a><span style=\"font-weight: 400;\"> that provide special functionality.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The loader is responsible for working with the various layers as well as supporting multiple GPUs and their drivers. Any Vulkan function may wind up calling into a diverse set of modules: loader, layers, and ICDs. The loader is critical to managing the proper dispatching of Vulkan functions to the appropriate set of layers and ICDs. The Vulkan object model allows the loader to insert layers into a call chain so that the layers can process Vulkan functions prior to the ICD being called.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This tutorial is intended to provide an overview of the necessary interfaces between each of these.<\/span><\/p>\n<h3><b>Goals of the Loader<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The loader was designed with the following goals in mind.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Support one or more Vulkan-capable ICDs on a user&#8217;s computer system without interference between them.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Support Vulkan Layers, which are optional modules that can be enabled by an application, developer, or standard system settings.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Minimize overall performance impact to a Vulkan application.<\/span><\/li>\n<\/ol>\n<h3><b>Layers<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Layers are optional components that augment the Vulkan system. They can intercept, evaluate, and modify existing Vulkan functions on their way from the application down to the hardware. Layers are implemented as libraries that can be enabled in different ways (including by application request) and are loaded during CreateInstance. Each layer can choose to hook (intercept) any Vulkan functions which in turn can be ignored or augmented. A layer does not need to intercept all Vulkan functions. It may choose to intercept all known functions, or, it may choose to intercept only one function.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Some examples of features that layers may expose include:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Validating API usage<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Adding the ability to perform Vulkan API tracing and debugging<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Overlaying additional content on the application&#8217;s surfaces<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Because layers are optional, you may choose to enable layers for debugging your application, but then disable any layer usage when you release your product.<\/span><\/p>\n<p>Read more information about the Vulkan loader and layers [<a href=\"http:\/\/bit.ly\/2wM3NFq\">here<\/a>].<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learning the Vulkan API? Check out this overview of Vulkan Loader and Layers.\u00a0 Vulkan is a layered architecture, made up of the following elements: 1)\u00a0The Vulkan Application, 2) The Vulkan Loader, 3) Vulkan Layers, and 4) Installable Client Drivers (ICDs). While this tutorial is primarily targeted at developers of Vulkan applications, drivers, and layers, the [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":1964,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[130],"tags":[],"class_list":["post-1244","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Overview of Vulkan Loader and Layers - LunarG<\/title>\n<meta name=\"description\" content=\"Learning the Vulkan API? Check out this tutorial overview of Vulkan Loader and Layers from LunarG&#039;s LunarXchange website.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Overview of Vulkan Loader and Layers - LunarG\" \/>\n<meta property=\"og:description\" content=\"Learning the Vulkan API? Check out this tutorial overview of Vulkan Loader and Layers from LunarG&#039;s LunarXchange website.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\" \/>\n<meta property=\"og:site_name\" content=\"LunarG\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-22T21:06:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-16T01:19:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"755\" \/>\n\t<meta property=\"og:image:height\" content=\"395\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Dave Desormeaux\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dave Desormeaux\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\"},\"author\":{\"name\":\"Dave Desormeaux\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/person\/493f4ece901c822208cfda3feb80420a\"},\"headline\":\"Overview of Vulkan Loader and Layers\",\"datePublished\":\"2017-09-22T21:06:21+00:00\",\"dateModified\":\"2025-01-16T01:19:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\"},\"wordCount\":474,\"publisher\":{\"@id\":\"https:\/\/www.lunarg.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\",\"url\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\",\"name\":\"Overview of Vulkan Loader and Layers - LunarG\",\"isPartOf\":{\"@id\":\"https:\/\/www.lunarg.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg\",\"datePublished\":\"2017-09-22T21:06:21+00:00\",\"dateModified\":\"2025-01-16T01:19:45+00:00\",\"description\":\"Learning the Vulkan API? Check out this tutorial overview of Vulkan Loader and Layers from LunarG's LunarXchange website.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage\",\"url\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg\",\"contentUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg\",\"width\":755,\"height\":395,\"caption\":\"Futuristic city model made of computer parts\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.lunarg.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Overview of Vulkan Loader and Layers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.lunarg.com\/#website\",\"url\":\"https:\/\/www.lunarg.com\/\",\"name\":\"LunarG\",\"description\":\"3D Graphics Software Solutions\",\"publisher\":{\"@id\":\"https:\/\/www.lunarg.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.lunarg.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.lunarg.com\/#organization\",\"name\":\"LunarG\",\"url\":\"https:\/\/www.lunarg.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png\",\"contentUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png\",\"width\":767,\"height\":304,\"caption\":\"LunarG\"},\"image\":{\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/person\/493f4ece901c822208cfda3feb80420a\",\"name\":\"Dave Desormeaux\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/89944424b10c09db4e6c6e62b6ef1722?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/89944424b10c09db4e6c6e62b6ef1722?s=96&d=retro&r=pg\",\"caption\":\"Dave Desormeaux\"},\"sameAs\":[\"http:\/\/www.lunarg.com\"],\"url\":\"https:\/\/www.lunarg.com\/author\/dave-d\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Overview of Vulkan Loader and Layers - LunarG","description":"Learning the Vulkan API? Check out this tutorial overview of Vulkan Loader and Layers from LunarG's LunarXchange website.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/","og_locale":"en_US","og_type":"article","og_title":"Overview of Vulkan Loader and Layers - LunarG","og_description":"Learning the Vulkan API? Check out this tutorial overview of Vulkan Loader and Layers from LunarG's LunarXchange website.","og_url":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/","og_site_name":"LunarG","article_published_time":"2017-09-22T21:06:21+00:00","article_modified_time":"2025-01-16T01:19:45+00:00","og_image":[{"width":755,"height":395,"url":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg","type":"image\/jpeg"}],"author":"Dave Desormeaux","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dave Desormeaux","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#article","isPartOf":{"@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/"},"author":{"name":"Dave Desormeaux","@id":"https:\/\/www.lunarg.com\/#\/schema\/person\/493f4ece901c822208cfda3feb80420a"},"headline":"Overview of Vulkan Loader and Layers","datePublished":"2017-09-22T21:06:21+00:00","dateModified":"2025-01-16T01:19:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/"},"wordCount":474,"publisher":{"@id":"https:\/\/www.lunarg.com\/#organization"},"image":{"@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg","articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/","url":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/","name":"Overview of Vulkan Loader and Layers - LunarG","isPartOf":{"@id":"https:\/\/www.lunarg.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage"},"image":{"@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg","datePublished":"2017-09-22T21:06:21+00:00","dateModified":"2025-01-16T01:19:45+00:00","description":"Learning the Vulkan API? Check out this tutorial overview of Vulkan Loader and Layers from LunarG's LunarXchange website.","breadcrumb":{"@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#primaryimage","url":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg","contentUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2019\/04\/iStock-1078079744-1.jpg","width":755,"height":395,"caption":"Futuristic city model made of computer parts"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lunarg.com\/tutorial-overview-of-vulkan-loader-layers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lunarg.com\/"},{"@type":"ListItem","position":2,"name":"Overview of Vulkan Loader and Layers"}]},{"@type":"WebSite","@id":"https:\/\/www.lunarg.com\/#website","url":"https:\/\/www.lunarg.com\/","name":"LunarG","description":"3D Graphics Software Solutions","publisher":{"@id":"https:\/\/www.lunarg.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lunarg.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.lunarg.com\/#organization","name":"LunarG","url":"https:\/\/www.lunarg.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png","contentUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png","width":767,"height":304,"caption":"LunarG"},"image":{"@id":"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.lunarg.com\/#\/schema\/person\/493f4ece901c822208cfda3feb80420a","name":"Dave Desormeaux","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lunarg.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/89944424b10c09db4e6c6e62b6ef1722?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/89944424b10c09db4e6c6e62b6ef1722?s=96&d=retro&r=pg","caption":"Dave Desormeaux"},"sameAs":["http:\/\/www.lunarg.com"],"url":"https:\/\/www.lunarg.com\/author\/dave-d\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/posts\/1244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/comments?post=1244"}],"version-history":[{"count":0,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/posts\/1244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/media\/1964"}],"wp:attachment":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/media?parent=1244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/categories?post=1244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/tags?post=1244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}