Open
Description
Recently someone wasn't able to run lovr because their GPU was using a Vulkan -> D3D12 emulation layer that didn't support the fullDrawIndexUint32
feature (one of the few features that lovr was requiring).
There are a few steps lovr could take to be more robust to this:
- Only enable the
fullDrawIndexUint32
feature when supported. When it isn't supported, trying to render stuff with more than 16 million vertices could crash the GPU. I guess lovr could add amaxVertexIndex
limit or something, although I can't imagine people using this for anything useful. - When not using OpenXR, search through all the physical devices and try to find one that supports all the features/extensions we need.
- Alternatively, lovr could ignore some devices:
- Integrated GPUs / software rasterizers
- Devices that have VK_MSFT_layered_driver and indicate that they are emulating Vulkan on top of D3D12, which is known to have issues.
- Possibly add an environment variable or conf flag to select a GPU index to use, which can be useful for testing/debugging.