0

为什么 mipmap 会提高性能?我在网上某处读到“当我们有 256 x 256 纹理数据并想要将其映射到 4x4 时,驱动程序只会将生成的 4x4 mipmap 级别复制到 GPU 内存而不是 256x 256 数据。采样将适用于复制的 4x4 数据在 GPU 内存上,这将节省大量计算”我只想知道它是否正确?

此外,当 glTeximage 调用发生时,它会将纹理数据上传到 gpu 内存中,这些数据在 glteximage 调用中传递。然后它与上面的说法相冲突。当我们调用 glgeneratemipmap() 时,它是否会在 CPU 端创建所有 mipmap 级别,然后在 GPU 端复制所有这些级别?

4

1 回答 1

2

Mipmapping 提高性能有两个主要原因。第一个是因为它减少了 GPU 内存和纹理单元之间的带宽,第二个是因为它改进了纹理单元内部的缓存。

想象一下,您有一个应用了纹理的远处物体。使用 mipmaping GPU 而不是处理、读取和缓存一个巨大的纹理(级别 0),它会读取一个较小的纹理。在这种情况下,带宽减少是非常明显的。

mipmaping 的带宽和缓存齐头并进。对距离对象的纹理进行采样很可能会以稀疏的方式读取纹理。例如读取 texel x,y 并为下一个片段读取 x+10,y+10。x+10,y+10 可能在另一个高速缓存行中。从较小的纹理读取时,尽管缓存未命中可能要少得多。

glTexImageXX 创建一个单一的关卡并将像素数据上传到 GPU。当调用 glGenerateMipmap 时,驱动程序将为额外的级别分配 GPU 内存,并且很可能它会执行单个或多个 GPU 作业来填充这些级别。在某些情况下,它会在 CPU 上做同样的事情,然后将数据上传到 GPU。

于 2013-12-25T09:49:38.780 回答