This error happens when a system has two GPUs, typically NVIDIA Optimus laptops which have an Intel GPU and an NVIDIA GPU.
The operating system allows different programs to use different GPUs so most non-demanding applications can use the more battery-efficient Intel GPU, and high end applications can use the more powerful NVIDIA GPU.
The FOVE compositor itself must run on an NVIDIA/AMD GPU (Intel is not supported currently). The compositor handles this automatically by querying the GPUs on your system and selecting the right one.
Each client that wants to display content on a FOVE, such as a Unity application, must then run on the same GPU as the compositor. This is a hardware limitation to keep latency low. Copying data between GPUs can be prohibitively expensive for real time applications like VR.
When a client is using a different GPU than the FOVE, the compositor detects this, and outputs this error.
How to fix:
Open the NVIDIA settings and select "Manage 3D Settings" in the sidebar. For each application that uses FOVE, or for all applications ("Global Settings"), select "High Performance NVIDIA Processor".
This will increase battery usage, especially if done globally, so we recommend returning the setting after using the FOVE if you are using a laptop on battery power.
Note for Developers:
The FOVE Compositor API has a function called fove_Compositor_getAdapterId. If the compositor is running, this will return which GPU adapter it is using. You can use this to create your rendering context on the correct adapter, so users on Optimus laptops will automatically.
You can also check for the device mismatch error code from the Submit() function and recreate your rendering context as needed if the compositor has changed GPUs (eg. the user unplugged the HDMI cable and plugged it back into a different video card in their machine).