Media (Intel® oneAPI Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools from Intel. This includes Intel® oneAPI Video Processing Library and Intel® Media SDK.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!

Using MSDK on a secondary GPU

Ariel_G_Intel
Employee
332 Views
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)
0 Kudos
9 Replies
IDZ_A_Intel
Employee
332 Views
Eric,

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

http://www.intel.com/support/graphics/sb/CS-031103.htm

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.

Regards,

Jeff
Ariel_G_Intel
Employee
332 Views
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.
IDZ_A_Intel
Employee
332 Views

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.

Jeff

superrudi
Beginner
332 Views
Hi,

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.

Ariel_G_Intel
Employee
332 Views
Quoting superrudi
Hi,

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.
superrudi
Beginner
332 Views
You can find the VGA-Dummy here: http://soerennielsen.dk/mod/VGAdummy/index_en.php
I have switched from RemoteDesktop to UltraVNC but at the moment it is very unstable.
Ariel_G_Intel
Employee
332 Views
Found a working workaround without cables!
* Connect display to dGPU (Nvidia/AMD).
* Right click on desktop and select Screen Resolutions.
* Click the Detect 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 Multiple Displays 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:
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.
Bart_K_
Beginner
332 Views

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

Ariel_G_Intel
Employee
332 Views

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.

Reply