附加功能
附加图像功能
本节描述了附加的图像功能,例如更大的尺寸或某些图像类型的额外样本计数,或线性平铺格式图像的附加功能。
要查询特定于图像类型的附加功能,请调用
// Provided by VK_VERSION_1_0
VkResult vkGetPhysicalDeviceImageFormatProperties(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkImageType type,
VkImageTiling tiling,
VkImageUsageFlags usage,
VkImageCreateFlags flags,
VkImageFormatProperties* pImageFormatProperties);
-
physicalDevice
是从中查询图像功能的物理设备。 -
format
是一个 VkFormat 值,指定图像格式,对应于 VkImageCreateInfo::format
。 -
type
是一个 VkImageType 值,指定图像类型,对应于 VkImageCreateInfo::imageType
。 -
tiling
是一个 VkImageTiling 值,指定图像平铺,对应于 VkImageCreateInfo::tiling
。 -
usage
是一个 VkImageUsageFlagBits 的位掩码,指定图像的预期用途,对应于 VkImageCreateInfo::usage
。 -
flags
是一个 VkImageCreateFlagBits 的位掩码,指定图像的附加参数,对应于 VkImageCreateInfo::flags
。 -
pImageFormatProperties
是一个指向 VkImageFormatProperties 结构的指针,其中返回功能。
format
、type
、tiling
、usage
和 flags
参数对应于 vkCreateImage(作为 VkImageCreateInfo 的成员)将使用的参数。
如果 format
不是支持的图像格式,或者如果 format
、type
、tiling
、usage
和 flags
的组合不支持图像,则 vkGetPhysicalDeviceImageFormatProperties
返回 VK_ERROR_FORMAT_NOT_SUPPORTED
。
vkGetPhysicalDeviceImageFormatProperties
报告的图像格式的限制具有以下属性:如果 VkImageUsageFlags 类型的 usage1
和 usage2
使得 usage1
中设置的位是 usage2
中设置的位的子集,并且 VkImageCreateFlags 类型的 flags1
和 flags2
使得 flags1
中设置的位是 flags2
中设置的位的子集,则对于 format
、type
和 tiling
的所有值,usage1
和 flags1
的限制必须不比 usage2
和 flags2
的限制更严格。
如果支持 hostImageCopy
功能,则 usage
包括 VK_IMAGE_USAGE_SAMPLED_BIT
,并且 flags
不包括 VK_IMAGE_CREATE_SPARSE_BINDING_BIT
、VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
或 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
中的任何一个,则对 vkGetPhysicalDeviceImageFormatProperties
的调用结果,除了在 usage
中包含 VK_IMAGE_USAGE_HOST_TRANSFER_BIT
之外,其他参数都相同,则结果必须相同。
VkImageFormatProperties
结构定义如下
// Provided by VK_VERSION_1_0
typedef struct VkImageFormatProperties {
VkExtent3D maxExtent;
uint32_t maxMipLevels;
uint32_t maxArrayLayers;
VkSampleCountFlags sampleCounts;
VkDeviceSize maxResourceSize;
} VkImageFormatProperties;
-
maxExtent
是图像的最大维度。 请参阅下面的 允许的范围值 部分,了解这些值如何受type
约束。 -
maxMipLevels
是最大mipmap级别数。maxMipLevels
必须等于基于maxExtent.width
、maxExtent.height
和maxExtent.depth
的完整mipmap链中的级别数,除非满足以下条件之一,在这种情况下,它可以改为1
-
vkGetPhysicalDeviceImageFormatProperties
::tiling
为VK_IMAGE_TILING_LINEAR
-
VkPhysicalDeviceImageFormatInfo2::
tiling
为VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
-
VkPhysicalDeviceImageFormatInfo2::
pNext
链包含一个 VkPhysicalDeviceExternalImageFormatInfo 结构,该结构的handleTypes
成员中包含一个句柄类型,而该句柄类型不需要mipmap图像支持 -
图像
format
是 需要采样器 Y′CBCR 转换的格式之一 -
flags
包含VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
-
-
maxArrayLayers
是最大数组层数。maxArrayLayers
必须不小于 VkPhysicalDeviceLimits::maxImageArrayLayers
,除非满足以下条件之一,在这种情况下,它可以改为1
-
tiling
为VK_IMAGE_TILING_LINEAR
-
tiling
为VK_IMAGE_TILING_OPTIMAL
且type
为VK_IMAGE_TYPE_3D
-
format
是 需要采样器 Y′CBCR 转换的格式之一
-
-
如果
tiling
为VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
,则maxArrayLayers
不能为 0。 -
sampleCounts
是 VkSampleCountFlagBits 的位掩码,指定此图像的所有支持采样计数,如 下文所述。 -
maxResourceSize
是所有图像子资源(包括所有图像子资源)的总图像大小(以字节为单位)的上限。 实现可以对资源的总大小设置地址空间限制,该限制由此属性进行通告。maxResourceSize
必须至少为 231。
没有机制可以在创建图像之前查询图像的大小,以便将该大小与 |
如果 vkGetPhysicalDeviceImageFormatProperties
的参数组合不受实现支持,无法在 vkCreateImage 中使用,则 VkImageFormatProperties
的所有成员都将填充为零。
对于不支持的格式,将 |
要确定与外部内存句柄类型兼容的图像功能,请调用
// Provided by VK_NV_external_memory_capabilities
VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
VkPhysicalDevice physicalDevice,
VkFormat format,
VkImageType type,
VkImageTiling tiling,
VkImageUsageFlags usage,
VkImageCreateFlags flags,
VkExternalMemoryHandleTypeFlagsNV externalHandleType,
VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
-
physicalDevice
是从中查询图像功能的物理设备 -
format
是图像格式,对应于 VkImageCreateInfo::format
。 -
type
是图像类型,对应于 VkImageCreateInfo::imageType
。 -
tiling
是图像平铺,对应于 VkImageCreateInfo::tiling
。 -
usage
是图像的预期用途,对应于 VkImageCreateInfo::usage
。 -
flags
是一个位掩码,描述图像的其他参数,对应于 VkImageCreateInfo::flags
。 -
externalHandleType
是 VkExternalMemoryHandleTypeFlagBitsNV 中的一个位,或者为 0。 -
pExternalImageFormatProperties
是指向 VkExternalImageFormatPropertiesNV 结构的指针,其中返回功能。
如果 externalHandleType
为 0,则 pExternalImageFormatProperties->imageFormatProperties
将返回与调用 vkGetPhysicalDeviceImageFormatProperties 相同的值,并且 pExternalImageFormatProperties
的其他成员都将为 0。 否则,它们将按 VkExternalImageFormatPropertiesNV 所述进行填充。
VkExternalImageFormatPropertiesNV
结构定义如下:
// Provided by VK_NV_external_memory_capabilities
typedef struct VkExternalImageFormatPropertiesNV {
VkImageFormatProperties imageFormatProperties;
VkExternalMemoryFeatureFlagsNV externalMemoryFeatures;
VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
} VkExternalImageFormatPropertiesNV;
-
imageFormatProperties
将在调用 vkGetPhysicalDeviceImageFormatProperties 时被填充,但返回的值可能会因所请求的外部句柄类型而异。 -
externalMemoryFeatures
是一个 VkExternalMemoryFeatureFlagBitsNV 的位掩码,指示所查询的外部内存句柄类型(vkGetPhysicalDeviceExternalImageFormatPropertiesNV::externalHandleType
)的属性,如果外部内存句柄类型为 0,则为 0。 -
exportFromImportedHandleTypes
是一个 VkExternalMemoryHandleTypeFlagBitsNV 的位掩码,其中为每个外部句柄类型设置了一个位,这些句柄类型可以用于创建内存,从中可以导出 vkGetPhysicalDeviceExternalImageFormatPropertiesNV::externalHandleType
中指定的类型的句柄,如果外部内存句柄类型为 0,则为 0。 -
compatibleHandleTypes
是一个 VkExternalMemoryHandleTypeFlagBitsNV 的位掩码,其中为每个外部句柄类型设置了一个位,该句柄类型可以在调用 vkAllocateMemory 时与 vkGetPhysicalDeviceExternalImageFormatPropertiesNV::externalHandleType
指定的句柄类型同时指定,如果外部内存句柄类型为 0,则为 0。compatibleHandleTypes
将始终包含 vkGetPhysicalDeviceExternalImageFormatPropertiesNV::externalHandleType
。
以下位可以在 VkExternalImageFormatPropertiesNV::externalMemoryFeatures
中设置,指示外部内存句柄类型的属性:
// Provided by VK_NV_external_memory_capabilities
typedef enum VkExternalMemoryFeatureFlagBitsNV {
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
} VkExternalMemoryFeatureFlagBitsNV;
-
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV
指定在以指定的方式使用时,指定类型的外部内存必须创建为专用分配。 -
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV
指定实现支持导出指定类型的句柄。 -
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
指定实现支持导入指定类型的句柄。
// Provided by VK_NV_external_memory_capabilities
typedef VkFlags VkExternalMemoryFeatureFlagsNV;
VkExternalMemoryFeatureFlagsNV
是一个位掩码类型,用于设置零个或多个 VkExternalMemoryFeatureFlagBitsNV 的掩码。
要查询特定于图像类型的附加功能,请调用
// Provided by VK_VERSION_1_1
VkResult vkGetPhysicalDeviceImageFormatProperties2(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
VkImageFormatProperties2* pImageFormatProperties);
或等效命令:
// Provided by VK_KHR_get_physical_device_properties2
VkResult vkGetPhysicalDeviceImageFormatProperties2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
VkImageFormatProperties2* pImageFormatProperties);
-
physicalDevice
是从中查询图像功能的物理设备。 -
pImageFormatInfo
是指向 VkPhysicalDeviceImageFormatInfo2 结构的指针,该结构描述了将被 vkCreateImage 使用的参数。 -
pImageFormatProperties
是指向 VkImageFormatProperties2 结构的指针,其中返回功能。
vkGetPhysicalDeviceImageFormatProperties2
的行为类似于 vkGetPhysicalDeviceImageFormatProperties,并且能够以输出结构的 pNext
链的形式返回扩展信息。
如果 pImageFormatInfo
的 pNext
链包含一个 VkVideoProfileListInfoKHR 结构,且其 profileCount
成员大于 0
,则此命令返回特定于与指定视频配置文件结合使用的图像类型的格式功能。在这种情况下,如果通过 VkVideoProfileListInfoKHR::pProfiles
指定的任何配置文件不受支持,则此命令将返回特定于视频配置文件的错误代码之一。此外,如果 VkPhysicalDeviceImageFormatInfo2::usage
包含任何指定视频配置文件不支持的图像用法标志,则此命令将返回 VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR
。
VkPhysicalDeviceImageFormatInfo2
结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceImageFormatInfo2 {
VkStructureType sType;
const void* pNext;
VkFormat format;
VkImageType type;
VkImageTiling tiling;
VkImageUsageFlags usage;
VkImageCreateFlags flags;
} VkPhysicalDeviceImageFormatInfo2;
或等效的:
// Provided by VK_KHR_get_physical_device_properties2
typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
是NULL
或指向扩展此结构的结构的指针。VkPhysicalDeviceImageFormatInfo2
的pNext
链用于向vkGetPhysicalDeviceImageFormatProperties2
提供额外的图像参数。 -
format
是一个 VkFormat 值,指示图像格式,对应于 VkImageCreateInfo::format
。 -
type
是一个 VkImageType 值,指示图像类型,对应于 VkImageCreateInfo::imageType
。 -
tiling
是一个 VkImageTiling 值,指示图像平铺方式,对应于 VkImageCreateInfo::tiling
。 -
usage
是一个 VkImageUsageFlagBits 的位掩码,指示图像的预期用途,对应于 VkImageCreateInfo::usage
。 -
flags
是一个 VkImageCreateFlagBits 的位掩码,指示图像的附加参数,对应于 VkImageCreateInfo::flags
。
VkPhysicalDeviceImageFormatInfo2
的成员对应于 vkGetPhysicalDeviceImageFormatProperties 的参数,并添加了 sType
和 pNext
以实现可扩展性。
VkImageFormatProperties2
结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkImageFormatProperties2 {
VkStructureType sType;
void* pNext;
VkImageFormatProperties imageFormatProperties;
} VkImageFormatProperties2;
或等效的:
// Provided by VK_KHR_get_physical_device_properties2
typedef VkImageFormatProperties2 VkImageFormatProperties2KHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。VkImageFormatProperties2
的pNext
链用于允许指定从vkGetPhysicalDeviceImageFormatProperties2
返回的附加功能。 -
imageFormatProperties
是一个 VkImageFormatProperties 结构,其中返回功能。
如果 vkGetPhysicalDeviceImageFormatProperties2
的参数组合不受实现支持以用于 vkCreateImage,则 imageFormatProperties
的所有成员都将填充为零。
对于不支持的格式,将 |
要确定接受显式 LOD 和/或偏差参数值的纹理采集函数是否可以与给定的图像格式一起使用,请在调用 vkGetPhysicalDeviceImageFormatProperties2
时,将 VkTextureLODGatherFormatPropertiesAMD 结构添加到 VkImageFormatProperties2 结构的 pNext
链。
VkTextureLODGatherFormatPropertiesAMD
结构定义如下:
// Provided by VK_AMD_texture_gather_bias_lod
typedef struct VkTextureLODGatherFormatPropertiesAMD {
VkStructureType sType;
void* pNext;
VkBool32 supportsTextureGatherLODBiasAMD;
} VkTextureLODGatherFormatPropertiesAMD;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
supportsTextureGatherLODBiasAMD
指示图像格式是否可以与由VK_AMD_texture_gather_bias_lod
扩展引入的纹理采集偏差/LOD 函数一起使用。此字段由实现设置。应用程序指定的值将被忽略。
要确定与外部内存句柄类型兼容的图像功能,请将 VkPhysicalDeviceExternalImageFormatInfo 结构添加到 VkPhysicalDeviceImageFormatInfo2 结构的 pNext
链,并将 VkExternalImageFormatProperties
结构添加到 VkImageFormatProperties2 结构的 pNext
链。
VkPhysicalDeviceExternalImageFormatInfo
结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceExternalImageFormatInfo {
VkStructureType sType;
const void* pNext;
VkExternalMemoryHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalImageFormatInfo;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
handleType
是一个 VkExternalMemoryHandleTypeFlagBits 值,指定将与图像关联的内存一起使用的内存句柄类型。
如果 handleType
为 0,则 vkGetPhysicalDeviceImageFormatProperties2 的行为将如同不存在 VkPhysicalDeviceExternalImageFormatInfo,并且 VkExternalImageFormatProperties 将被忽略。
如果 handleType
与 VkPhysicalDeviceImageFormatInfo2 中指定的 format
、type
、tiling
、usage
和 flags
不兼容,则 vkGetPhysicalDeviceImageFormatProperties2 返回 VK_ERROR_FORMAT_NOT_SUPPORTED
。
指定外部内存句柄类型的 VkPhysicalDeviceExternalImageFormatInfo::handleType
的可能值为:
// Provided by VK_VERSION_1_1
typedef enum VkExternalMemoryHandleTypeFlagBits {
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020,
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040,
// Provided by VK_EXT_external_memory_dma_buf
VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200,
// Provided by VK_ANDROID_external_memory_android_hardware_buffer
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400,
// Provided by VK_EXT_external_memory_host
VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080,
// Provided by VK_EXT_external_memory_host
VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100,
// Provided by VK_FUCHSIA_external_memory
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800,
// Provided by VK_NV_external_memory_rdma
VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000,
// Provided by VK_QNX_external_memory_screen_buffer
VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX = 0x00004000,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT,
} VkExternalMemoryHandleTypeFlagBits;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR;
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
指定一个 POSIX 文件描述符句柄,该句柄在 Vulkan 和其他兼容 API 之外的使用受到限制。它必须与 POSIX 系统调用dup
、dup2
、close
和非标准系统调用dup3
兼容。此外,它必须能够通过使用SCM_RIGHTS
控制消息的套接字进行传输。它拥有对其 Vulkan 内存对象所代表的底层内存资源的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
指定一个 NT 句柄,该句柄在 Vulkan 和其他兼容 API 之外的使用受到限制。它必须与函数DuplicateHandle
、CloseHandle
、CompareObjectHandles
、GetHandleInformation
和SetHandleInformation
兼容。它拥有对其 Vulkan 内存对象所代表的底层内存资源的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
指定一个全局共享句柄,该句柄在 Vulkan 和其他兼容 API 之外的使用受到限制。它与任何原生 API 都不兼容。它不拥有对其 Vulkan 内存对象所代表的底层内存资源的引用,因此当所有与之关联的 Vulkan 内存对象被销毁时,它将变为无效。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
指定一个由IDXGIResource1
::CreateSharedHandle
返回的 NT 句柄,该句柄引用一个 Direct3D 10 或 11 纹理资源。它拥有对 Direct3D 资源使用的内存的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
指定一个由IDXGIResource
::GetSharedHandle
返回的全局共享句柄,该句柄引用一个 Direct3D 10 或 11 纹理资源。它不拥有对底层 Direct3D 资源的引用,因此当所有与之关联的 Vulkan 内存对象和 Direct3D 资源被销毁时,它将变为无效。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
指定一个由ID3D12Device
::CreateSharedHandle
返回的 NT 句柄,该句柄引用一个 Direct3D 12 堆资源。它拥有对 Direct3D 堆使用的资源的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
指定一个由ID3D12Device
::CreateSharedHandle
返回的 NT 句柄,该句柄引用一个 Direct3D 12 提交的资源。它拥有对 Direct3D 资源使用的内存的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
指定一个由主机内存分配命令返回的主机指针。它不拥有对底层内存资源的引用,因此如果主机内存被释放,它将变为无效。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
指定一个指向主机映射的外部内存的主机指针。它不拥有对底层内存资源的引用,因此如果外部内存被取消映射或以其他方式不再可用,它将变为无效。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
是一个 Linux dma_buf 的文件描述符。它拥有对其 Vulkan 内存对象所代表的底层内存资源的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
指定一个由 Android NDK 定义的AHardwareBuffer
对象。有关此句柄类型的更多详细信息,请参阅Android 硬件缓冲区。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA
是一个指向虚拟内存对象的 Zircon 句柄。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV
是一个可由远程设备访问的分配的句柄。它拥有对其 Vulkan 内存对象所代表的底层内存资源的引用。 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX
指定一个由 QNX SDP 定义的_screen_buffer
对象。有关此句柄类型的更多详细信息,请参阅QNX 屏幕缓冲区。
某些外部内存句柄类型只能在同一个底层物理设备和/或同一个驱动程序版本内共享,如下表定义
句柄类型 |
|
|
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
上表不限制 |
即使上表不限制 |
// Provided by VK_VERSION_1_1
typedef VkFlags VkExternalMemoryHandleTypeFlags;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR;
VkExternalMemoryHandleTypeFlags
是一个位掩码类型,用于设置零个或多个 VkExternalMemoryHandleTypeFlagBits 的掩码。
VkExternalImageFormatProperties
结构定义如下
// Provided by VK_VERSION_1_1
typedef struct VkExternalImageFormatProperties {
VkStructureType sType;
void* pNext;
VkExternalMemoryProperties externalMemoryProperties;
} VkExternalImageFormatProperties;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
externalMemoryProperties
是一个 VkExternalMemoryProperties 结构,指定当与指定的图像创建参数一起使用时,外部句柄类型的各种功能。
VkExternalMemoryProperties
结构定义如下
// Provided by VK_VERSION_1_1
typedef struct VkExternalMemoryProperties {
VkExternalMemoryFeatureFlags externalMemoryFeatures;
VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes;
VkExternalMemoryHandleTypeFlags compatibleHandleTypes;
} VkExternalMemoryProperties;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR;
-
externalMemoryFeatures
是 VkExternalMemoryFeatureFlagBits 的位掩码,指定handleType
的功能。 -
exportFromImportedHandleTypes
是 VkExternalMemoryHandleTypeFlagBits 的位掩码,指定handleType
可以从哪些类型的导入句柄导出。 -
compatibleHandleTypes
是 VkExternalMemoryHandleTypeFlagBits 的位掩码,指定在创建与外部内存兼容的图像时,可以与handleType
同时指定的句柄类型。
compatibleHandleTypes
必须至少包含 handleType
。在 compatibleHandleTypes
中包含句柄类型并不意味着当 VkPhysicalDeviceExternalImageFormatInfo::handleType
设置为该类型时,在 VkImageFormatProperties2 中返回的值将相同。应用程序负责查询单个图像中所有打算同时使用的句柄类型的功能,并对其求交以获得兼容的功能集。
在 VkExternalMemoryProperties::externalMemoryFeatures
中**可能**设置的位,用于指定外部内存句柄类型的特性,包括:
// Provided by VK_VERSION_1_1
typedef enum VkExternalMemoryFeatureFlagBits {
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001,
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002,
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT,
// Provided by VK_KHR_external_memory_capabilities
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,
} VkExternalMemoryFeatureFlagBits;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR;
-
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
指定使用指定参数和句柄类型创建的图像或缓冲区**必须**使用 VkMemoryDedicatedRequirements 和 VkMemoryDedicatedAllocateInfo 定义的机制来创建(或导入)该图像或缓冲区的专用分配。 -
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
指定此类型的句柄**可以**从 Vulkan 内存对象导出。 -
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
指定此类型的句柄**可以**作为 Vulkan 内存对象导入。
由于它们在外部 API 中的语义与 Vulkan 中具有专用分配的图像或缓冲区大致一致,因此实现**必须**为以下外部句柄类型报告 VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
:
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
-
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
,仅适用于图像 -
VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX
,仅适用于图像
对于具有外部句柄类型 VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
的缓冲区,实现**不得**报告 VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
。对于具有外部句柄类型 VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX
的缓冲区,实现**不得**报告 VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
。对于具有外部句柄类型 VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
或 VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
的图像或缓冲区,实现**不得**报告 VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
。
// Provided by VK_VERSION_1_1
typedef VkFlags VkExternalMemoryFeatureFlags;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR;
VkExternalMemoryFeatureFlags
是一个位掩码类型,用于设置零个或多个 VkExternalMemoryFeatureFlagBits 的掩码。
要查询与 Linux DRM 格式修饰符 兼容的图像功能,请将 VkPhysicalDeviceImageFormatInfo2::tiling
设置为 VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
,并将 VkPhysicalDeviceImageDrmFormatModifierInfoEXT 结构添加到 VkPhysicalDeviceImageFormatInfo2 的 pNext
链中。
VkPhysicalDeviceImageDrmFormatModifierInfoEXT
结构定义如下:
// Provided by VK_EXT_image_drm_format_modifier
typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT {
VkStructureType sType;
const void* pNext;
uint64_t drmFormatModifier;
VkSharingMode sharingMode;
uint32_t queueFamilyIndexCount;
const uint32_t* pQueueFamilyIndices;
} VkPhysicalDeviceImageDrmFormatModifierInfoEXT;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
drmFormatModifier
是图像的 _Linux DRM 格式修饰符_,对应于 VkImageDrmFormatModifierExplicitCreateInfoEXT::modifier
或 VkImageDrmFormatModifierListCreateInfoEXT::pModifiers
。 -
sharingMode
指定多个队列族如何访问该图像。 -
queueFamilyIndexCount
是pQueueFamilyIndices
数组中的条目数。 -
pQueueFamilyIndices
是指向将访问该图像的队列族数组的指针。如果sharingMode
不是VK_SHARING_MODE_CONCURRENT
,则忽略该指针。
如果 drmFormatModifier
与 VkPhysicalDeviceImageFormatInfo2 及其 pNext
链中指定的参数不兼容,则 vkGetPhysicalDeviceImageFormatProperties2 返回 VK_ERROR_FORMAT_NOT_SUPPORTED
。实现**必须**支持查询任何 drmFormatModifier
,包括未知和无效的修饰符值。
要确定支持多平面格式所需的组合图像采样器数量,请在调用 vkGetPhysicalDeviceImageFormatProperties2
时,将 VkSamplerYcbcrConversionImageFormatProperties 添加到 VkImageFormatProperties2 结构的 pNext
链中。
VkSamplerYcbcrConversionImageFormatProperties
结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkSamplerYcbcrConversionImageFormatProperties {
VkStructureType sType;
void* pNext;
uint32_t combinedImageSamplerDescriptorCount;
} VkSamplerYcbcrConversionImageFormatProperties;
或等效的:
// Provided by VK_KHR_sampler_ycbcr_conversion
typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
combinedImageSamplerDescriptorCount
是实现用来访问该格式的组合图像采样器描述符的数量。
combinedImageSamplerDescriptorCount
是一个介于 1 和格式中的平面数之间的数字。具有不可变的 Y′CBCR 转换采样器的描述符集布局绑定将具有一个最大 combinedImageSamplerDescriptorCount
,该值是其采样器支持的所有格式的每个格式的 combinedImageSamplerDescriptorCount
的最大值。具有该布局的描述符集将在内部为绑定中的每个描述符使用该最大 combinedImageSamplerDescriptorCount
个描述符。当分配描述符集时,将从描述符池中使用这个扩展的描述符数量,并计入 maxDescriptorSetSamplers
、maxDescriptorSetSampledImages
、maxPerStageDescriptorSamplers
和 maxPerStageDescriptorSampledImages
限制。
绑定中的所有描述符都使用相同的最大 例如,考虑一个具有两个描述符和多平面格式的不可变采样器的描述符集布局绑定,它们的 |
应用程序可以使用 VkPhysicalDeviceMaintenance6Properties::maxCombinedImageSamplerDescriptorCount
属性来确定最大描述符大小,该大小可容纳实现支持的任何和所有需要采样器 Y′CBCR 转换的格式,而不是查询描述符布局中应用程序可能使用的所有潜在格式。
要获取特定图像创建参数的最佳 Android 硬件缓冲区使用标志,请将 VkAndroidHardwareBufferUsageANDROID
结构添加到传递给 vkGetPhysicalDeviceImageFormatProperties2 的 VkImageFormatProperties2 结构的 pNext
链中。此结构的定义如下:
// Provided by VK_ANDROID_external_memory_android_hardware_buffer
typedef struct VkAndroidHardwareBufferUsageANDROID {
VkStructureType sType;
void* pNext;
uint64_t androidHardwareBufferUsage;
} VkAndroidHardwareBufferUsageANDROID;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
androidHardwareBufferUsage
返回 Android 硬件缓冲区使用标志。
当相应的 Vulkan 图像使用或图像创建标志包含在 VkPhysicalDeviceImageFormatInfo2 的 usage
或 flags
字段中时,androidHardwareBufferUsage
字段必须包含AHardwareBuffer 使用等效表中列出的 Android 硬件缓冲区使用标志。它必须至少包含一个 GPU 使用标志 (AHARDWAREBUFFER_USAGE_GPU_*
),即使没有请求相应的 Vulkan 使用或标志。
要求至少一个 GPU 使用标志可确保 Android 硬件缓冲区内存将在 Vulkan 实现可访问的内存池中分配,并且基于使用标志专门化内存布局不会阻止它与 Vulkan 兼容。实现可能通过使用供应商使用标志来指示仅需要 VkImageFormatProperties2 中指示的 Vulkan 用途,从而避免由此要求引起的不必要的限制。 |
要查询当访问图像时使用 VK_IMAGE_USAGE_HOST_TRANSFER_BIT
是否会对设备性能产生负面影响,请将 VK_IMAGE_USAGE_HOST_TRANSFER_BIT
添加到 VkPhysicalDeviceImageFormatInfo2::usage
,并将 VkHostImageCopyDevicePerformanceQuery
结构添加到传递给 vkGetPhysicalDeviceImageFormatProperties2 的 VkImageFormatProperties2 结构的 pNext
链中。此结构的定义如下:
// Provided by VK_VERSION_1_4
typedef struct VkHostImageCopyDevicePerformanceQuery {
VkStructureType sType;
void* pNext;
VkBool32 optimalDeviceAccess;
VkBool32 identicalMemoryLayout;
} VkHostImageCopyDevicePerformanceQuery;
或等效的:
// Provided by VK_EXT_host_image_copy
typedef VkHostImageCopyDevicePerformanceQuery VkHostImageCopyDevicePerformanceQueryEXT;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
如果使用主机图像复制与具有相同创建参数,并绑定到相同 VkDeviceMemory 的图像相比,对设备访问性能没有不利影响(除了
VK_IMAGE_USAGE_HOST_TRANSFER_BIT
被替换为VK_IMAGE_USAGE_TRANSFER_SRC_BIT
和VK_IMAGE_USAGE_TRANSFER_DST_BIT
之外),则optimalDeviceAccess
返回VK_TRUE
。 -
如果使用主机图像复制对内存布局没有影响,与具有相同创建参数,并绑定到相同 VkDeviceMemory 的图像相比(除了
VK_IMAGE_USAGE_HOST_TRANSFER_BIT
被替换为VK_IMAGE_USAGE_TRANSFER_SRC_BIT
和VK_IMAGE_USAGE_TRANSFER_DST_BIT
之外),则identicalMemoryLayout
返回VK_TRUE
。
如果 identicalMemoryLayout
为 VK_FALSE
,则实现可能在 optimalDeviceAccess
中返回 VK_FALSE
。如果 identicalMemoryLayout
为 VK_TRUE
,则 optimalDeviceAccess
必须为 VK_TRUE
。
实现可能在 optimalDeviceAccess
中返回 VK_TRUE
,而 identicalMemoryLayout
为 VK_FALSE
。在这种情况下,任何设备性能影响应该是不可衡量的。
如果 VkPhysicalDeviceImageFormatInfo2::format
是块压缩格式,并且 vkGetPhysicalDeviceImageFormatProperties2 返回 VK_SUCCESS
,则实现必须在 optimalDeviceAccess
中返回 VK_TRUE
。
应用程序可以利用 |
如果实现具有不同的内存布局模式,其中一些模式在主机上更容易访问,则内存布局可能不相同,但仍然被认为对设备访问是最佳的。 |
|
要确定立方滤波是否可以与给定的图像格式和给定的图像视图类型一起使用,请将 VkPhysicalDeviceImageViewImageFormatInfoEXT 结构添加到 VkPhysicalDeviceImageFormatInfo2 结构的 pNext
链中,并将 VkFilterCubicImageViewImageFormatPropertiesEXT 结构添加到 VkImageFormatProperties2 结构的 pNext
链中。
VkPhysicalDeviceImageViewImageFormatInfoEXT
结构的定义如下:
// Provided by VK_EXT_filter_cubic
typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT {
VkStructureType sType;
void* pNext;
VkImageViewType imageViewType;
} VkPhysicalDeviceImageViewImageFormatInfoEXT;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
imageViewType
是指定图像视图类型的 VkImageViewType 值。
VkFilterCubicImageViewImageFormatPropertiesEXT
结构的定义如下:
// Provided by VK_EXT_filter_cubic
typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
VkStructureType sType;
void* pNext;
VkBool32 filterCubic;
VkBool32 filterCubicMinmax;
} VkFilterCubicImageViewImageFormatPropertiesEXT;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
filterCubic
指示图像格式、图像类型和图像视图类型是否可以与立方滤波一起使用。此字段由实现设置。将忽略应用程序指定的值。 -
filterCubicMinmax
指示图像格式、图像类型和图像视图类型是否可以与立方滤波和最小值最大值滤波一起使用。此字段由实现设置。将忽略应用程序指定的值。
支持的采样计数
vkGetPhysicalDeviceImageFormatProperties
在 sampleCounts
中返回一个 VkSampleCountFlagBits 的位掩码,指定图像参数支持的采样计数。
如果以下至少一个条件为真,则 sampleCounts
将为 VK_SAMPLE_COUNT_1_BIT
-
tiling
为VK_IMAGE_TILING_LINEAR
-
type
不是VK_IMAGE_TYPE_2D
-
flags
包含VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
-
由 vkGetPhysicalDeviceFormatProperties 返回的
VkFormatProperties
::optimalTilingFeatures
中的VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
标志和VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
标志均未设置 -
VkPhysicalDeviceExternalImageFormatInfo::
handleType
是一个外部句柄类型,该类型不需要多采样图像支持。 -
format
是 需要采样器 Y′CBCR 转换的格式之一 -
usage
包含VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
-
usage
包含VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT
否则,sampleCounts
中设置的位将是指定的 usage
和 format
值支持的采样计数。对于 usage
中设置的每个位,支持的采样计数与 VkPhysicalDeviceLimits
中的限制相关,如下所示
-
如果
usage
包含VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
且format
是浮点或定点颜色格式,则为VkPhysicalDeviceLimits
::framebufferColorSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
且format
是整数格式,则为VkPhysicalDeviceVulkan12Properties
::framebufferIntegerColorSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
且format
包含深度分量,则为VkPhysicalDeviceLimits
::framebufferDepthSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
且format
包含模板分量,则为VkPhysicalDeviceLimits
::framebufferStencilSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_SAMPLED_BIT
且format
包含颜色分量,则为VkPhysicalDeviceLimits
::sampledImageColorSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_SAMPLED_BIT
且format
包含深度分量,则为VkPhysicalDeviceLimits
::sampledImageDepthSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_SAMPLED_BIT
且format
是整数格式,则为VkPhysicalDeviceLimits
::sampledImageIntegerSampleCounts
的超集 -
如果
usage
包含VK_IMAGE_USAGE_STORAGE_BIT
,则为VkPhysicalDeviceLimits
::storageImageSampleCounts
的超集
如果在 usage
中设置了多个位,则 sampleCounts
将是上述每个使用情况值的交集。
如果 usage
中未设置上述任何位,则 VkPhysicalDeviceLimits
中没有相应的限制。在这种情况下,sampleCounts
必须至少包含 VK_SAMPLE_COUNT_1_BIT
。
基于图像类型允许的范围值
对于某些类型的图像,实现可能支持大于 要求的最小/最大值的范围值。VkImageFormatProperties::maxExtent
对于每种类型都受以下约束的约束。
实现必须支持所有类型的图像,其尺寸大小上限为 要求的最小/最大值。因此,对附加功能的查询必须返回至少与要求值一样大的范围值。 |
对于 VK_IMAGE_TYPE_1D
-
maxExtent.width
≥ VkPhysicalDeviceLimits::maxImageDimension1D
-
maxExtent.height
= 1 -
maxExtent.depth
= 1
对于 VK_IMAGE_TYPE_2D
,当 flags
不包含 VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
时
-
maxExtent.width
≥ VkPhysicalDeviceLimits::maxImageDimension2D
-
maxExtent.height
≥ VkPhysicalDeviceLimits::maxImageDimension2D
-
maxExtent.depth
= 1
对于 VK_IMAGE_TYPE_2D
,当 flags
包含 VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
时
-
maxExtent.width
≥ VkPhysicalDeviceLimits::maxImageDimensionCube
-
maxExtent.height
≥ VkPhysicalDeviceLimits::maxImageDimensionCube
-
maxExtent.depth
= 1
对于 VK_IMAGE_TYPE_3D
-
maxExtent.width
≥ VkPhysicalDeviceLimits::maxImageDimension3D
-
maxExtent.height
≥ VkPhysicalDeviceLimits::maxImageDimension3D
-
maxExtent.depth
≥ VkPhysicalDeviceLimits::maxImageDimension3D
附加缓冲区功能
要查询缓冲区支持的外部句柄类型,请调用
// Provided by VK_VERSION_1_1
void vkGetPhysicalDeviceExternalBufferProperties(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
VkExternalBufferProperties* pExternalBufferProperties);
或等效命令:
// Provided by VK_KHR_external_memory_capabilities
void vkGetPhysicalDeviceExternalBufferPropertiesKHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
VkExternalBufferProperties* pExternalBufferProperties);
-
physicalDevice
是从中查询缓冲区功能的物理设备。 -
pExternalBufferInfo
是指向 VkPhysicalDeviceExternalBufferInfo 结构的指针,该结构描述了 vkCreateBuffer 将会使用的参数。 -
pExternalBufferProperties
是指向 VkExternalBufferProperties 结构的指针,该结构中返回功能。
VkPhysicalDeviceExternalBufferInfo
结构的定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceExternalBufferInfo {
VkStructureType sType;
const void* pNext;
VkBufferCreateFlags flags;
VkBufferUsageFlags usage;
VkExternalMemoryHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalBufferInfo;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
flags
是 VkBufferCreateFlagBits 的位掩码,描述缓冲区的附加参数,对应于 VkBufferCreateInfo::flags
。 -
usage
是 VkBufferUsageFlagBits 的位掩码,描述缓冲区的预期用途,对应于 VkBufferCreateInfo::usage
。 -
handleType
是一个 VkExternalMemoryHandleTypeFlagBits 值,指定将与缓冲区关联的内存一起使用的内存句柄类型。
在此结构的 usage
中仅返回 VkBufferUsageFlagBits 中可表示的使用标志。如果 pNext
链包含 VkBufferUsageFlags2CreateInfo 结构,则缓冲区的全部使用标志都会在 VkBufferUsageFlags2CreateInfo::usage
中返回。
VkExternalBufferProperties
结构体定义如下
// Provided by VK_VERSION_1_1
typedef struct VkExternalBufferProperties {
VkStructureType sType;
void* pNext;
VkExternalMemoryProperties externalMemoryProperties;
} VkExternalBufferProperties;
或等效的:
// Provided by VK_KHR_external_memory_capabilities
typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
externalMemoryProperties
是一个 VkExternalMemoryProperties 结构体,指定外部句柄类型在与指定缓冲区创建参数一起使用时的各种功能。
可选的信号量功能
信号量可能支持将其 有效负载 导入和导出到外部句柄。要查询信号量支持的外部句柄类型,请调用
// Provided by VK_VERSION_1_1
void vkGetPhysicalDeviceExternalSemaphoreProperties(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
或等效命令:
// Provided by VK_KHR_external_semaphore_capabilities
void vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
-
physicalDevice
是从中查询信号量功能的物理设备。 -
pExternalSemaphoreInfo
是指向 VkPhysicalDeviceExternalSemaphoreInfo 结构体的指针,该结构体描述了 vkCreateSemaphore 将使用的参数。 -
pExternalSemaphoreProperties
是指向 VkExternalSemaphoreProperties 结构体的指针,该结构体用于返回功能。
VkPhysicalDeviceExternalSemaphoreInfo
结构体定义如下
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
VkStructureType sType;
const void* pNext;
VkExternalSemaphoreHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalSemaphoreInfo;
或等效的:
// Provided by VK_KHR_external_semaphore_capabilities
typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
handleType
是一个 VkExternalSemaphoreHandleTypeFlagBits 值,指定要返回其功能的外部信号量句柄类型。
在 VkPhysicalDeviceExternalSemaphoreInfo::handleType
中可能设置的位,指定外部信号量句柄类型,包括
// Provided by VK_VERSION_1_1
typedef enum VkExternalSemaphoreHandleTypeFlagBits {
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010,
// Provided by VK_FUCHSIA_external_semaphore
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080,
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,
} VkExternalSemaphoreHandleTypeFlagBits;
或等效的:
// Provided by VK_KHR_external_semaphore_capabilities
typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR;
-
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
指定一个 POSIX 文件描述符句柄,该句柄在 Vulkan 和其他兼容 API 之外的有效用途有限。它必须与 POSIX 系统调用dup
、dup2
、close
和非标准系统调用dup3
兼容。此外,它必须可以使用SCM_RIGHTS
控制消息通过套接字传输。它拥有对其 Vulkan 信号量对象表示的底层同步原语的引用。 -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
指定一个 NT 句柄,该句柄在 Vulkan 和其他兼容 API 之外的有效用途有限。它必须与函数DuplicateHandle
、CloseHandle
、CompareObjectHandles
、GetHandleInformation
和SetHandleInformation
兼容。它拥有对其 Vulkan 信号量对象表示的底层同步原语的引用。 -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
指定一个全局共享句柄,该句柄在 Vulkan 和其他兼容 API 之外的有效用途有限。它与任何本机 API 都不兼容。它不拥有对其 Vulkan 信号量对象表示的底层同步原语的引用,因此当与其关联的所有 Vulkan 信号量对象都被销毁时,它将失效。 -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
指定一个由ID3D12Device
::CreateSharedHandle
返回的 NT 句柄,该句柄引用 Direct3D 12 栅栏,或者由ID3D11Device5
::CreateFence
返回的 NT 句柄,该句柄引用 Direct3D 11 栅栏。它拥有对其 Direct3D 栅栏关联的底层同步原语的引用。 -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT
是VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
的别名,含义相同。它提供了与 D3D11 栅栏交互时的便利性和代码清晰度。 -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
指定一个指向 Linux 同步文件或 Android 栅栏对象的 POSIX 文件描述符句柄。它可以与任何接受有效的同步文件或栅栏作为输入的本机 API 一起使用。它拥有对其与文件描述符关联的底层同步原语的引用。支持导入此句柄类型的实现必须接受其运行的本机系统支持的任何类型的同步或栅栏 FD。 -
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA
指定一个指向 Zircon 事件对象的句柄。它可以与任何接受 Zircon 事件句柄的本机 API 一起使用。Zircon 事件句柄使用ZX_RIGHTS_BASIC
和ZX_RIGHTS_SIGNAL
权限创建。Fuchsia 上的 Vulkan 在发出信号或等待时仅使用 ZX_EVENT_SIGNALED 位。
实现生成的 |
某些外部信号量句柄类型只能在同一个底层物理设备和/或同一个驱动程序版本中共享,如下表定义
句柄类型 |
|
|
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
无限制 |
无限制 |
|
无限制 |
无限制 |
// Provided by VK_VERSION_1_1
typedef VkFlags VkExternalSemaphoreHandleTypeFlags;
或等效的:
// Provided by VK_KHR_external_semaphore_capabilities
typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR;
VkExternalSemaphoreHandleTypeFlags
是一种位掩码类型,用于设置零个或多个 VkExternalSemaphoreHandleTypeFlagBits 的掩码。
VkExternalSemaphoreProperties
结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkExternalSemaphoreProperties {
VkStructureType sType;
void* pNext;
VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes;
VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes;
VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures;
} VkExternalSemaphoreProperties;
或等效的:
// Provided by VK_KHR_external_semaphore_capabilities
typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
exportFromImportedHandleTypes
是一个 VkExternalSemaphoreHandleTypeFlagBits 的位掩码,指定可以从中导出导入的句柄handleType
的类型。 -
compatibleHandleTypes
是一个 VkExternalSemaphoreHandleTypeFlagBits 的位掩码,指定在创建信号量时可以与handleType
同时指定的句柄类型。 -
externalSemaphoreFeatures
是一个 VkExternalSemaphoreFeatureFlagBits 的位掩码,描述handleType
的特性。
如果实现不支持 handleType
,则 VkExternalSemaphoreProperties::externalSemaphoreFeatures
将为零。
可以设置在 VkExternalSemaphoreProperties::externalSemaphoreFeatures
中的位,用于指定外部信号量句柄类型的特性,包括
// Provided by VK_VERSION_1_1
typedef enum VkExternalSemaphoreFeatureFlagBits {
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001,
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT,
// Provided by VK_KHR_external_semaphore_capabilities
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT,
} VkExternalSemaphoreFeatureFlagBits;
或等效的:
// Provided by VK_KHR_external_semaphore_capabilities
typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR;
-
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
指定此类型的句柄可以从 Vulkan 信号量对象导出。 -
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
指定此类型的句柄可以作为 Vulkan 信号量对象导入。
// Provided by VK_VERSION_1_1
typedef VkFlags VkExternalSemaphoreFeatureFlags;
或等效的:
// Provided by VK_KHR_external_semaphore_capabilities
typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR;
VkExternalSemaphoreFeatureFlags
是一种位掩码类型,用于设置零个或多个 VkExternalSemaphoreFeatureFlagBits 的掩码。
可选的栅栏功能
栅栏可能支持将其 有效载荷 导入和导出到外部句柄。要查询栅栏支持的外部句柄类型,请调用
// Provided by VK_VERSION_1_1
void vkGetPhysicalDeviceExternalFenceProperties(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
VkExternalFenceProperties* pExternalFenceProperties);
或等效命令:
// Provided by VK_KHR_external_fence_capabilities
void vkGetPhysicalDeviceExternalFencePropertiesKHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
VkExternalFenceProperties* pExternalFenceProperties);
-
physicalDevice
是要从中查询栅栏功能的物理设备。 -
pExternalFenceInfo
是指向 VkPhysicalDeviceExternalFenceInfo 结构的指针,该结构描述了 vkCreateFence 将使用的参数。 -
pExternalFenceProperties
是指向 VkExternalFenceProperties 结构的指针,其中返回功能。
VkPhysicalDeviceExternalFenceInfo
结构定义如下:
// Provided by VK_VERSION_1_1
typedef struct VkPhysicalDeviceExternalFenceInfo {
VkStructureType sType;
const void* pNext;
VkExternalFenceHandleTypeFlagBits handleType;
} VkPhysicalDeviceExternalFenceInfo;
或等效的:
// Provided by VK_KHR_external_fence_capabilities
typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR;
-
sType
是一个 VkStructureType 值,用于标识此结构。 -
pNext
为NULL
或指向扩展此结构的结构的指针。 -
handleType
是一个 VkExternalFenceHandleTypeFlagBits 值,指定将返回其功能的外部栅栏句柄类型。
实现生成的 |
可以设置在
-
VkPhysicalDeviceExternalFenceInfo::
handleType
中的位 -
VkExternalFenceProperties::
exportFromImportedHandleTypes
-
VkExternalFenceProperties::
compatibleHandleTypes
表示外部栅栏句柄类型,它们是
// Provided by VK_VERSION_1_1
typedef enum VkExternalFenceHandleTypeFlagBits {
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002,
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004,
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008,
// Provided by VK_KHR_external_fence_capabilities
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT,
// Provided by VK_KHR_external_fence_capabilities
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT,
// Provided by VK_KHR_external_fence_capabilities
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,
// Provided by VK_KHR_external_fence_capabilities
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,
} VkExternalFenceHandleTypeFlagBits;
或等效的:
// Provided by VK_KHR_external_fence_capabilities
typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR;
-
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
指定一个 POSIX 文件描述符句柄,该句柄在 Vulkan 和其他兼容 API 之外只有有限的有效用法。它必须与 POSIX 系统调用dup
、dup2
、close
和非标准系统调用dup3
兼容。此外,它必须可以使用SCM_RIGHTS
控制消息通过套接字传输。它拥有其 Vulkan 栅栏对象表示的底层同步原语的引用。 -
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
指定一个 NT 句柄,该句柄在 Vulkan 和其他兼容 API 之外只有有限的有效用法。它必须与函数DuplicateHandle
、CloseHandle
、CompareObjectHandles
、GetHandleInformation
和SetHandleInformation
兼容。它拥有其 Vulkan 栅栏对象表示的底层同步原语的引用。 -
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
指定一个全局共享句柄,该句柄在 Vulkan 和其他兼容 API 之外只有有限的有效使用。它与任何原生 API 都不兼容。它不拥有对其 Vulkan 栅栏对象表示的底层同步原语的引用,因此当与其关联的所有 Vulkan 栅栏对象都被销毁时,它将失效。 -
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
指定一个 POSIX 文件描述符句柄,指向 Linux Sync File 或 Android Fence。它可以与任何接受有效的同步文件或栅栏作为输入的原生 API 一起使用。它拥有对与文件描述符关联的底层同步原语的引用。支持导入此句柄类型的实现必须接受其运行的原生系统支持的任何类型的同步或栅栏 FD。
某些外部栅栏句柄类型只能在同一个底层物理设备和/或同一个驱动程序版本内共享,如下表定义
句柄类型 |
|
|
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
必须匹配 |
必须匹配 |
|
无限制 |
无限制 |
// Provided by VK_VERSION_1_1
typedef VkFlags VkExternalFenceHandleTypeFlags;
或等效的:
// Provided by VK_KHR_external_fence_capabilities
typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR;
VkExternalFenceHandleTypeFlags
是一个位掩码类型,用于设置零个或多个 VkExternalFenceHandleTypeFlagBits 的掩码。
VkExternalFenceProperties
结构定义如下
// Provided by VK_VERSION_1_1
typedef struct VkExternalFenceProperties {
VkStructureType sType;
void* pNext;
VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes;
VkExternalFenceHandleTypeFlags compatibleHandleTypes;
VkExternalFenceFeatureFlags externalFenceFeatures;
} VkExternalFenceProperties;
或等效的:
// Provided by VK_KHR_external_fence_capabilities
typedef VkExternalFenceProperties VkExternalFencePropertiesKHR;
-
exportFromImportedHandleTypes
是一个 VkExternalFenceHandleTypeFlagBits 的位掩码,指示可以从哪些导入的句柄类型handleType
导出。 -
compatibleHandleTypes
是一个 VkExternalFenceHandleTypeFlagBits 的位掩码,指定在创建栅栏时可以与handleType
同时指定的句柄类型。 -
externalFenceFeatures
是一个 VkExternalFenceFeatureFlagBits 的位掩码,指示handleType
的功能。
如果实现不支持 handleType
,则 VkExternalFenceProperties::externalFenceFeatures
将为零。
可以在 VkExternalFenceProperties::externalFenceFeatures
中设置的位,指示外部栅栏句柄类型的功能,包括:
// Provided by VK_VERSION_1_1
typedef enum VkExternalFenceFeatureFlagBits {
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001,
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002,
// Provided by VK_KHR_external_fence_capabilities
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT,
// Provided by VK_KHR_external_fence_capabilities
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT,
} VkExternalFenceFeatureFlagBits;
或等效的:
// Provided by VK_KHR_external_fence_capabilities
typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR;
-
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
指定此类型的句柄可以从 Vulkan 栅栏对象导出。 -
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
指定此类型的句柄可以导入到 Vulkan 栅栏对象。
// Provided by VK_VERSION_1_1
typedef VkFlags VkExternalFenceFeatureFlags;
或等效的:
// Provided by VK_KHR_external_fence_capabilities
typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR;
VkExternalFenceFeatureFlags
是一个位掩码类型,用于设置零个或多个 VkExternalFenceFeatureFlagBits 的掩码。
时间戳校准能力
要查询物理设备支持时间戳校准的时间域集合,请调用
// Provided by VK_KHR_calibrated_timestamps
VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(
VkPhysicalDevice physicalDevice,
uint32_t* pTimeDomainCount,
VkTimeDomainKHR* pTimeDomains);
或等效命令:
// Provided by VK_EXT_calibrated_timestamps
VkResult vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
VkPhysicalDevice physicalDevice,
uint32_t* pTimeDomainCount,
VkTimeDomainKHR* pTimeDomains);
-
physicalDevice
是要从中查询可校准时间域集合的物理设备。 -
pTimeDomainCount
是一个指向整数的指针,该整数与可用或查询的可校准时间域的数量有关,如下所述。 -
pTimeDomains
要么是NULL
,要么是指向 VkTimeDomainKHR 值数组的指针,指示支持的可校准时间域。
如果 pTimeDomains
为 NULL
,则在 pTimeDomainCount
中返回给定 physicalDevice
支持的可校准时间域的数量。否则,pTimeDomainCount
必须指向应用程序设置为 pTimeDomains
数组中元素数量的变量,并且在返回时,该变量会被实际写入 pTimeDomains
的值数量覆盖。如果 pTimeDomainCount
的值小于支持的可校准时间域的数量,则最多将 pTimeDomainCount
个值写入 pTimeDomains
,并且将返回 VK_INCOMPLETE
而不是 VK_SUCCESS
,以指示并非所有可用的时间域都已返回。