From d39a39c462f05e4bf649ebd97b6e4b4de982242d Mon Sep 17 00:00:00 2001 From: spencer-lunarg Date: Mon, 11 Dec 2023 20:55:39 +0900 Subject: icd: Add basic VkDisplayKHR support --- icd/generated/function_definitions.h | 12 ++++++++++-- icd/mock_icd.h | 1 + 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> physical_device_map; +static std::unordered_map> display_map; // Map device memory handle to any mapped allocations that we'll need to free on unmap static std::unordered_map> 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. -- cgit v1.2.3