Windows Vista桌面窗口管理器(2)

在DWM中,我们的每个窗口都用一个Surface表示,都可以看到为是3D的网格。虽然每个窗口还是一个矩形,但它们都位于一个3D空间之中。窗口的操作,比如最大化,还原等等,都发生了变化,它们都是对网格进行3D变换实现的。与以往有了很大的区别。

在Windows Vista中窗口的毛玻璃效果非常绚丽。在窗口的边界,我们可以看到窗口下面的内容。这其中同时具有一个的透明和模糊效果。但是,在实现毛玻璃时,为了不让下面的窗口内容过于清晰影响上面的窗口,DWM组还对下面的窗口实现了模糊效果。其中的实现要点有:

1、模糊下面的内容,这是由自定义的象素Shader实现,这个Shader是一个完全运行在GPU的小程序,它可以并行处理多个象素。
2、模糊只是针对窗口边界下的部分内容。这些内容需要从不同的缓冲提取出来。
3、摸索的方法类似于平均值处理:一个象素的值等于其邻居象素的平局值。

众所周知,Direct3D支持多个Surface,最后显示不同Surface时是通过Flip(翻转)实现的,DWM也是如此。这样实现的结果就是不会在出现以前的Tearing。使得桌面变得更平滑。

现在,我们的桌面虽然称得上是一个全屏幕的Direct3D应用程序。不管是老式只支持帖图加速的图形处理器还是新型的高速图形处理器,我们都需要操作图形处理器的存储系统。这就出现了两个重要的问题:

1、在窗口很多时,运行DWM需要的内存将是一个问题,它随着用户的窗口数增加而增加。
2、DWM会与其它的应用程序共享内存资源。比如DirectX应用程序、视频回放和WPF应用程序等等。

解决这些问题,微软提出了Windows显示驱动模型(Display Driver Model)。WDDM是Vista及以后操作系统的新的DirectX驱动模型。WDDM主要提供三项功能:1、虚拟化视频内存。2、允许与GPU的交互。3、允许DirectX表面可以跨进程共享。

在WDDM中,显示内容是虚拟化的。这就表示显示内容与系统内存一样。我们知道,在系统内存中如果内存分配完毕,此时还有新的分配要求,就会产生第二存储页面,然后由系统管理存储页面和主存储的页面算法和机制。现在,主存储是显示内存,而第二存储页面是系统内存。在显示存储和系统内存都分配完后,将使用磁盘作为视频内存表面。当然,这种情况比较少见。但是这样的设计使得WDDM足够的健壮,应用程序的可靠性也得到增强。在WDDM而言,它将实现非常关键的功能:执行内存的分配、实现分配内存和真正的显示内存的控制。WDDM本身也在不断的改进中。

既然WDDM已经实现了显示内存的虚拟化,那么这就意味着WDDM具有调整应用程序的GPU命令优先级的功能。这种功能通常是由WDDM调度程序实现。因此WDDM必须能中断GPU的某些操作,并保存操作的上下文,以备在必要时恢复操作继续运行。基于这项功能,WDDM提供了两种级别的调度支持:

1、基本调度。它是基于DirectX9的WDDM驱动和硬件所支持的调度粒度。也就是说单独的Primitive和Shader程序不能被中断,上下文交换必须在它们完成后进行。

2、高级调度。它是基于DirectX10的WDDM驱动和硬件所支持的调度粒度。这种调用支持比Primitive和Shader更细粒度的中断。注意,虽然DirectX10支持高级调度,但是它并不是DirecX10所必须的。也就是说,只有部分硬件支持高级调度。桌面窗口管理器使用DirectX9,因此它是支持基本调度。

posted @ 2007-01-16 17:09  赖仪灵  阅读(4340)  评论(7编辑  收藏  举报