diff options
| author | Charles Giessen <charles@lunarg.com> | 2022-07-29 16:23:12 -0600 |
|---|---|---|
| committer | Charles Giessen <46324611+charles-lunarg@users.noreply.github.com> | 2022-07-29 17:35:30 -0600 |
| commit | 8ac3b50e9d2f4aa11339c4b6f68038862b282971 (patch) | |
| tree | 80f528b907c9698d93cc1539efef23df5f990b73 | |
| parent | e734be0bb5aed1e542fad19ba91e93e1812de0ee (diff) | |
| download | usermoji-8ac3b50e9d2f4aa11339c4b6f68038862b282971.tar.xz | |
vulkaninfo: Prevent infinite loops
GetVectorInit could get stuck in an infinite loop if the underlying API call eternally returned
VK_INCOMPLETE. This commit makes GetVectorInit stop after 3 tries.
| -rw-r--r-- | vulkaninfo/vulkaninfo.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/vulkaninfo/vulkaninfo.h b/vulkaninfo/vulkaninfo.h index 64952e99..543257cd 100644 --- a/vulkaninfo/vulkaninfo.h +++ b/vulkaninfo/vulkaninfo.h @@ -230,14 +230,17 @@ auto GetVectorInit(const char *func_name, F &&f, T init, Ts &&...ts) -> std::vec uint32_t count = 0; std::vector<T> results; VkResult err; + uint32_t iteration_count = 0; + uint32_t max_iterations = 3; do { err = f(ts..., &count, nullptr); if (err) THROW_VK_ERR(func_name, err); results.resize(count, init); err = f(ts..., &count, results.data()); results.resize(count); - } while (err == VK_INCOMPLETE); - if (err) THROW_VK_ERR(func_name, err); + iteration_count++; + } while (err == VK_INCOMPLETE || iteration_count < max_iterations); + if (err && iteration_count <= max_iterations) THROW_VK_ERR(func_name, err); return results; } @@ -1622,8 +1625,8 @@ struct AppGpu { } VkImageCreateInfo image_ci_regular = GetImageCreateInfo(0, format, tiling, 0); - VkImageCreateInfo image_ci_transient = GetImageCreateInfo( - 0, format, tiling, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT); + VkImageCreateInfo image_ci_transient = + GetImageCreateInfo(0, format, tiling, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT); VkImageCreateInfo image_ci_sparse = GetImageCreateInfo(VK_IMAGE_CREATE_SPARSE_BINDING_BIT, format, tiling, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); |
