Move info maps into ResourceTracker
... to avoid more globals.
Bug: b/293897204
Test: GfxstreamEnd2EndTests
Change-Id: I52b3339e8bba599269f6475cb8d3d5268ab34676
diff --git a/guest/vulkan_enc/ResourceTracker.cpp b/guest/vulkan_enc/ResourceTracker.cpp
index a286f7f..c2a514c 100644
--- a/guest/vulkan_enc/ResourceTracker.cpp
+++ b/guest/vulkan_enc/ResourceTracker.cpp
@@ -195,168 +195,11 @@
static StagingInfo sStaging;
-#define HANDLE_DEFINE_TRIVIAL_INFO_STRUCT(type) \
- struct type##_Info { \
- uint32_t unused; \
- };
-
-GOLDFISH_VK_LIST_TRIVIAL_HANDLE_TYPES(HANDLE_DEFINE_TRIVIAL_INFO_STRUCT)
-
-struct VkInstance_Info {
- uint32_t highestApiVersion;
- std::set<std::string> enabledExtensions;
- // Fodder for vkEnumeratePhysicalDevices.
- std::vector<VkPhysicalDevice> physicalDevices;
-};
-
-struct VkDevice_Info {
- VkPhysicalDevice physdev;
- VkPhysicalDeviceProperties props;
- VkPhysicalDeviceMemoryProperties memProps;
- uint32_t apiVersion;
- std::set<std::string> enabledExtensions;
- std::vector<std::pair<PFN_vkDeviceMemoryReportCallbackEXT, void*>> deviceMemoryReportCallbacks;
-};
-
-struct VkDeviceMemory_Info {
- bool dedicated = false;
- bool imported = false;
-
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
- AHardwareBuffer* ahw = nullptr;
-#endif
- zx_handle_t vmoHandle = ZX_HANDLE_INVALID;
- VkDevice device;
-
- uint8_t* ptr = nullptr;
-
- uint64_t blobId = 0;
- uint64_t allocationSize = 0;
- uint32_t memoryTypeIndex = 0;
- uint64_t coherentMemorySize = 0;
- uint64_t coherentMemoryOffset = 0;
-
-#if defined(__ANDROID__)
- GoldfishAddressSpaceBlockPtr goldfishBlock = nullptr;
-#endif // defined(__ANDROID__)
- CoherentMemoryPtr coherentMemory = nullptr;
-};
-
-struct VkCommandBuffer_Info {
- uint32_t placeholder;
-};
-
-struct VkQueue_Info {
- VkDevice device;
-};
-
-// custom guest-side structs for images/buffers because of AHardwareBuffer :((
-struct VkImage_Info {
- VkDevice device;
- VkImageCreateInfo createInfo;
- bool external = false;
- VkExternalMemoryImageCreateInfo externalCreateInfo;
- VkDeviceMemory currentBacking = VK_NULL_HANDLE;
- VkDeviceSize currentBackingOffset = 0;
- VkDeviceSize currentBackingSize = 0;
- bool baseRequirementsKnown = false;
- VkMemoryRequirements baseRequirements;
-#ifdef VK_USE_PLATFORM_ANDROID_KHR
- bool hasExternalFormat = false;
- unsigned androidFormat = 0;
- std::vector<int> pendingQsriSyncFds;
-#endif
-#ifdef VK_USE_PLATFORM_FUCHSIA
- bool isSysmemBackedMemory = false;
-#endif
-};
-
-struct VkBuffer_Info {
- VkDevice device;
- VkBufferCreateInfo createInfo;
- bool external = false;
- VkExternalMemoryBufferCreateInfo externalCreateInfo;
- VkDeviceMemory currentBacking = VK_NULL_HANDLE;
- VkDeviceSize currentBackingOffset = 0;
- VkDeviceSize currentBackingSize = 0;
- bool baseRequirementsKnown = false;
- VkMemoryRequirements baseRequirements;
-#ifdef VK_USE_PLATFORM_FUCHSIA
- bool isSysmemBackedMemory = false;
-#endif
-};
-
-struct VkSemaphore_Info {
- VkDevice device;
- zx_handle_t eventHandle = ZX_HANDLE_INVALID;
- zx_koid_t eventKoid = ZX_KOID_INVALID;
- std::optional<int> syncFd = {};
-};
-
-struct VkDescriptorUpdateTemplate_Info {
- uint32_t templateEntryCount = 0;
- VkDescriptorUpdateTemplateEntry* templateEntries;
-
- uint32_t imageInfoCount = 0;
- uint32_t bufferInfoCount = 0;
- uint32_t bufferViewCount = 0;
- uint32_t inlineUniformBlockCount = 0;
- uint32_t* imageInfoIndices;
- uint32_t* bufferInfoIndices;
- uint32_t* bufferViewIndices;
- VkDescriptorImageInfo* imageInfos;
- VkDescriptorBufferInfo* bufferInfos;
- VkBufferView* bufferViews;
- std::vector<uint8_t> inlineUniformBlockBuffer;
- std::vector<uint32_t> inlineUniformBlockBytesPerBlocks; // bytes per uniform block
-};
-
-struct VkFence_Info {
- VkDevice device;
- bool external = false;
- VkExportFenceCreateInfo exportFenceCreateInfo;
-#if defined(VK_USE_PLATFORM_ANDROID_KHR) || defined(__linux__)
- int syncFd = -1;
-#endif
-};
-
-struct VkDescriptorPool_Info {
- uint32_t unused;
-};
-
-struct VkDescriptorSet_Info {
- uint32_t unused;
-};
-
-struct VkDescriptorSetLayout_Info {
- uint32_t unused;
-};
-
-struct VkCommandPool_Info {
- uint32_t unused;
-};
-
-struct VkSampler_Info {
- uint32_t unused;
-};
-
-struct VkBufferCollectionFUCHSIA_Info {
-#ifdef VK_USE_PLATFORM_FUCHSIA
- gfxstream::guest::Optional<fuchsia_sysmem::wire::BufferCollectionConstraints> constraints;
- gfxstream::guest::Optional<VkBufferCollectionPropertiesFUCHSIA> properties;
-
- // the index of corresponding createInfo for each image format
- // constraints in |constraints|.
- std::vector<uint32_t> createInfoIndex;
-#endif // VK_USE_PLATFORM_FUCHSIA
-};
-
struct CommandBufferPendingDescriptorSets {
std::unordered_set<VkDescriptorSet> sets;
};
#define HANDLE_REGISTER_IMPL_IMPL(type) \
- std::unordered_map<type, type##_Info> info_##type; \
void ResourceTracker::register_##type(type obj) { \
AutoLock<RecursiveLock> lock(mLock); \
info_##type[obj] = type##_Info(); \
@@ -442,7 +285,7 @@
return as_goldfish_VkDescriptorSet(dstSet)->reified->bindingIsImmutableSampler[dstBinding];
}
-VkDescriptorImageInfo filterNonexistentSampler(const VkDescriptorImageInfo& inputInfo) {
+VkDescriptorImageInfo ResourceTracker::filterNonexistentSampler(const VkDescriptorImageInfo& inputInfo) {
VkSampler sampler = inputInfo.sampler;
VkDescriptorImageInfo res = inputInfo;
@@ -456,9 +299,9 @@
return res;
}
-void emitDeviceMemoryReport(VkDevice_Info info, VkDeviceMemoryReportEventTypeEXT type,
+void ResourceTracker::emitDeviceMemoryReport(VkDevice_Info info, VkDeviceMemoryReportEventTypeEXT type,
uint64_t memoryObjectId, VkDeviceSize size, VkObjectType objectType,
- uint64_t objectHandle, uint32_t heapIndex = 0) {
+ uint64_t objectHandle, uint32_t heapIndex) {
if (info.deviceMemoryReportCallbacks.empty()) return;
const VkDeviceMemoryReportCallbackDataEXT callbackData = {
@@ -910,7 +753,7 @@
setMemoryRequirementsForSysmemBackedImage(image, reqs);
}
-CoherentMemoryPtr freeCoherentMemoryLocked(VkDeviceMemory memory, VkDeviceMemory_Info& info) {
+CoherentMemoryPtr ResourceTracker::freeCoherentMemoryLocked(VkDeviceMemory memory, VkDeviceMemory_Info& info) {
if (info.coherentMemory && info.ptr) {
if (info.coherentMemory->getDeviceMemory() != memory) {
delete_goldfish_VkDeviceMemory(memory);
@@ -1360,7 +1203,7 @@
}
#endif
-void unregister_VkDescriptorSet_locked(VkDescriptorSet set) {
+void ResourceTracker::unregister_VkDescriptorSet_locked(VkDescriptorSet set) {
struct goldfish_VkDescriptorSet* ds = as_goldfish_VkDescriptorSet(set);
delete ds->reified;
info_VkDescriptorSet.erase(set);