aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorPetr Kraus <petr_kraus@email.cz>2020-04-08 21:47:25 +0200
committerMark Lobodzinski <mark@lunarg.com>2020-04-09 14:03:10 -0600
commitb40274e432a13ae9c6461c04112c86358b77d7c2 (patch)
tree03e3b83b32e7e07c47f6447e7561281b9637bd6a /scripts
parent00573263e0ab14f7e3409dbaf55485534f8db057 (diff)
downloadusermoji-b40274e432a13ae9c6461c04112c86358b77d7c2.tar.xz
icd: Make swapchain images persistent
Diffstat (limited to 'scripts')
-rw-r--r--scripts/mock_icd_generator.py30
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;
''',