From 00573263e0ab14f7e3409dbaf55485534f8db057 Mon Sep 17 00:00:00 2001 From: Petr Kraus Date: Wed, 8 Apr 2020 20:57:14 +0200 Subject: [PATCH] icd: Fix vkGetSwapchainImages behavior - add missing lock - return correct values via return and count - bump to two images --- icd/generated/mock_icd.cpp | 17 ++++++++++++----- scripts/mock_icd_generator.py | 17 ++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/icd/generated/mock_icd.cpp b/icd/generated/mock_icd.cpp index c66d7ff..d3e8a1d 100644 --- a/icd/generated/mock_icd.cpp +++ b/icd/generated/mock_icd.cpp @@ -21,6 +21,7 @@ #include "mock_icd.h" #include +#include #include #include "vk_typemap_helper.h" namespace vkmock { @@ -2133,13 +2134,19 @@ static VKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR( uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) { + constexpr uint32_t icd_image_count = 2; + if (!pSwapchainImages) { - *pSwapchainImageCount = 1; - } else if (*pSwapchainImageCount > 0) { - pSwapchainImages[0] = (VkImage)global_unique_handle++; - if (*pSwapchainImageCount != 1) { - return VK_INCOMPLETE; + *pSwapchainImageCount = icd_image_count; + } else { + unique_lock_t lock(global_lock); + for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_image_count); ++img_i){ + // For simplicity always returns new handles, which is wrong + pSwapchainImages[img_i] = (VkImage)global_unique_handle++; } + + if (*pSwapchainImageCount < icd_image_count) return VK_INCOMPLETE; + else if (*pSwapchainImageCount > icd_image_count) *pSwapchainImageCount = icd_image_count; } return VK_SUCCESS; } diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py index e68e2c7..6b6a7ba 100644 --- a/scripts/mock_icd_generator.py +++ b/scripts/mock_icd_generator.py @@ -874,13 +874,19 @@ CUSTOM_C_INTERCEPTS = { *pLayout = VkSubresourceLayout(); // Default constructor zero values. ''', 'vkGetSwapchainImagesKHR': ''' + constexpr uint32_t icd_image_count = 2; + if (!pSwapchainImages) { - *pSwapchainImageCount = 1; - } else if (*pSwapchainImageCount > 0) { - pSwapchainImages[0] = (VkImage)global_unique_handle++; - if (*pSwapchainImageCount != 1) { - return VK_INCOMPLETE; + *pSwapchainImageCount = icd_image_count; + } else { + unique_lock_t lock(global_lock); + for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_image_count); ++img_i){ + // For simplicity always returns new handles, which is wrong + pSwapchainImages[img_i] = (VkImage)global_unique_handle++; } + + if (*pSwapchainImageCount < icd_image_count) return VK_INCOMPLETE; + else if (*pSwapchainImageCount > icd_image_count) *pSwapchainImageCount = icd_image_count; } return VK_SUCCESS; ''', @@ -1068,6 +1074,7 @@ class MockICDOutputGenerator(OutputGenerator): else: write('#include "mock_icd.h"', file=self.outFile) write('#include ', file=self.outFile) + write('#include ', file=self.outFile) write('#include ', file=self.outFile) write('#include "vk_typemap_helper.h"', file=self.outFile) -- 2.7.4