Using MSDK on a secondary GPU

Using MSDK on a secondary GPU

Is it somehow possible to use HW acceleration via the MSDK when the Intel HD 2000/3000 GPUisn't the primary GPU?
From the documentation it's implied that you cancall MFXInit() with MFX_IMPL_HARDWARE_XXX.
The MFXInit function returns MFX_ERR_UNSUPPORTED.

Test platform:
* Window 7 Ultimate 64 bit
* Latest Intel GPU driver (2509) from Sep. 9
* 64 bit and 32 bit versions of the SDK (3.0 Beta 4 and 2.0 gold)

10 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.


This feature is only supported for systems with switchable graphics. More details can be found here:

Details about how to set this up can be very system specific. We're hoping to add some clarifications to the documentation in the future.



Thanks for the answer.But I'm looking for a more general purpose solution.

Is it technically possible to utilize both GPUs in the same process?
If not, is it it a driver limitation or an OS limitation?
A good example for such use would be decoding with QuickSync and doing complex custom post processing using CUDA/OpenCL on a discrete (powerful)GPU?
This would be the best of both worlds.

The aboveshould bepossible with 2 processes (Lucid Virtu installed):
Process 1 (uses Intel GPU): decode video -> copy frames/meta data to shared system memory
Process 2 (uses Nvidia/AMD GPU): read frames from shared memory and process them via CUDA/OpenCL.

In theory, this could be possible. However, this type of configuration is not validated or supported for Media SDK.

We will post here and elsewhereas supportedplatforms or usage scenarios are added, so stay tuned.



I don't know if it helps, but I use the HD 2000 as secondary GPU with MFX_IMPL_HARDWARE_ANY. The first GPU is from NVidia. You have to activate the iGPU in the Bios and plug in a display or a VGA-Dummy.

Quoting superrudiHi,

I don't know if it helps, but I use the HD 2000 as secondary GPU with MFX_IMPL_HARDWARE_ANY. The first GPU is from NVidia. You have to activate the iGPU in the Bios and plug in a display or a VGA-Dummy.

That's a good solution but not an excellent one :). BTW, where one find a VGA dummy?

Does anyone know if there's a way to do it programmatically?
Seems that Remote Desktop creates a virtual screen and MSDK works on such a screen. This way the decoder can work on the D3D adapter on the virtual screen (Intel) and the renderer can work on the real screen - connected to the display.

You can find the VGA-Dummy here:
I have switched from RemoteDesktop to UltraVNC but at the moment it is very unstable.

Found a working workaround without cables!* Connect display to dGPU (Nvidia/AMD).* Right click on desktop and select [b]Screen Resolutions[/b].* Click the [b]Detect[/b] button. A few disconnected screens will appear ("Another Display not Connected").* Select a disconnected screen that belongs to the Intel GPU (e.g. VGA connection).* In the [b]Multiple Displays[/b] combo box, select Extend Desktop to this display.* Position the disconnect display to a corner of the primary display so mouse boundaries are left intact (top left corner is best).* Click OK. This setup survives reboots so it a one time thing.Now DirectX will enumerate the disconned display and enable video accelration to work on it.Within MSDK based APP, initialize the session with the argument MFX_IMPL_AUTO_ANY.A returned implementation value will probably be MFX_IMPL_HARDWARE2 so always compare against != MFX_IMPL_SOFTWARE to check for HW acceleration instead of checking == MFX_IMPL_HARDWARE.This allows using both Intel and discrete GPUs (e.g. Intel decoder and dGPU renderer).I used it within my ffdshow with Intel QuickSync Decoder:[url][/url]Passing D3D surfaces between devices is something I didn't try. I copied the D3D surfaces to system memory to get this work. My code has the fastest copy method available for this task which uses a dedicated SSE4.1 instruction.

Sorry for necro-ing this post, but how would this work on windows 10 x64 ?

Should work the same as Windows 8.1 as long as BIOS enables the iGPU.

I do not longer develop with the MSDK so I can't say that it actually works or not.

Leave a Comment

Please sign in to add a comment. Not a member? Join today