// 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.
--
