How are extensions separated?

Hello.

As far as I understand, there are extensions that are supported by the instance, and there are extensions supported by the device.
If the extension is in the list obtained using vkEnumerateInstanceExtensionProperties(), it means that it is supported by the instance(driver).
If the extension is in the list obtained using vkEnumerateDeviceExtensionProperties(), it means that it is supported by the device.

Then, if I want to use VK_EXT_line_rasterization for example, then it MUST be in BOTH vkEnumerateInstanceExtensionProperties() and vkEnumerateDeviceExtensionProperties(), right?

An extension is either instance extension, or a device extension. The specification says which in the extension appendix. VK_EXT_line_rasterization is a device extension.

It turns out that the extension can be either an instance extension or a device extension?

No, it can’t. Line rasterization is a device extension.

I’m asking about extensions in general. VK_EXT_line_rasterization was specified for an example.
I’ll ask again: extensions are divided into instance extensions or device extensions, right? That is, the extension can be either an instance extension or a device extension?

So, let me get this straight. krOoze unequivocally says:

And then you ask:

There seems to be a disconnect here.

1 Like

There are two disjont sets; Instance Extensions, and Device Extensions. Every extension belongs to exactly one of those sets.

Every extension can only be what the spec says it is. The information is listed under the " Extension Type" in the specification for each extension.

vkEnumerateInstanceExtensionProperties will list all supported Instance Extensions.

vkEnumerateDeviceExtensionProperties will list all supported Device Extensions on the physical device.

1 Like

Oops, I didn’t feel good that day. Thank you so much for the answer, I understand.