附加功能
附加图像功能
本节描述了附加的图像功能,例如更大的尺寸或某些图像类型的额外样本计数,或线性平铺格式图像的附加功能。
要查询特定于图像类型的附加功能,请调用
// 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,以指示并非所有可用的时间域都已返回。