assert(object != NULL);
dev_data->memObjMap[mem] = unique_ptr<DEVICE_MEM_INFO>(new DEVICE_MEM_INFO(object, mem, pAllocateInfo));
+
+ if (pAllocateInfo->pNext) {
+ auto struct_header = reinterpret_cast<const GENERIC_HEADER *>(pAllocateInfo->pNext);
+ while (struct_header) {
+ if (VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR == struct_header->sType ||
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR == struct_header->sType) {
+ dev_data->memObjMap[mem]->global_valid = true;
+ break;
+ }
+ struct_header = reinterpret_cast<const GENERIC_HEADER *>(struct_header->pNext);
+ }
+ }
}
// For given bound_object_handle, bound to given mem allocation, verify that the range for the bound object is valid
// Data struct for tracking memory object
struct DEVICE_MEM_INFO : public BASE_NODE {
void *object; // Dispatchable object used to create this memory (device of swapchain)
- bool global_valid; // If allocation is mapped, set to "true" to be picked up by subsequently bound ranges
+ bool global_valid; // If allocation is mapped or external, set to "true" to be picked up by subsequently bound ranges
VkDeviceMemory mem;
VkMemoryAllocateInfo alloc_info;
std::unordered_set<VK_OBJECT> obj_bindings; // objects bound to this memory