Vulkan 内存对齐要求

2024-03-02

我正在为 Vulkan 设备内存实现一个简单的内存管理器,并希望确保我了解内存的对齐要求以及如何满足这些要求。

因此,假设我使用 vkAllocateMemory 分配了一个内存“池”,并希望将该池中的内存块子分配给各个资源(基于 VkMemoryRequirements 结构),以下伪代码是否能够分配该内存具有正确的大小和对齐要求吗?

  • 使用RequiredSize和RequiredAlignment请求内存
  • 遍历池中的块,寻找空闲且大小 > requiredSize 的块
  • 如果当前块在内存中的偏移量不能被RequiredAlignment整除,则计算对齐方式和余数之间的差异
  • 如果当前块的大小减去差值小于RequiredSize,则跳到池中的下一个块
  • 如果差值大于0,则插入大小等于差值的填充块,并调整当前未分配的块大小和偏移量
  • 从当前未分配块(现已对齐)的开头分配RequiredSize字节,相应地调整未分配块的大小和偏移量
  • 返回 vkDeviceMemory 句柄(池的)、大小和偏移量(新分配块的)
  • 如果我们到达块列表的末尾,则该池无法分配内存

换句话说,我们是否只需要确保Offset是RequiredAlignment的倍数就可以了?


换句话说,我们是否只需要确保Offset是RequiredAlignment的倍数就可以了?

对于对齐来说这几乎足够了。

in vkBindbuffer内存 https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkBindBufferMemory中的一个有效使用要求是:

memoryOffset must是的整数倍alignment的成员VkMemoryRequirements调用返回的结构vkGetBufferMemoryRequirements with buffer

并且有一个平行的声明有效使用的要求vkBindImageMemory https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkBindImageMemory:

memoryOffset must是的整数倍alignment的成员VkMemoryRequirements调用返回的结构vkGetImageMemoryRequirements with image

如果前一个块包含非线性资源,而当前块包含线性资源,反之亦然,则对齐要求为 VkMemoryRequirements.alignment 和设备的 bufferImageGranularity 中的最大值。这还需要检查内存块的末尾。

However您还需要考虑到池的内存类型必须在memoryTypeBits的旗帜VkMemoryRequirements .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vulkan 内存对齐要求 的相关文章

  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • 在Python中输入一个文本文件并写入多个输出文件

    大家好 我正在输入 filename txt 并生成多个输出文件 filename1 txt filename2 txt 和 filename3 txt 更具体地说 这是 filename txt 中的输入数据 Time ms Channe
  • rvm 无法再在 Mac OS X Mountain Lion 上安装 1.8.7-p352

    我将 rvm 升级到 1 15 8 然后在 zsh 出现一些问题后又降回 1 15 7 降级后 我的 Ruby 1 9 版本恢复正常 但 1 8 7 无法再次安装 出现两个错误 Error running patch F 25 p1 N f
  • Fabric JS 通过 ID 以编程方式选择对象

    在 Fabric JS 中 我需要通过给定的对象名称 ID Circle 来选择对象 var onCircle function canvas add new fabric Circle id Circle radius 30 fill f
  • 使用分数的模算术

    我陷入了这个使用整数和分数模 10 相乘的密码学问题 这是等式 7 4 11 mod 10 我知道我应该将其转换为整数 因为 mod 运算符不适用于分数 但我无法弄清楚这一点 明显地 7 4 11 28 11 但我无法得到分数的 mod 1
  • JQuery.validate - 仅关于模糊的一条规则;其余的应该正常吧?

    我已经用小提琴来展示我试图为我的用户 ID 字段执行的简单验证 使其成为必需 尽可能积极地验证 设置最小长度 尽可能积极地验证 设置最大长度 尽可能积极地验证 运行 AJAX 调用以确保用户 ID 不存在 我只想在模糊时运行它 我没有使用
  • GDB 中断命令不会在命令文件中执行

    我有一个调试脚本 它执行以下操作 设置两个断点 让我们称呼他们吧start and end断点 启动后 脚本将继续执行 直到start命中断点 once start命中断点 我执行单步执行 直到end命中断点 这是我的命令文件 end br
  • vue.js 中的过滤器和方法有什么区别?

    我想将时间戳转换为北京时间 我应该使用过滤器还是方法来实现此功能 有什么区别 比如性能上的区别 仅当基础时间戳更改时 显示的北京时间才需要更改 方法因此应该not be used https v2 vuejs org v2 guide co
  • 如何仅显示绘图中特定曲线子集的图例?

    t 0 0 01 2 pi s sin t c cos t m sin t hold on plot t s r plot t c b plot t m g hold off legend cosine 我的绘图中有几条曲线 我只想显示其中
  • 使用 LINQ 对对象列表进行分组

    我有一个对象 public class Customer public int ID get set public string Name get set public int GroupID get set 我返回一个可能如下所示的列表
  • docker-compose 中不同 docker 服务之间的通信

    我刚刚开始使用 docker compose 目前正在努力解决不同服务之间的通信问题 我有2个服务 alice and bob 我希望它们能够互相发送 http 请求 据我了解 服务应该能够通过使用服务名作为主机名来相互访问 很遗憾 ali
  • jQuery 将类添加到单选框未删除

    我使用 jQuery 将一个类添加到单选框 如果它被选中 这工作正常 但在选择另一个单选框时它不会删除该类 我缺少什么 jQuery checkbox radio change function if this is checked thi
  • 在 Visual Studio 中调试期间评估表达式

    我习惯了 Jetbrains IDEA 和 Java 但现在我有一个 NET C 项目并使用 Visual Studio 2017 社区 如果我在 IDEA 中调试代码 当执行在断点处停止时 我始终可以使用 IDE 的 评估表达式 功能来运
  • 从给定的 x86 程序集编写 C 函数

    我正在尝试对这个神秘的函数进行逆向工程 该函数返回一个整数并接受一个结构节点作为参数 include mystery h int mystery struct e4 struct s 头文件是一个简单的结构体声明 struct my str
  • Qt 应用程序:模拟模态行为(启用/禁用用户输入)

    我目前正在开发一个应用程序 该应用程序启动显示附加对话框的单独进程 我试图实现的功能是模拟这些对话框的模式行为 更具体地说 我需要应用程序在对话框启动时停止处理所有输入 包括鼠标和键盘 并在对话框关闭时恢复 对话框保持在应用程序顶部并不是那
  • 不使用 ASP.Net Core 2 中的迁移命令 Update-Database 创建数据库

    我使用 WebAPI 创建了新的 ASP Net core 项目 使用下面的链接 jwt authentication with aspnet core 2 web api angular 5 net core identity and f
  • 使 Java 应用程序对用户不可见

    我正在尝试找出一种方法使 Java 应用程序对用户不可见 基本上只是想删除this http screensnapr com e atyZkF png lt Image 如何才能做到这一点 public class TransparentW
  • 有人可以解释 Spring web.xml 文件吗?

    我是 Java Enterprise 和 Spring 的新手 但我对标准 Java 有很强的掌握 我正在查看一个现有的网络应用程序项目 该项目使用 Tomcat Spring Hibernate 据我所知这是相当常见的 它还使用 DWR
  • 如何在下次按下时聚焦下一个输入(如果有)

    我实际上知道如何做到这一点 但我需要一种不同的方法 所以我有如下文本输入
  • 如何在 macOS 上将 swiftUI 视图导出为 PDF 文件

    我需要在 macOS big sur 上将 swifUIview 导出为 PDF 文件 这是我正在使用的功能 func exportPDF let testView TestView let hostingView NSHostingVie
  • Vulkan 内存对齐要求

    我正在为 Vulkan 设备内存实现一个简单的内存管理器 并希望确保我了解内存的对齐要求以及如何满足这些要求 因此 假设我使用 vkAllocateMemory 分配了一个内存 池 并希望将该池中的内存块子分配给各个资源 基于 VkMemo