// Copyright (c) 2018-2020 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

[open,refpage='vkGetPhysicalDeviceExternalImageFormatPropertiesNV',desc='Determine image capabilities compatible with external memory handle types',type='protos']
--
To determine the image capabilities compatible with an external memory
handle type, call:

include::{generated}/api/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.txt[]

  * pname:physicalDevice is the physical device from which to query the
    image capabilities
  * pname:format is the image format, corresponding to
    slink:VkImageCreateInfo::pname:format.
  * pname:type is the image type, corresponding to
    slink:VkImageCreateInfo::pname:imageType.
  * pname:tiling is the image tiling, corresponding to
    slink:VkImageCreateInfo::pname:tiling.
  * pname:usage is the intended usage of the image, corresponding to
    slink:VkImageCreateInfo::pname:usage.
  * pname:flags is a bitmask describing additional parameters of the image,
    corresponding to slink:VkImageCreateInfo::pname:flags.
  * pname:externalHandleType is either one of the bits from
    elink:VkExternalMemoryHandleTypeFlagBitsNV, or 0.
  * pname:pExternalImageFormatProperties is a pointer to a
    slink:VkExternalImageFormatPropertiesNV structure in which capabilities
    are returned.

If pname:externalHandleType is 0,
pname:pExternalImageFormatProperties->imageFormatProperties will return the
same values as a call to flink:vkGetPhysicalDeviceImageFormatProperties, and
the other members of pname:pExternalImageFormatProperties will all be 0.
Otherwise, they are filled in as described for
slink:VkExternalImageFormatPropertiesNV.

include::{generated}/validity/protos/vkGetPhysicalDeviceExternalImageFormatPropertiesNV.txt[]
--

[open,refpage='VkExternalImageFormatPropertiesNV',desc='Structure specifying external image format properties',type='structs']
--
The sname:VkExternalImageFormatPropertiesNV structure is defined as:

include::{generated}/api/structs/VkExternalImageFormatPropertiesNV.txt[]

  * pname:imageFormatProperties will be filled in as when calling
    flink:vkGetPhysicalDeviceImageFormatProperties, but the values returned
    may: vary depending on the external handle type requested.
  * pname:externalMemoryFeatures is a bitmask of
    elink:VkExternalMemoryFeatureFlagBitsNV, indicating properties of the
    external memory handle type
    (flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType)
    being queried, or 0 if the external memory handle type is 0.
  * pname:exportFromImportedHandleTypes is a bitmask of
    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a bit set for
    every external handle type that may: be used to create memory from which
    the handles of the type specified in
    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
    can: be exported, or 0 if the external memory handle type is 0.
  * pname:compatibleHandleTypes is a bitmask of
    elink:VkExternalMemoryHandleTypeFlagBitsNV containing a bit set for
    every external handle type that may: be specified simultaneously with
    the handle type specified by
    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType
    when calling flink:vkAllocateMemory, or 0 if the external memory handle
    type is 0.
    pname:compatibleHandleTypes will always contain
    flink:vkGetPhysicalDeviceExternalImageFormatPropertiesNV::pname:externalHandleType

include::{generated}/validity/structs/VkExternalImageFormatPropertiesNV.txt[]
--

[open,refpage='VkExternalMemoryFeatureFlagBitsNV',desc='Bitmask specifying external memory features',type='enums',xrefs='vkGetPhysicalDeviceExternalImageFormatPropertiesNV VkExternalImageFormatPropertiesNV']
--
Bits which can: be set in
slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryFeatures,
indicating properties of the external memory handle type, are:

include::{generated}/api/enums/VkExternalMemoryFeatureFlagBitsNV.txt[]

  * ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV specifies that
    external memory of the specified type must: be created as a dedicated
    allocation when used in the manner specified.
  * ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV specifies that the
    implementation supports exporting handles of the specified type.
  * ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV specifies that the
    implementation supports importing handles of the specified type.
--

[open,refpage='VkExternalMemoryFeatureFlagsNV',desc='Bitmask of VkExternalMemoryFeatureFlagBitsNV',type='flags']
--
include::{generated}/api/flags/VkExternalMemoryFeatureFlagsNV.txt[]

tname:VkExternalMemoryFeatureFlagsNV is a bitmask type for setting a mask of
zero or more elink:VkExternalMemoryFeatureFlagBitsNV.
--
