From ae25e544c44bf562f0b01347d372e87e50f0a67d Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 15 Mar 2026 13:37:13 +0900 Subject: [PATCH 1/5] clients/simple-vulkan.c: fix find_memory_type() - Use "<" instead of "<=" in the loop condition - Remove `(1u << i) <= allowed` from the loop condition for simplicity - Use `(...propertyFlags & properties) == properties` instead of `(...propertyFlags & properties)` to ensure all requested properties are present Signed-off-by: Hiroaki Yamamoto --- clients/simple-vulkan.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/clients/simple-vulkan.c b/clients/simple-vulkan.c index ecc241d03..dd7463ca2 100644 --- a/clients/simple-vulkan.c +++ b/clients/simple-vulkan.c @@ -525,8 +525,11 @@ find_memory_type(struct window *window, uint32_t allowed, VkMemoryPropertyFlags VkPhysicalDeviceMemoryProperties mem_properties; vkGetPhysicalDeviceMemoryProperties(window->vk.phys_dev, &mem_properties); - for (unsigned i = 0; (1u << i) <= allowed && i <= mem_properties.memoryTypeCount; ++i) { - if ((allowed & (1u << i)) && (mem_properties.memoryTypes[i].propertyFlags & properties)) + for (unsigned i = 0; i < mem_properties.memoryTypeCount; ++i) { + bool is_allowed = allowed & (1u << i); + bool has_properties = + (mem_properties.memoryTypes[i].propertyFlags & properties) == properties; + if (is_allowed && has_properties) return i; } return -1; From ab1fa93abd4139b2a90f89901543237bc8f9e58b Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 15 Mar 2026 13:53:26 +0900 Subject: [PATCH 2/5] clients/simple-dmabuf-vulkan.c: fix find_memory_type() Same as simple-vulkan.c. Signed-off-by: Hiroaki Yamamoto --- clients/simple-dmabuf-vulkan.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/clients/simple-dmabuf-vulkan.c b/clients/simple-dmabuf-vulkan.c index 50be3496a..a5cf6cd0d 100644 --- a/clients/simple-dmabuf-vulkan.c +++ b/clients/simple-dmabuf-vulkan.c @@ -459,8 +459,11 @@ find_memory_type(struct display *display, uint32_t allowed, VkMemoryPropertyFlag VkPhysicalDeviceMemoryProperties mem_properties; vkGetPhysicalDeviceMemoryProperties(display->vk.phys_dev, &mem_properties); - for (unsigned i = 0; (1u << i) <= allowed && i <= mem_properties.memoryTypeCount; ++i) { - if ((allowed & (1u << i)) && (mem_properties.memoryTypes[i].propertyFlags & properties)) + for (unsigned i = 0; i < mem_properties.memoryTypeCount; ++i) { + bool is_allowed = allowed & (1u << i); + bool has_properties = + (mem_properties.memoryTypes[i].propertyFlags & properties) == properties; + if (is_allowed && has_properties) return i; } return -1; From 63675723eb84fe8a0db63f43a7b772fa3faa2b86 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 15 Mar 2026 13:41:17 +0900 Subject: [PATCH 3/5] clients/simple-vulkan.c: Use check_extension() where possible Signed-off-by: Hiroaki Yamamoto --- clients/simple-vulkan.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/clients/simple-vulkan.c b/clients/simple-vulkan.c index dd7463ca2..07401030d 100644 --- a/clients/simple-vulkan.c +++ b/clients/simple-vulkan.c @@ -908,13 +908,7 @@ create_instance(struct window *window) inst_extns[num_inst_extns++] = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME; for (uint32_t i = 0; i < num_inst_extns; i++) { - uint32_t j; - for (j = 0; j < num_avail_inst_extns; j++) { - if (strcmp(inst_extns[i], avail_inst_extns[j].extensionName) == 0) { - break; - } - } - if (j == num_avail_inst_extns) { + if (!check_extension(avail_inst_extns, num_avail_inst_extns, inst_extns[i])) { fprintf(stderr, "Unsupported instance extension: %s\n", inst_extns[i]); abort(); } @@ -1031,13 +1025,7 @@ create_device(struct window *window) } for (uint32_t i = 0; i < num_device_extns; i++) { - uint32_t j; - for (j = 0; j < num_avail_device_extns; j++) { - if (strcmp(device_extns[i], avail_device_extns[j].extensionName) == 0) { - break; - } - } - if (j == num_avail_device_extns) { + if (!check_extension(avail_device_extns, num_avail_device_extns, device_extns[i])) { fprintf(stderr, "Unsupported device extension: %s\n", device_extns[i]); abort(); } From 6565ab7a5aa747e0518902307b7369733f0a4dd3 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 15 Mar 2026 13:55:26 +0900 Subject: [PATCH 4/5] clients/simple-dmabuf-vulkan.c: add check_extension() helper function Same as clients/simple-vulkan.c. Signed-off-by: Hiroaki Yamamoto --- clients/simple-dmabuf-vulkan.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/clients/simple-dmabuf-vulkan.c b/clients/simple-dmabuf-vulkan.c index a5cf6cd0d..946e7a10e 100644 --- a/clients/simple-dmabuf-vulkan.c +++ b/clients/simple-dmabuf-vulkan.c @@ -1581,6 +1581,17 @@ destroy_display(struct display *display) free(display); } +static bool +check_extension(const VkExtensionProperties *avail, uint32_t avail_len, const char *name) +{ + for (size_t i = 0; i < avail_len; i++) { + if (strcmp(avail[i].extensionName, name) == 0) { + return true; + } + } + return false; +} + static void load_device_proc(struct display *display, const char *func, void *proc_ptr) { @@ -1617,13 +1628,7 @@ create_instance(struct display *display) inst_extns[num_inst_extns++] = VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME; for (uint32_t i = 0; i < num_inst_extns; i++) { - uint32_t j; - for (j = 0; j < num_avail_inst_extns; j++) { - if (strcmp(inst_extns[i], avail_inst_extns[j].extensionName) == 0) { - break; - } - } - if (j == num_avail_inst_extns) { + if (!check_extension(avail_inst_extns, num_avail_inst_extns, inst_extns[i])) { fprintf(stderr, "Unsupported instance extension: %s\n", inst_extns[i]); abort(); } @@ -1744,13 +1749,7 @@ create_device(struct display *display) device_extns[num_device_extns++] = VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME; for (uint32_t i = 0; i < num_device_extns; i++) { - uint32_t j; - for (j = 0; j < num_avail_device_extns; j++) { - if (strcmp(device_extns[i], avail_device_extns[j].extensionName) == 0) { - break; - } - } - if (j == num_avail_device_extns) { + if (!check_extension(avail_device_extns, num_avail_device_extns, device_extns[i])) { fprintf(stderr, "Unsupported device extension: %s\n", device_extns[i]); abort(); } From bb9dab6634d64e53e1a8d8eb53e658b01ae98e59 Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 15 Mar 2026 13:41:57 +0900 Subject: [PATCH 5/5] clients/simple-vulkan.c: eliminate dead code I also moved vkQueuePresentKHR() out of the if-else block for better readability. Signed-off-by: Hiroaki Yamamoto --- clients/simple-vulkan.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/clients/simple-vulkan.c b/clients/simple-vulkan.c index 07401030d..d55f7f128 100644 --- a/clients/simple-vulkan.c +++ b/clients/simple-vulkan.c @@ -1603,20 +1603,12 @@ redraw(struct window *window) .pRegions = ®ion, }; pnext(&present_info, &present_regions); - - result = vkQueuePresentKHR(window->vk.queue, &present_info); - } else { - result = vkQueuePresentKHR(window->vk.queue, &present_info); } + result = vkQueuePresentKHR(window->vk.queue, &present_info); + if (result != VK_SUCCESS) return; - if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_SUBOPTIMAL_KHR) { - recreate_swapchain(window); - return; - } else if (result != VK_SUCCESS) { - assert(0); - } window->frames++; window->vk.frame_index = (window->vk.frame_index + 1) % MAX_CONCURRENT_FRAMES;