[15/n] ResourceTracker: Allow query and incrementing the sequence number
Bug: 177241396
This lets us access and increment the per-process sequence number
from ResourceTracker.
Change-Id: Ib7ed652e2d652874ab35c0dadaa4457887daf10c
diff --git a/system/vulkan/goldfish_vulkan.cpp b/system/vulkan/goldfish_vulkan.cpp
index 7340157..b756a5d 100644
--- a/system/vulkan/goldfish_vulkan.cpp
+++ b/system/vulkan/goldfish_vulkan.cpp
@@ -364,6 +364,7 @@
return ret; \
} \
goldfish_vk::ResourceTracker::get()->setupFeatures(rcEnc->featureInfo_const()); \
+ goldfish_vk::ResourceTracker::get()->setSeqnoPtr(getSeqnoPtrForProcess()); \
goldfish_vk::ResourceTracker::ThreadingCallbacks threadingCallbacks = { \
[] { \
auto hostCon = HostConnection::get(); \
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 51bc68f..2d9b8e6 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -227,6 +227,8 @@
DEFINE_RESOURCE_TRACKING_CLASS(UnwrapMapping, UNWRAP_MAPPING_IMPL_FOR_TYPE)
DEFINE_RESOURCE_TRACKING_CLASS(DestroyMapping, DESTROY_MAPPING_IMPL_FOR_TYPE)
+static uint32_t* sSeqnoPtr = nullptr;
+
// static
uint32_t ResourceTracker::streamFeatureBits = 0;
ResourceTracker::ThreadingCallbacks ResourceTracker::threadingCallbacks;
@@ -5545,6 +5547,23 @@
return mImpl->hasDeviceExtension(device, name);
}
+// static
+void ResourceTracker::setSeqnoPtr(uint32_t* seqnoptr) {
+ sSeqnoPtr = seqnoptr;
+}
+
+// static
+__attribute__((always_inline)) uint32_t ResourceTracker::nextSeqno() {
+ uint32_t res = __atomic_add_fetch(sSeqnoPtr, 1, __ATOMIC_SEQ_CST);
+ return res;
+}
+
+// static
+__attribute__((always_inline)) uint32_t ResourceTracker::getSeqno() {
+ uint32_t res = __atomic_load_n(sSeqnoPtr, __ATOMIC_SEQ_CST);
+ return res;
+}
+
VkResult ResourceTracker::on_vkEnumerateInstanceExtensionProperties(
void* context,
VkResult input_result,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 8b2d1a2..bca638f 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -527,6 +527,10 @@
bool hasInstanceExtension(VkInstance instance, const std::string& name) const;
bool hasDeviceExtension(VkDevice instance, const std::string& name) const;
+ static void setSeqnoPtr(uint32_t* seqnoptr);
+ static __attribute__((always_inline)) uint32_t nextSeqno();
+ static __attribute__((always_inline)) uint32_t getSeqno();
+
// Transforms
void deviceMemoryTransform_tohost(
VkDeviceMemory* memory, uint32_t memoryCount,