【发布时间】:2011-11-10 14:16:56
【问题描述】:
我的目标是看看当使用比物理 GPU 内存容量更多的纹理数据时会发生什么。我的第一次尝试是加载多达 40 个 DDS 纹理,导致内存占用量远远高于 GPU 内存。但是,我的场景在 9500 GT 上仍能以 200+ fps 的速度渲染。
我的结论是:GPU/OpenGL 很智能,只将 mipmap 的某些部分保留在内存中。我认为这在标准配置上是不可能的,但无论如何。
第二次尝试:禁用 mip 映射,这样 GPU 将始终必须从高分辨率纹理中进行采样。再一次,我在内存中加载了大约 40 个 DDS 纹理。我使用 gDEBugger 验证了纹理内存使用情况:1.2 GB。尽管如此,我的场景还是以 200+ fps 的速度渲染。
我唯一注意到的是,当将相机移开然后再次将其对准场景中心时,会出现严重的延迟。好像只有这样它才会将纹理从主存储器传输到 GPU。 (我启用了一些基本的平截头体剔除)
我的问题:发生了什么事?这个 1 GB 的 GPU 如何以 200+ fps 的速度从 1.2 GB 的纹理数据中采样?
【问题讨论】:
-
也许纹理的一部分在 GPU 内存中,一部分在 RAM 中?也许您在 CPU 和 GPU 之间共享内存?也许 PCI express 就是这么快?