Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vulkan: Difference between instance and device extensions?

Tags:

vulkan

Vulkan has instance and device extensions, but I cannot find any information anywhere about what the difference between them is. What does it mean exactly if something is a device extension or an instance extension? Why is VK_KHR_external_memory a device extension and VK_KHR_external_memory_capabilities an instance extension? Why is it not just a single, unified extension system?

like image 207
Silverlan Avatar asked Oct 29 '18 16:10

Silverlan


People also ask

What is an instance in Vulkan?

A Vulkan Instance is an object that gathers the state of an application. It encloses information such as an application name, name and version of an engine used to create an application, or enabled instance-level extensions and layers.

What is a Vulkan extension?

Vulkan extensions are simply additional features that Vulkan implementations may provide if they so choose to. They add new functions, structs, and valid enumerators to the API, and they can change some of the behavior of existing functions.

How do I enable extensions in Vulkan?

You can enable the extension by passing its name to vkCreateInstance via the pCreateInfo->ppEnabledExtensionNames . You can use either "VK_EXT_swapchain_colorspace" directly or use the VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME macro to avoid typos.


1 Answers

The difference between instance extensions and device extensions is the difference between instances and devices.

The Vulkan instance is the piece of code that is used to set up devices. It deals with things like enumerating VkPhysicalDevices and querying their properties, as well as the call to create VkDevices itself.

The Vulkan device is for dealing with Vulkan rendering systems.

Device extensions pertain to the behavior of a particular VkDevice object which was created with that extension activated. As such, that extension cannot describe the behavior of stuff that happens before the device is created.

External memory, for example, has obvious implications for the rendering system. So it is a device extension. However, particular VkPhysicalDevice objects have different properties that can be queried with regard to their external memory functionality. You need to be able to query these properties before you create the device, because if the device doesn't provide the properties you need, there's no point in making the device at all. Or at least, of making the device with that extension active.

But device extensions govern the behavior of a device. If you don't have a device yet because you haven't created one, because you're trying to decide whether to create one at all... what do you do?

Well, that behavior has to be an instance extension. It extends the part of Vulkan that deals with the set up for devices, not that governs the behavior of the device itself.

like image 191
Nicol Bolas Avatar answered Oct 29 '22 17:10

Nicol Bolas