Skip to content

Improve Vulkan Physical Device Selection #853

Open
@bjornbytes

Description

@bjornbytes

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 a maxVertexIndex 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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions