My Crazy Adventures with RemoteFX, Part One

[This is part one of the "My Crazy Adventures with RemoteFX" series]

Over a year ago, I began documenting my adventures with a quaint little technology called RemoteFX. But to the dismay of my readers, and myself, I abruptly stopped with only laziness to blame. (Okay, that's not fair to myself. I do have a full-time job and all.) But it was the barrage of personal requests and continued support in Windows Server 2012 that enticed me to pick it up again. So here we are; let's try this again. (I'll be rehashing some of the old material as it's still useful and current.)

What is RemoteFX again?

RemoteFX is a fancy name affixed to a set of technologies purchased from Calista Technologies. This tech was first introduced in Windows Server 2008 R2 SP1 with one main goal in mind: Improve the end-user experience for virtual desktop users – users that use a Windows desktop over a RDP client. By improve, we're talking about bringing users closer to a "real" local experience – full-motion video, fluid Flash and Silverlight animation, and accelerated 3D graphics.

RemoteFX enhances both Windows desktop virtualization paradigms – session virtualization and a Hyper-V based Virtual Desktop Infrastructure (VDI). The former generally refers to the aging Terminal Services-like set up, in which users remote into a server and have a space for doing what they do. The latter replaces the spaces with full blown, virtualized instances of an operating system. While RemoteFX brings some improvements to the classical session-based configuration, I won't be covering them at all.

So how does this all work? Well, there are a few moving pieces:

  • A WDDM-capable virtual GPU (vGPU) driver
  • Hyper-V management and platform integration components
  • Virtual Graphics Manager processes

The vGPU driver lives within the guest virtual machine. This driver implements all the necessary functions to emulate a WDDM-capable graphics device driver. It receives calls to various graphic APIs and, using the Hyper-V components, ferries them to the host virtual graphics manager for rendering and encoding. (This occurs on the host's more powerful GPU.) After completion, the results are transmitted back to the guest and then to the client.

How, exactly, does my experience improve?

To talk to how RemoteFX makes life better, we have to talk about a handful of specific scenarios that weren't possible before over a vanilla RDP client. Specifically, scenarios involving:

  • DirectX-accelerated applications, games
  • Silverlight and Flash
  • Full-motion video
  • USB devices

Let's break it all down.

DirectX

I put DirectX at the top of my list because it's one of the most compelling features of RemoteFX. To be able to play an accelerated game, like Unreal Tournament 3, over RDP on a laptop with unusable Intel graphics is just amazing. To set expectations, RemoteFX currently supports Microsoft's latest offering of DirectX 11. In terms of pixel/vertex shader support, you've got full access to 5.0 level goodies. If you were thinking of virtualizing Minecraft, however, you're out of luck — OpenGL was left on the side-lines, with minimum software-only (1.1) support.

Feature summary:

  • DirectX support: 11
  • Vertex/pixel shader support: 5.0 and earlier
  • OpenGL support: Nil (uses built-in 1.1 software support)

Microsoft Silverlight/Adobe Flash

With regards to Silverlight and Flash… well, how many times have you used Internet Explorer over RDP and stumbled across a page with humongous rich advertisements causing slowdowns? Those days are over. RemoteFX ties into both Direct3D and DirectX Video Acceleration (DxVA) APIs to accelerate Silverlight and Flash respectively.

Flash (starting with 10.1) ties into DxVA APIs for the acceleration of video decoding and (full-screen) rendering operations. But because of the way RemoteFX was implemented, hardware acceleration isn't a capability Flash (10.1) can detect at this time, so it falls back to using some software logic. Don't fret through, RemoteFX still accelerates lots of DxVA operations – software or otherwise – and boosts performance greatly. (In newer versions of RemoteFX/Flash this is a non-issue.)

Silverlight, on the other hand, with its custom software renderer, is accelerated a little differently. It supports off-loading to the GPU, but… to be honest, I don't understand how it works. Not even after a year of tinkering with it. (It doesn't tie into DirectX.) Any information you have on this subject would be greatly appreciated.

Feature summary:

  • Silverlight: Off-loads work to the GPU via magic. (I don't have details yet, sorry.)
  • Flash: Accelerated video rendering, (mostly) software video decoding.

Full-motion video

With the tie-ins to DirectX Video Acceleration, RemoteFX also enables full-motion video delivery. For example, by using a DxVA-capable player (e.g. Windows Media Player, VLC), you can decode and send full blown 1080p video to a laptop or thin client. Some of you may be wondering – wait, wasn't this already possible with Multimedia Redirection? Not quite. Multimedia Redirection is simply just that – a redirect. It redirects the source stream to the client, for rendering on the client side (requiring a decent GPU). RemoteFX differs in that it renders on the host side and takes advantage of the GPU there.

Feature summary:

  • Ties into DirectX Video Acceleration
  • Can work alongside Multimedia Redirection or replace it altogether

USB devices

Last but not least, RemoteFX supports the redirection of USB devices including isochronous (time sensitive) devices such as webcams, where audio and video must be synced together. Because devices are redirected as such a low level, the client doesn't even need drivers installed. This enables all sorts of neat server-side management scenarios not possible over vanilla RDP.

Feature summary:

  • Let's you connect a wide-range of USB devices to your virtual environment
  • Notable support for isochronous devices, such as webcams.

Looking forward

In the next several posts, I'll explore RemoteFX dependencies, to include licensing and hardware, and provide clarifying details on installing and configuring RemoteFX. Stay tuned!

 

Revised August 31, 2012 (Changed DirectX support from 9.0 to 11.0. Was a carry over from old post that wasn't updated correctly.)