public sealed class GpuDenyListThe adapters a backend is known to be broken on, keyed on GPU and driver version.
Remarks
What doc 10 § Android asks for by name: "the device-capability database (a curated deny-list keyed on GPU/driver version, shipped as content and updatable)". Android driver fragmentation is the reason — a device reports Vulkan, passes every capability query the engine knows how to ask, and then fails on a specific extension in a specific driver branch. There is no query for "this driver lies"; there is only a list somebody wrote down.
⚠ It refuses an adapter, not a feature. A denied adapter is one the backend must not be selected on at all, which is what makes it fall through to the next entry in the head's preference list — Vulkan denied, so OpenGL, so Null. A capability that a device reports and does not have is a different problem with a different answer: GraphicsDeviceFeatures is where a renderer asks, and a deny-list that cleared a bit there would be lying in the other direction.
⚠ Empty denies nothing, and that is the state every machine is in until content says otherwise. The failure mode this whole type has to avoid is a deny-list that refuses a device nobody meant to refuse, because the symptom is a black screen on hardware that works — so Parse reports a malformed line rather than dropping it, and refuses a rule that matches every adapter and every driver.
The format is one rule per line, three fields separated by |, with # starting a comment:
# adapter | driver version | reason Mali-G72 | * | VK_KHR_dynamic_rendering is advertised and unimplemented Adreno | 512.502 | crashes in vkCreateSwapchainKHR on rotation
⚠ What is not here is where the file comes from. Doc 10 wants it shipped as content and updatable, so a game can be fixed on a device the build predates; loading it is the head's job and is owed. Until then a head builds one in code, which is enough to make the decision reachable rather than theoretical.
Fields and properties (3)
public const string AnyThe wildcard, in both fields.
public static GpuDenyList EmptyThe list that refuses nothing, which is what a head has until content says otherwise.
public IReadOnlyList<GpuDenyRule> RulesThe rules, in order.
Methods (4)
public GpuDenyList(IEnumerable<GpuDenyRule> rules)Builds a list from rules.
public static GpuDenyList Parse(string text)Reads a deny-list from its text form.
public bool IsDenied(IGraphicsAdapter adapter, out string? reason)Whether a backend must not be used on an adapter.
public bool IsDenied(string name, string driverVersion, out string? reason)The same question, for a caller that has the two strings and no adapter yet.
Used by (9)
- AdapterSelectionVixen.Graphics.Vulkan
- AdapterSelectionTestsVixen.Graphics.Vulkan.Tests
- GpuDenyListTestsVixen.Graphics.Tests
- GpuDenyRuleVixen.Graphics
- GraphicsOptionsVixen.App.Hosting
- VulkanAdapterVixen.Graphics.Vulkan
- VulkanDeviceOptionsVixen.Graphics.Vulkan
- VulkanDeviceTestsVixen.Graphics.Vulkan.Tests
- GraphicsHostVixen.App