Resizable BAR support
现在典型的独立GPU都只有Frame Buffer的一小部分被暴露在PCI总线上。为了和32位操作系统兼容,独立GPU都声明了一段256M的区域用于GPU的FrameBuffer并且固件也是这样设置的。
对于WDDM v2,Windows将在固件初始化之后来重新协商GPU BAR的大小,这就支持了GPU的大小可变BAR特性。 Resizable BAR Capability , PCI SIG Specifications Library。
支持BAR大小可变的GPU必须确保在对BAR重新编程的时候能够正常显示一个静态图像。我们特别不希望在这个过程中看到显示器变成空白或者黑掉。在固件显示图片,boot loader图片和第一次KMD生成图片之间进行流畅的切换是很重要。为达到这个目的,需要在重新协商的过程中确保不会有内容经过PCI传输到GPU。
这个重新协商的过程大部分对于KMD都是不可见的。当重新协商成功之后,KMD会看到GPU BAR的大小被改变了,被变成了能够暴露独立显卡的整个VRAM的最大值。
成功改变大小之后,KMD应该暴露一个CPU可见的内存段给VMM。当CPU需要访问内存段中内容时,VMM会直接映射CPU虚拟地址到这段BAR范围上。