Preliminary VMWare and VirtualBox support

master
Inga 🏳‍🌈 4 years ago
parent c9900e6aff
commit 62c12bd600
  1. 56
      README.md
  2. 7
      RadeonResetBugFixService/Devices/KnownDevices.cs
  3. 2
      RadeonResetBugFixService/Tasks/BasicTasks/ListDevicesTask.cs

@ -21,22 +21,31 @@ With it, you will be able to use Radeon GPU as your only GPU,
with your actual display connected to Radeon as a primary display, with your actual display connected to Radeon as a primary display,
and reboot your VM without triggering AMD reset bug - even installing Windows updates! and reboot your VM without triggering AMD reset bug - even installing Windows updates!
In effect, you can use VM with pass-through GPU plus pass-through keyboard and mouse
as entirely separate PC.
## Limitations ## Limitations
Currently this project is only tested with Hyper-V VMs, Currently this project is only tested with Windows 10 VMs on Hyper-V,
and probably also supports KVM and QEMU, and was not tested with Windows 7 VMs, KVM, QEMU, VMWare and VirtualBox,
but it should be trivial to add other hypervisors support although the preliminary support for these systems has been implemented
(the relevant files are `Tasks\DisableVirtualVideoTask.cs` and `EnableVirtualVideoTask.cs`). and they should probably work too.
Bug reports are welcome!
**Note that you will still have to add a virtual GPU to your VM, **Note that you will still have to add a virtual GPU to your VM,
otherwise Windows won't boot.** otherwise Windows won't boot.**
Note that it will add 1-5 minutes both to startup and to shutdown time. Note that it will add around 1 minute or up to 5 minutes in some cases to startup time,
and a fraction of minute or up to several minutes in some cases to shutdown time.
So don't panic if your screen is black immediately after VM startup, So don't panic if your screen is black immediately after VM startup,
it is expected. it is expected.
## Install instructions ## Install instructions
Make sure you have added an active virtual/synthetic GPU to your VM,
and that you have installed all the relevant drivers / Guest Additions.
Put `RadeonResetBugFixService.exe` in a permanent location. Put `RadeonResetBugFixService.exe` in a permanent location.
In elevated command prompt in Guest VM, run In elevated command prompt in Guest VM, run
@ -72,20 +81,43 @@ RadeonResetBugFixService.exe uninstall
``` ```
The screen may go blank several times during the process. The screen may go blank several times during the process.
It may take up to 5 minutes total (but should take less than 2). It may take up to 5 minutes total (but should take several seconds).
## Debugging ## Debugging, bug reports
The service stores its verbose log files in `logs` directory located next to the executable. The service stores its verbose log files in `logs` directory located next to the executable.
## Frequent issues If the service does not work correctly on your system or does not solve the reset bug,
please also run the diagnostics command
(which will gather the detailed information about your hardware and will also write it to log):
### Connecting to VM from the Host ```
RadeonResetBugFixService.exe diagnose
```
Attach to your bug report the diagnose log file plus the relevant recent service logs:
one from the latest startup when you encountered a problem,
and another one from the startup before that.
This service disables Hyper-V video adapter, ## Known issues
so you can no longer connect to VM using Basic sessions.
### Connecting to VM from the Host
Enhanced sessions (which use RDP protocol) continue to work fine. This service disables virtual video adapter,
so you can no longer connect to VM from a host, using Basic sessions.
It will only work during startup / shutdown, but not during normal usage.
If you connected to VM from a host during startup,
the screen will go blank in a couple of minutes
(as the display connected to Radeon GPU wil light up),
that is expected.
That is one of the points of this service;
otherwise, virtual display would always be present as primary or secondary display,
even when you are not connected to VM from the host.
Enhanced sessions in Hyper-V (which use RDP protocol) continue to work fine.
Other hypervisors can miss the enhanced sessions feature,
but you still can connect to VM using RDP.
### Unsuccessful reboots ### Unsuccessful reboots

@ -19,6 +19,13 @@
"hypervideo", // Hyper-V video adapter "hypervideo", // Hyper-V video adapter
"qxldod", // virtio/libvirt for Win8+ "qxldod", // virtio/libvirt for Win8+
"qxl", // virtio/libvirt for Win7 "qxl", // virtio/libvirt for Win7
"VBoxVideo", // virtualbox for some windows versions?
"VBoxWDDM", // virtualbox for Win8+ (or for Win7 too?)
"vm3dmp", // one of these supports "VMWare SVGA 3D"
"vm3dmp-debug", // one of these supports "VMWare SVGA 3D"
"vm3dmp-stats", // one of these supports "VMWare SVGA 3D"
"vm3dmp_loader", // one of these supports "VMWare SVGA 3D"
"VM3DService ", // one of these supports "VMWare SVGA 3D"
}.Contains(device.Service, StringComparer.OrdinalIgnoreCase); }.Contains(device.Service, StringComparer.OrdinalIgnoreCase);
} }
} }

@ -12,7 +12,7 @@
{ {
foreach (var device in DeviceHelper.GetDevices().ToArray()) foreach (var device in DeviceHelper.GetDevices().ToArray())
{ {
logger.Log($"Found device {device.Description}: manufacturer='{device.Manufacturer}', service='{device.Service}', class='{device.ClassName}', isPresent={device.IsPresent}, isDisabled={device.IsDisabled}, errorCode={device.ErrorCode} isAmdGPU={KnownDevices.IsAmdVideo(device)}, isVirtualVideo={KnownDevices.IsVirtualVideo(device)}"); logger.Log($"Found device {device.Description}: manufacturer='{device.Manufacturer}', service='{device.Service}', class='{device.ClassName}', isPresent={device.IsPresent}, isDisabled={device.IsDisabled}, errorCode={device.ErrorCode}, isAmdGPU={KnownDevices.IsAmdVideo(device)}, isVirtualVideo={KnownDevices.IsVirtualVideo(device)}");
} }
} }
} }

Loading…
Cancel
Save