首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何测量内存分配和金属限制?

如何测量内存分配和金属限制?
EN

Stack Overflow用户
提问于 2018-11-30 19:13:54
回答 1查看 1.1K关注 0票数 2

我正在构建一个基于Metal的图像查看器,目前正在尝试加载一些相当大的图像(70000 x24000像素)。图像被加载到多个MTLTextures中,每个类型都是MTLTextureType2DArray

金属似乎正在创建纹理和分配所需的内存,因为Xcode报告我的应用程序使用超过9GB的内存。在我的13“MBP与16 GB的内存,我显然没有9GB的GPU内存所有的纹理,所以我假设金属是使用系统内存的分配?

但是,当执行呈现传递时,当我请求当前的呈现传递描述符时,金属会立即抛出一个Insufficient Memory错误。

如何管理纹理分配,使我不超过任何金属或系统的限制?显然,在某种图像大小下,我需要从将整个映像加载到内存中切换到一种更基于块的方法,但这取决于GPU和RAM,不同机器之间的差异很大。

我本以为分配新的纹理会在某个时候开始失败,但我似乎能够分配足够的资源来覆盖宽度为70,000像素和高度为24,000像素(BGRA8)的图像,但是当呈现传递发生时,同样的分配会导致内存错误。

编辑#1:

我刚刚意识到,当使用MTLStorageModeManaged作为纹理时,当我在渲染过程中将纹理分配给片段索引时,金属只需要更新纹理的视频内存表示。如果我没有分配所有的纹理,那么我的内存不足的错误就消失了,因为,大概还有足够的视频内存留给Metal来分配一个可绘制的。

这意味着我可以拥有和系统内存一样多的纹理数据,但我需要小心我在渲染过程中访问了多少纹理数据,以避免耗尽可用的视频内存。

Xcode控制台错误:

由于执行过程中出现错误,命令缓冲区的执行被中止。内存不足(IOAF代码8)

堆栈跟踪:

内存量规:

EN

回答 1

Stack Overflow用户

发布于 2018-11-30 20:13:00

使用以下指导方针确定特定纹理的适当存储模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53563530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档