Browse Source

Preliminary VMWare and VirtualBox support

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

56
README.md

@ -21,22 +21,31 @@ With it, you will be able to use Radeon GPU as your only GPU, @@ -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,
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
Currently this project is only tested with Hyper-V VMs,
and probably also supports KVM and QEMU,
but it should be trivial to add other hypervisors support
(the relevant files are `Tasks\DisableVirtualVideoTask.cs` and `EnableVirtualVideoTask.cs`).
Currently this project is only tested with Windows 10 VMs on Hyper-V,
and was not tested with Windows 7 VMs, KVM, QEMU, VMWare and VirtualBox,
although the preliminary support for these systems has been implemented
and they should probably work too.
Bug reports are welcome!
**Note that you will still have to add a virtual GPU to your VM,
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,
it is expected.
## 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.
In elevated command prompt in Guest VM, run
@ -72,20 +81,43 @@ RadeonResetBugFixService.exe uninstall @@ -72,20 +81,43 @@ RadeonResetBugFixService.exe uninstall
```
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.
## 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,
so you can no longer connect to VM using Basic sessions.
## Known issues
### 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

7
RadeonResetBugFixService/Devices/KnownDevices.cs

@ -19,6 +19,13 @@ @@ -19,6 +19,13 @@
"hypervideo", // Hyper-V video adapter
"qxldod", // virtio/libvirt for Win8+
"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);
}
}

2
RadeonResetBugFixService/Tasks/BasicTasks/ListDevicesTask.cs

@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
{
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