13

我想获取 Android 设备 VRAM 大小。

有没有从程序中获取的方法?

4

6 回答 6

17

让我们使用 Nexus One 进行一些计算:

屏幕分辨率为 480x800。因此,所需的最小视频内存大小为:
400 * 800 * 4 bytes = 1536000 bytes

假设驱动程序可能(并且通常应该)使用多个缓冲区,我们还应该期望如下值:

1536000 * 2 bytes = 3072000 bytes
1536000 * 3 bytes = 4608000 bytes
etc...

如果值不是 1536000 的倍数(或通常的 W x H x 4),那将是很奇怪的。


在对 Android 内部进行一些搜索后,我发现了这个文档

...Android 对驱动程序提出了两个要求:可直接写入的可映射内存的线性地址空间...通过在 /dev/fb0 上调用 open 来访问驱动程序...

所以我尝试获取/dev/graphics/fb0文件的大小(在我的设备上没有/dev/fb0)。

但是直接的方法是行不通的:

 File file = new File("/dev/graphics/fb0");
 file.length(); // ==0, doesn't work, no read access

使用下一个技巧,您可以获得实际大小fb0
>adb pull /dev/graphics/fb0
1659 KB/s (4608000 bytes in 2.712s)

视频内存约为 4mb (Nexus One)。让我们检查一下这是否是 Nexus 屏幕尺寸的倍数:

4608000/1536000 = 3

它看起来像一个正确的值。我们也可以说驱动程序使用三个屏幕缓冲区。


因此,作为结论,您可以使用 adb 检测视频内存大小,但由于文件访问限制,您不能在运行时从您的 android 应用程序中使用这种方法。

于 2011-01-26T00:29:06.423 回答
6

您通常在移动设备上没有专用的“VRAM”。至少你没有 PowerVR 架构(它的 MBX 和 SGX 内核完全主导了市场)。

也就是说,OpenGL 驱动程序会分配正常的 RAM,直到你用完它,分配的越多,留给应用程序的内存就越少。

于 2011-01-28T16:49:34.403 回答
4

Android/OpenGL API 不提供从给定设备读取 VRAM 大小的显式方法。

穷人解决方案
您可以尝试以经验的方式推断 VRAM 大小,添加 1MB 纹理,直到您从gl.glGetError().

于 2011-01-27T12:06:41.153 回答
3

从您的“dmesg”输出中,您可以读取 VRAM,因此对于我的平板电脑:

> [    0.000000] Machine: TDM3730 [    0.000000] Reserving 12582912
> bytes SDRAM for VRAM
> 
> 7>[    3.929962] VRAM: checking region 9f400000 3072                  
> <4>[    3.929992] Failed. Allocating 4194304 bytes for fb 0           
> <7>[    3.935333] VRAM: alloc mem type 0 size 4194304 paddr dec2bd4c  
> <7>[    3.935485] VRAM: checking region 9f400000 3072                 
> <7>[    3.935485] VRAM: found 9f400000, end a0000000                  
> <6>[    3.936584] android_usb gadget: high speed config #1: android   
> <4>[    3.960113] allocating 4194304 bytes for fb 1

或详细信息:

http://pastebin.com/jQSXQqHh

于 2012-06-02T01:49:55.307 回答
1

很简单,只需计算从可用内存到内存的实际容量有多少 Mb 内存,例如我的 lenovo a369i 有 512 RAM 模块,但在设置应用程序时只显示 471 Mb 可用,所以剩下的 41Mb 是为 GPU 保留的,所以结论我的 a369i 有 41Mb vram

此方法基于共享图形内存(wiki)

于 2016-01-01T15:21:42.477 回答
-2

我怀疑 android.os.StatFs 是你要找的:

http://developer.android.com/reference/android/os/StatFs.html

于 2010-07-01T02:10:50.343 回答