aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspencer-lunarg <spencer@lunarg.com>2023-12-11 20:55:39 +0900
committerCharles Giessen <46324611+charles-lunarg@users.noreply.github.com>2023-12-11 09:37:31 -0700
commitd39a39c462f05e4bf649ebd97b6e4b4de982242d (patch)
tree2f3e6dd7c649fad220ae877a628151c7e456af7b
parent7e75f4d389799129b79f90d1401f15f511796dbd (diff)
downloadusermoji-d39a39c462f05e4bf649ebd97b6e4b4de982242d.tar.xz
icd: Add basic VkDisplayKHR support
-rw-r--r--icd/generated/function_definitions.h12
-rw-r--r--icd/mock_icd.h1
-rw-r--r--scripts/mock_icd_generator.py14
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.