|This article relies on references to primary sources or sources affiliated with the subject.|
Desktop Window Manager (DWM, previously Desktop Compositing Engine or DCE) is the desktop graphical user interface system in Windows Vista and Windows 7 that enables the Windows Aero graphical user interface and visual theme. The Desktop Window Manager requires video cards supporting DirectX 9.0 and Shader Model 2.0. DWM is not included with Windows Vista Starter edition. It is included with Windows Vista Home Basic edition, but with some aspects of the Windows Aero interface (such as transparent Glass and Flip 3D) disabled. It is also included with Windows Server 2008, but requires the "Desktop Experience" feature and compatible graphics drivers to be installed.
The Desktop Window Manager is a Compositing window manager, each program has a buffer that it writes data to, the DWM then composites each program's buffer into a final image, compared to the stacking window manager in Windows xp and earlier (and Windows 7 and Vista with aero disabled) which has each program writing to the same main buffer.
DWM works in different ways based on if it is the Windows 7 DWM or the Windows Vista DWM and if the graphics drivers it is using are WDDM 1.0 or 1.1. Under Windows 7 and with WDDM 1.1 drivers, DWM only writes the the program's buffer to the video RAM, even if it is a GDI program, this is because Windows 7 supports (limited) hardware acceleration for GDI and in doing so does not need to keep a copy of the buffer in system RAM so that the cpu can write to it.
Because the compositor has access to the graphics of all applications, it easily allows visual effects that string together visuals from multiple applications, such as transparency. The DWM uses DirectX 9 to perform the function of compositing and rendering in the GPU, freeing the CPU of the task of managing the rendering from the off-screen buffers to the display. However, it does not affect applications painting to the off-screen buffers; depending on the technologies used for that, it might still be CPU-bound. DWM-agnostic rendering techniques like GDI are redirected to the buffers by rendering the UI as bitmaps. DWM-aware rendering technologies like WPF directly make the internal data structures available in a DWM-compatible format. The window contents in the buffers are then converted to DirectX textures.
The desktop itself is a full-screen Direct3D surface, with windows being represented as a mesh consisting of two adjacent (and mutually-inverted) triangles, which are transformed to represent a 2D rectangle. The texture, representing the UI chrome, is then mapped onto these rectangles. Window transitions are implemented as transformations of the meshes, using shader programs. With Windows Vista, the transitions are limited to the set of built-in shaders that implement the transformations. Greg Schechter, a developer at Microsoft has suggested that it might be opened up for developers and users to plug in their own effects in a future release. The DWM only maps the primary desktop object as a 3D surface; other desktop objects, including virtual desktops as well as the secure desktop used by User Account Control are not.
Since all applications render to an off-screen buffer, they can be read off the buffer embedded in other applications as well. Since the off-screen buffer is constantly updated by the application, the embedded rendering will be a dynamic representation of the application window and not a static rendering. This is how the live thumbnail previews, Windows Flip and Windows Flip 3D work in Windows Vista. The DWM exposes a public API that allows applications to access these thumbnail representations. The size of the thumbnail is not fixed; applications can request the thumbnails at any size - smaller than the original window, at the same size or even larger - and DWM will scale them properly before returning. Windows Flip 3D uses the thumbnail APIs to get the window representations as bitmaps, and then uses that as texture for 2D rectangles, which are further processed by custom shaders to transform them to 3D meshes and rotate them in a 3D plane.
The Desktop Window Manager uses Media Integration Layer (MIL), the unmanaged compositor which it shares with Windows Presentation Foundation, to represent the windows as composition nodes in a composition tree, representing the desktop and all the windows hosted in it, which are then rendered by MIL from back of the scene to the front. Since all the windows contribute to the final image, the color of a resultant pixel can be decided by more than one window. This is used to implement effects such as per-pixel transparency. DWM allows custom shaders to be invoked to control how pixels from multiple applications are used to create the resultant pixel. The DWM includes built-in Pixel shader 2.0 programs that computes the color of a pixel in a window by averaging the color of the pixel as determined by the window behind it and its neighboring pixels. These shaders are used by DWM to achieve the blur effect in the window borders of windows managed by DWM, and optionally for the areas where it is requested by the application.
Since MIL provides a retained mode graphics system by caching the composition trees, the job of repainting and refreshing the screen when windows are moved is handled by DWM and MIL, freeing the application of the responsibility. The background data is already in the composition tree and the off-screen buffers, that is directly used to render the background, without having the background applications to re-render themselves by sending them the
WM_PAINT message, as was the case with pre-Vista Windows OSs. DWM uses double-buffered graphics to prevent flickering and tearing during window moves. The compositing engine uses optimizations such as culling to improve performance, as well as not redrawing areas that haven't changed. Because the compositor is multi-monitor aware, the DWM natively supports that too.
During full-screen applications, such as games, the DWM does not perform window compositing and therefore performance will not appreciably decrease.
For rendering techniques that are not DWM-aware, output must be redirected to the DWM buffers. With Windows, either GDI or DirectX can be used for rendering. To make these two work with DWM, redirection techniques for both are provided with DWM.
With GDI, which is the most used UI rendering technique in Microsoft Windows, each application window is notified when it or a part of it comes in view and it is the job of the application to render itself. Without DWM, the rendering rasterizes the UI in a buffer in video memory, from where it is rendered to the screen. Under DWM, a buffer equal to the size of the window is allocated in system memory. GDI calls are redirected to write their outputs to this buffer, rather than the video memory. Another buffer is allocated in the video memory to represent the DirectX surface, which is used as the texture for the Window meshes. The system memory buffer is converted to the DirectX surface separately, and kept in sync. This round-about route is required as GDI cannot output directly in DirectX pixel format. The surface is read by the compositor and is composited to the desktop in video memory. Writing the output of GDI to system memory is not hardware accelerated, nor is conversion to DirectX surface. When a GDI window is minimized, by the limitations of GDI, the buffer is no longer updated. So, DWM uses the last bitmap rendered to the buffer before the application was minimized.
For applications using DirectX to write to a 3D surface, the DirectX implementation in Windows Vista uses WDDM to share the surface with DWM. DWM then uses the surface directly and maps it on to the window meshes. For WPF applications, which are DirectX applications, the compositor renders to such shared surfaces, which are then composited into the final desktop. Applications can mix either rendering technique across multiple child windows, as long as both GDI and DirectX are not used to render the same window. In that case, the ordering between DirectX and GDI rendering cannot be guaranteed, and as such it cannot be guaranteed whether the GDI bitmap from the system memory has been translated to the video memory surface. So, the final composition may not contain the GDI-rendered elements. To prevent this, DWM is temporarily turned off, as long as an application which mixes GDI and DirectX in the same window is running.
In Windows Vista, DWM requires compatible physical or virtual hardware:
- A GPU that supports the Windows Display Driver Model (WDDM)
- Direct3D 9 support
- Pixel Shader 2.0 support,
- Support for 32 bits per pixel
- Passes the Windows Aero acceptance test in the Windows Driver Kit (WDK)
In Windows 7, the Desktop Window Manager has been reworked to use Direct3D 10.1, but the hardware requirements remain the same as in Windows Vista; Direct3D 9 hardware is supported with ----
 device type introduced with the Direct3D 11 runtime. When no Direct3D 9 hardware or WDDM drivers are available, Desktop Windows Manager can use WARP10 software rasterizer.
Until recently, virtual machine software has not been able to emulate the shaders required for DWM to be functional. VMware Fusion 3.0 and VMware Workstation 7.0 will bring support for this. In addition, Windows Virtual PC allows composition using the Remote Desktop Protocol.
- ↑ "How to enable Windows Vista user experience features on a computer that is running Windows Server 2008 (MSKB947036)". Knowledge Base. Microsoft. January 15, 2008. http://support.microsoft.com/kb/947036/en-us. Retrieved 2008-04-21.
- ↑ http://blogs.msdn.com/e7/archive/2009/04/25/engineering-windows-7-for-graphics-performance.aspx
- ↑ 3.0 3.1 3.2 Greg Schechter. "DWM's use of DirectX, GPU and hardware acceleration". Greg Schechter's Blog. MSDN Blogs. http://blogs.msdn.com/greg_schechter/archive/2006/03/19/555087.aspx. Retrieved 2007-10-14.
- ↑ Greg Schechter. "Responding to Comments from "DWM's use of DirectX, GPU and hardware acceleration"". Greg Schechter's Blog. MSDN Blogs. http://blogs.msdn.com/greg_schechter/archive/2006/03/25/561110.aspx. Retrieved 2008-04-20.
- ↑ Chris Jackson. "Desktop Window Manager only runs on the primary desktop". Chris Jackson's Semantic Consonance. MSDN Blogs. http://blogs.msdn.com/cjacks/archive/2006/11/09/a-desktop-of-your-own.aspx. Retrieved 2007-10-14.
- ↑ 6.0 6.1 6.2 Greg Schechter. "Under the hood of Desktop Window Manager". Greg Schechter's Blog. MSDN Blogs. http://blogs.msdn.com/greg_schechter/archive/2006/03/05/544314.aspx. Retrieved 2007-10-14.
- ↑ 7.0 7.1 7.2 Greg Schechter. "How underlying WPF concepts and technology are being used in the DWM". Greg Schechter's Blog. MSDN Blogs. http://blogs.msdn.com/greg_schechter/archive/2006/06/09/623566.aspx. Retrieved 2007-10-14.
- ↑ 8.0 8.1 8.2 Greg Schechter. "Redirecting GDI, DirectX, and WPF applications". http://blogs.msdn.com/greg_schechter/archive/2006/05/02/588934.aspx. Retrieved 2007-10-14.
- ↑ "System requirements for Windows Vista". Microsoft. 2007-11-13. http://support.microsoft.com/kb/919183. Retrieved 2009-02-11.
- ↑ "MSDN - DirectX SDK - Direct3D 10 - D3D10_FEATURE_LEVEL". Microsoft. http://msdn.microsoft.com/en-us/library/ee415631(VS.85).aspx. Retrieved 2009-11-22.