Vulkan Programming Guide 第一章(2)

物理设备内存

在许多情况下,Vulkan设备是与主主机处理器分离的硬件的物理部件,或者工作方式不同,以便以专门的方式访问存储器。 Vulkan中的设备内存指的是设备可访问的内存,可用作纹理和其他数据的后备存储。 内存分为多种类型,每种类型都有一组属性,例如主机和设备之间的缓存标志和一致性行为。 每种类型的存储器然后由设备的堆之一支持,其中可以有几个。
要查询堆的配置和设备支持的内存类型,请调用

void vkGetPhysicalDeviceMemoryProperties  (
VkPhysicalDevice physicalDevice, 
VkPhysicalDeviceMemoryProperties* pMemoryProperties );

生成的内存结构写入VkPhysicalDeviceMemoryProperties结构,其结构在pMemoryProperties中传递。 VkPhysicalDeviceMemoryProperties结构包含设备堆及其支持的内存类型的属性。 这个结构的定义是

typedef struct VkPhysicalDeviceMemoryProperties { 
uint32_t            memoryTypeCount;

VkMemoryType       memoryTypes[VK_MAX_MEMORY_TYPES]; 
uint32_t            memoryHeapCount; 
VkMemoryHeap        memoryHeaps[VK_MAX_MEMORY_HEAPS];
} VkPhysicalDeviceMemoryProperties;

内存类型的多少在memoryTypeCount字段中获取。 可能获取的内存类型的最大数目是VK_MAX_MEMORY_TYPES的值,其定义为32. memoryTypes数组包含描述每种内存类型的memoryTypeCount VkMemoryType结构。 VkMemoryType的定义是

typedef struct VkMemoryType { 
VkMemoryPropertyFlags   propertyFlags; 
uint32_t                heapIndex; 
} VkMemoryType;

这是一个只包含一组标志和内存类型的堆索引的简单结构。 flags字段描述了存储器的类型,并由VkMemoryPropertyFlagBits标志的组合构成。 标志的含义如下:
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT 表示内存是本地的(即物理连接到)设备。如果该位未设置,则可以假定存储器对于主机是本地的。
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT 表示使用的内存分配
此类型可以由主机映射和读取或写入。如果该位未被设置,则这种类型的存储器不能被主机直接访问,而是被设备独占使用。
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT 表示当此类型的内存由主机和设备同时访问时,这些访问将在两个客户端之间一致。如果未设置此位,则设备或主机可能不会看到每个执行的写入的结果,直到高速缓存被显式刷新。
VK_MEMORY_PROPERTY_HOST_CACHED_BIT 表示此类型的内存中的数据由主机缓存。对这种类型的存储器的读取访问通常比如果该位未被设置时的读取访问更快。然而,设备的访问可以具有略高的延迟,特别是如果存储器也是一致的。
VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT 表示使用此类型分配的内存不一定立即从关联的堆消耗空间,并且驱动程序可能推迟物理内存分配,直到内存对象用于回退资源。
每种内存类型都报告在VkMemoryType结构的heapIndex字段,并且可以得到该堆消耗空间的大小。 这是从调用vkGetPhysicalDeviceMemoryProperties()得到kPhysicalDeviceMemoryProperties结构中返回的memoryHeaps数组的索引。 memoryHeaps数组的每个元素描述了设备的一个内存堆。 这个结构的定义是

typedef struct VkMemoryHeap { 
VkDeviceSize            size; 
VkMemoryHeapFlags       flags; 
} VkMemoryHeap;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值