diff options
| author | Petr Kraus <petr_kraus@email.cz> | 2020-04-08 21:47:25 +0200 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2020-04-09 14:03:10 -0600 |
| commit | b40274e432a13ae9c6461c04112c86358b77d7c2 (patch) | |
| tree | 03e3b83b32e7e07c47f6447e7561281b9637bd6a /scripts | |
| parent | 00573263e0ab14f7e3409dbaf55485534f8db057 (diff) | |
| download | usermoji-b40274e432a13ae9c6461c04112c86358b77d7c2.tar.xz | |
icd: Make swapchain images persistent
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/mock_icd_generator.py | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py index 6b6a7bac..edd9c95e 100644 --- a/scripts/mock_icd_generator.py +++ b/scripts/mock_icd_generator.py @@ -61,6 +61,9 @@ static VkPhysicalDevice physical_device = (VkPhysicalDevice)CreateDispObjHandle( static unordered_map<VkDevice, unordered_map<uint32_t, unordered_map<uint32_t, VkQueue>>> queue_map; static unordered_map<VkDevice, unordered_map<VkBuffer, VkBufferCreateInfo>> buffer_map; +static constexpr uint32_t icd_swapchain_image_count = 2; +static std::unordered_map<VkSwapchainKHR, VkImage[icd_swapchain_image_count]> swapchain_image_map; + // TODO: Would like to codegen this but limits aren't in XML static VkPhysicalDeviceLimits SetLimits(VkPhysicalDeviceLimits *limits) { limits->maxImageDimension1D = 4096; @@ -870,23 +873,32 @@ CUSTOM_C_INTERCEPTS = { mapped_memory_map.erase(memory); ''', 'vkGetImageSubresourceLayout': ''' - // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure. + // Need safe values. Callers are computing memory offsets from pLayout, with no return code to flag failure. *pLayout = VkSubresourceLayout(); // Default constructor zero values. ''', +'vkCreateSwapchainKHR': ''' + unique_lock_t lock(global_lock); + *pSwapchain = (VkSwapchainKHR)global_unique_handle++; + for(uint32_t i = 0; i < icd_swapchain_image_count; ++i){ + swapchain_image_map[*pSwapchain][i] = (VkImage)global_unique_handle++; + } + return VK_SUCCESS; +''', +'vkDestroySwapchainKHR': ''' + unique_lock_t lock(global_lock); + swapchain_image_map.clear(); +''', 'vkGetSwapchainImagesKHR': ''' - constexpr uint32_t icd_image_count = 2; - if (!pSwapchainImages) { - *pSwapchainImageCount = icd_image_count; + *pSwapchainImageCount = icd_swapchain_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++; + for (uint32_t img_i = 0; img_i < (std::min)(*pSwapchainImageCount, icd_swapchain_image_count); ++img_i){ + pSwapchainImages[img_i] = swapchain_image_map.at(swapchain)[img_i]; } - if (*pSwapchainImageCount < icd_image_count) return VK_INCOMPLETE; - else if (*pSwapchainImageCount > icd_image_count) *pSwapchainImageCount = icd_image_count; + if (*pSwapchainImageCount < icd_swapchain_image_count) return VK_INCOMPLETE; + else if (*pSwapchainImageCount > icd_swapchain_image_count) *pSwapchainImageCount = icd_swapchain_image_count; } return VK_SUCCESS; ''', |
