Windows 10 hosts with SandyBridge-based iGPU or older lacking dGPU: Direct3D doesn't work on guest

Discussions related to using VirtualBox on Windows hosts.
Post Reply
pal1000
Posts: 20
Joined: 20. Oct 2014, 10:40

Windows 10 hosts with SandyBridge-based iGPU or older lacking dGPU: Direct3D doesn't work on guest

Post by pal1000 »

The root cause is upstream - Intel OpenGL driver (ex: ig4icd64.dll for SandyBridge) promptly unloads itself from memory if the application which loads it uses certain techniques / APIs to detect host OS and the result version string begins with 10.x. This issue has been highly documented on various forum threads.
Just google search for "sandybridge windows 10 opengl not working" and you'll get a lot of relevant results. It appears the most reliable trigger for this issue is the presence of this code in the executable manifest (doesn't matter if the manifest is embedded in the executable or not):

Code: Select all

<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
Intel refuses to fix this, stating this behavior is intended and marked these legacy chipsets as end of life and unsupported under Windows 10. The only thing left to do beside upgrading the hardware is to workaround.
Other widespread software affected:
-Oracle Java JRE 8 Update 60 and newer (manifest contains trigger code in all 3 key executables - java.exe, javaws.exe, javaw.exe);
-AIDA64 Engineer and related products report Windows GDI driver
Image
Community driven drivers Leshcatlabs and IntelliModder 32 are aware of this issue, unfortunately they never figured out how to fix it. IntelliModder 32 drivers won't work with VirtualBox anyway because they are not properly signed.
Workarounds:
-Patch Intel driver using this resource
https://github.com/LWJGL/lwjgl/issues/1 ... -263710095
Be warned that this would break the digital signature, so it needs fixing, otherwise Virtualbox hardened security would reject it. This will help:
https://gist.github.com/pal1000/6975033 ... df62a3bd5e
-Use swiftshader in guest. Current open-source swiftshader by Google requires Windows 7. I am running PosReady 2009 which is XP based, and even faster and memory lighter than XP. In Windows 7 you also have WARP for D3D10+ only and Windows 8 also for D3D9. Unfortunately with WARP the Direct3D app which I confined in a VM for security reasons (SopCast) doesn't scale properly when switching fullscreen. Have to go repeatedly from windowed to fullscreen and back until it randomly scales properly. On host machine this glitch doesn't happen. Using swiftshader 3.0 might be an option. Unfortunately it is single-threaded and my CPU doesn't have enough power to run at full speed in full screen, there is a small audio stuttering, but the most annoying thing is the large watermark. SwiftShader 2.0 hs been hacked and exploit patch to remove the watermark publicly disclosed. Unfortunately it is too slow it can't handle SopCast full speed even in windowed mode.
-Use this patched version of Mesa + WineD3D 1.7.52 (currently used). This works acceptably. The only problems are the long display initialization (~20 seconds), the CPU doesn't have enough power for fullscreen (severe stuttering audio, network buffering dies) and requires 3 virtual processors to handle display initialization and network buffer simultaneously. This obviously throws a warning in the VM configuration that I have more vCPUs than physical processors allocated to the VM.
-Use Mesa latest version llvmpipe driver installed on host as an ICD (must be digitally signed in order to pass hardened security test) + Guest Additions installed in VM as usual. This also works. You must follow the guidance from here: https://gist.github.com/pal1000/6975033 ... df62a3bd5e
That's for the patched version of Intel driver, just replace ig4icd64.dll filename with whatever name you gave to Mesa DLL.
Post Reply