Vulkan: account for no limit on image count

when clamping image count within device bounds, some devices can report
max_image_count = 0 to indicate no limit on image count. this triggers
assertion in clamp because max < min.

therefore if the device reports zero we treat it as `u32::MAX`

see https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkSurfaceCapabilitiesKHR.html
This commit is contained in:
Rose Hudson 2021-10-27 10:45:28 +01:00
parent 086e547aef
commit 1bdd2a7c86

View file

@ -423,7 +423,11 @@ impl VkInstance {
// Note: can be 2 for non-Android to improve latency, but the real answer is to // Note: can be 2 for non-Android to improve latency, but the real answer is to
// implement some kind of frame pacing. // implement some kind of frame pacing.
const PREFERRED_IMAGE_COUNT: u32 = 3; const PREFERRED_IMAGE_COUNT: u32 = 3;
let image_count = PREFERRED_IMAGE_COUNT.clamp(capabilities.min_image_count, capabilities.max_image_count); let max_image_count = match capabilities.max_image_count {
0 => u32::MAX,
x => x,
};
let image_count = PREFERRED_IMAGE_COUNT.clamp(capabilities.min_image_count, max_image_count);
let mut extent = capabilities.current_extent; let mut extent = capabilities.current_extent;
if extent.width == u32::MAX || extent.height == u32::MAX { if extent.width == u32::MAX || extent.height == u32::MAX {
// We're deciding the size. // We're deciding the size.