diff options
| author | spencer-lunarg <spencer@lunarg.com> | 2023-12-11 20:55:39 +0900 |
|---|---|---|
| committer | Charles Giessen <46324611+charles-lunarg@users.noreply.github.com> | 2023-12-11 09:37:31 -0700 |
| commit | d39a39c462f05e4bf649ebd97b6e4b4de982242d (patch) | |
| tree | 2f3e6dd7c649fad220ae877a628151c7e456af7b | |
| parent | 7e75f4d389799129b79f90d1401f15f511796dbd (diff) | |
| download | usermoji-d39a39c462f05e4bf649ebd97b6e4b4de982242d.tar.xz | |
icd: Add basic VkDisplayKHR support
| -rw-r--r-- | icd/generated/function_definitions.h | 12 | ||||
| -rw-r--r-- | icd/mock_icd.h | 1 | ||||
| -rw-r--r-- | scripts/mock_icd_generator.py | 14 |
3 files changed, 24 insertions, 3 deletions
diff --git a/icd/generated/function_definitions.h b/icd/generated/function_definitions.h index 0d4f3bdc..da8a0eab 100644 --- a/icd/generated/function_definitions.h +++ b/icd/generated/function_definitions.h @@ -52,8 +52,10 @@ static VKAPI_ATTR void VKAPI_CALL DestroyInstance( { if (instance) { - for (const auto physical_device : physical_device_map.at(instance)) + for (const auto physical_device : physical_device_map.at(instance)) { + display_map.erase(physical_device); DestroyDispObjHandle((void*)physical_device); + } physical_device_map.erase(instance); DestroyDispObjHandle((void*)instance); } @@ -2526,7 +2528,13 @@ static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceDisplayPropertiesKHR( uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties) { -//Not a CREATE or DESTROY function + if (!pProperties) { + *pPropertyCount = 1; + } else { + unique_lock_t lock(global_lock); + pProperties[0].display = (VkDisplayKHR)global_unique_handle++; + display_map[physicalDevice].insert(pProperties[0].display); + } return VK_SUCCESS; } diff --git a/icd/mock_icd.h b/icd/mock_icd.h index fce0afc7..d72f8ee7 100644 --- a/icd/mock_icd.h +++ b/icd/mock_icd.h @@ -50,6 +50,7 @@ static void DestroyDispObjHandle(void* handle) { delete reinterpret_cast<VK_LOAD static constexpr uint32_t icd_physical_device_count = 1; static std::unordered_map<VkInstance, std::array<VkPhysicalDevice, icd_physical_device_count>> physical_device_map; +static std::unordered_map<VkPhysicalDevice, std::unordered_set<VkDisplayKHR>> display_map; // Map device memory handle to any mapped allocations that we'll need to free on unmap static std::unordered_map<VkDeviceMemory, std::vector<void*>> mapped_memory_map; diff --git a/scripts/mock_icd_generator.py b/scripts/mock_icd_generator.py index 15103fb5..84c7c72d 100644 --- a/scripts/mock_icd_generator.py +++ b/scripts/mock_icd_generator.py @@ -45,8 +45,10 @@ CUSTOM_C_INTERCEPTS = { ''', 'vkDestroyInstance': ''' if (instance) { - for (const auto physical_device : physical_device_map.at(instance)) + for (const auto physical_device : physical_device_map.at(instance)) { + display_map.erase(physical_device); DestroyDispObjHandle((void*)physical_device); + } physical_device_map.erase(instance); DestroyDispObjHandle((void*)instance); } @@ -1090,6 +1092,16 @@ CUSTOM_C_INTERCEPTS = { } return VK_SUCCESS; ''', +'vkGetPhysicalDeviceDisplayPropertiesKHR': ''' + if (!pProperties) { + *pPropertyCount = 1; + } else { + unique_lock_t lock(global_lock); + pProperties[0].display = (VkDisplayKHR)global_unique_handle++; + display_map[physicalDevice].insert(pProperties[0].display); + } + return VK_SUCCESS; +''', } # MockICDGeneratorOptions - subclass of GeneratorOptions. |
