# vkEnumerateDeviceExtensionProperties(3) Manual Page

## Name

vkEnumerateDeviceExtensionProperties - Returns properties of available physical device extensions

Loading… please wait.

## C Specification

To query the extensions available to a given physical device, call:

    // Provided by VK_VERSION_1_0
    VkResult vkEnumerateDeviceExtensionProperties(
        VkPhysicalDevice                            physicalDevice,
        const char*                                 pLayerName,
        uint32_t*                                   pPropertyCount,
        VkExtensionProperties*                      pProperties);

## Parameters

- `physicalDevice` is the physical device that will be queried.

- `pLayerName` is either `NULL` or a pointer to a null-terminated UTF-8 string naming the layer to retrieve extensions from.

- `pPropertyCount` is a pointer to an integer related to the number of extension properties available or queried, and is treated in the same fashion as the vkEnumerateInstanceExtensionProperties::`pPropertyCount` parameter.

- `pProperties` is either `NULL` or a pointer to an array of VkExtensionProperties structures.

## Description

When `pLayerName` parameter is `NULL`, only extensions provided by the Vulkan implementation or by implicitly enabled layers are returned. When `pLayerName` is the name of a layer, the device extensions provided by that layer are returned.

Implementations must not advertise any pair of extensions that cannot be enabled together due to behavioral differences, or any extension that cannot be enabled against the advertised version.

If the `VK_KHR_ray_tracing_pipeline` extension is advertised as supported by this query, the `VK_KHR_pipeline_library` extension must also be supported.

Implementations claiming support for the Roadmap 2022 profile must advertise the `VK_KHR_global_priority` extension in `pProperties`.

Implementations claiming support for the Roadmap 2024 profile must advertise the following extensions in `pProperties`:

- VK_KHR_dynamic_rendering_local_read

- VK_KHR_load_store_op_none

- VK_KHR_shader_quad_control

- VK_KHR_shader_maximal_reconvergence

- VK_KHR_shader_subgroup_uniform_control_flow

- VK_KHR_shader_subgroup_rotate

- VK_KHR_shader_float_controls2

- VK_KHR_shader_expect_assume

- VK_KHR_line_rasterization

- VK_KHR_vertex_attribute_divisor

- VK_KHR_index_type_uint8

- VK_KHR_map_memory2

- VK_KHR_maintenance5

- VK_KHR_push_descriptor

Note | Due to platform details on Android, `vkEnumerateDeviceExtensionProperties` may be called with `physicalDevice` equal to `NULL` during layer discovery. This behavior will only be observed by layer implementations, and not the underlying Vulkan driver.

Valid Usage (Implicit)

- VUID-vkEnumerateDeviceExtensionProperties-physicalDevice-parameter
  `physicalDevice` must be a valid VkPhysicalDevice handle

- VUID-vkEnumerateDeviceExtensionProperties-pLayerName-parameter
  If `pLayerName` is not `NULL`, `pLayerName` must be a null-terminated UTF-8 string

- VUID-vkEnumerateDeviceExtensionProperties-pPropertyCount-parameter
  `pPropertyCount` must be a valid pointer to a `uint32_t` value

- VUID-vkEnumerateDeviceExtensionProperties-pProperties-parameter
  If the value referenced by `pPropertyCount` is not `0`, and `pProperties` is not `NULL`, `pProperties` must be a valid pointer to an array of `pPropertyCount` VkExtensionProperties structures

Return Codes

On success, this command returns

  - `VK_SUCCESS`

  - `VK_INCOMPLETE`

On failure, this command returns

  - `VK_ERROR_OUT_OF_HOST_MEMORY`

  - `VK_ERROR_OUT_OF_DEVICE_MEMORY`

  - `VK_ERROR_LAYER_NOT_PRESENT`

## See Also

VK_VERSION_1_0, VkExtensionProperties, VkPhysicalDevice

## Document Notes

For more information, see the Vulkan Specification

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0