vulkan: Use std::atomic for seqno

Cherry-picks aosp/2444542 to gfxstream-protocols

Bug: b/272079201
Test: ./scripts/generate-vulkan-sources.sh && m
Change-Id: I08beaae9c7b206b69b75862cb638b6d08a2a5109
diff --git a/registry/vulkan/scripts/cereal/decoder.py b/registry/vulkan/scripts/cereal/decoder.py
index 5363f63..a41fe7e 100644
--- a/registry/vulkan/scripts/cereal/decoder.py
+++ b/registry/vulkan/scripts/cereal/decoder.py
@@ -26,6 +26,7 @@
 
 decoder_decl_preamble = """
 
+class ProcessResources;
 class IOStream;
 
 class VkDecoder {
@@ -33,8 +34,8 @@
     VkDecoder();
     ~VkDecoder();
     void setForSnapshotLoad(bool forSnapshotLoad);
-    size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr,
-                  const VkDecoderContext&);
+    size_t decode(void* buf, size_t bufsize, IOStream* stream,
+                  const ProcessResources* processResources, const VkDecoderContext&);
 private:
     class Impl;
     std::unique_ptr<Impl> mImpl;
@@ -66,8 +67,8 @@
         m_forSnapshotLoad = forSnapshotLoad;
     }
 
-    size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr,
-                  const VkDecoderContext&);
+    size_t decode(void* buf, size_t bufsize, IOStream* stream,
+                  const ProcessResources* processResources, const VkDecoderContext&);
 
 private:
     bool m_logCalls;
@@ -94,9 +95,10 @@
     mImpl->setForSnapshotLoad(forSnapshotLoad);
 }
 
-size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr,
+size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream,
+                         const ProcessResources* processResources,
                          const VkDecoderContext& context) {
-    return mImpl->decode(buf, bufsize, stream, seqnoPtr, context);
+    return mImpl->decode(buf, bufsize, stream, processResources, context);
 }
 
 // VkDecoder::Impl::decode to follow
@@ -423,7 +425,7 @@
     cgen.stmt("%s->clearPool()" % READ_STREAM)
 
 def emit_seqno_incr(api, cgen):
-    cgen.stmt("if (queueSubmitWithCommandsEnabled) __atomic_fetch_add(seqnoPtr, 1, __ATOMIC_SEQ_CST)")
+    cgen.stmt("if (queueSubmitWithCommandsEnabled) seqnoPtr->fetch_add(1, std::memory_order_seq_cst)")
 
 def emit_snapshot(typeInfo, api, cgen):
 
@@ -741,7 +743,8 @@
 
         self.module.appendImpl(
             """
-size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream, uint32_t* seqnoPtr,
+size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream,
+                               const ProcessResources* processResources,
                                const VkDecoderContext& context)
 """)
 
@@ -796,6 +799,9 @@
                 executionData->insert({{"previous_seqno", std::to_string(m_prevSeqno.value())}});
             }
         }
+
+        std::atomic<uint32_t>* seqnoPtr = processResources->getSequenceNumberPtr();
+
         if (queueSubmitWithCommandsEnabled && ((opcode >= OP_vkFirst && opcode < OP_vkLast) || (opcode >= OP_vkFirst_old && opcode < OP_vkLast_old))) {
             uint32_t seqno;
             memcpy(&seqno, *readStreamPtrPtr, sizeof(uint32_t)); *readStreamPtrPtr += sizeof(uint32_t);
@@ -817,12 +823,11 @@
                             /* Data gathered if this hangs*/
                             .setOnHangCallback([=]() {
                                 auto annotations = std::make_unique<EventHangMetadata::HangAnnotations>();
-                                annotations->insert({{"seqnoPtr", std::to_string(__atomic_load_n(
-                                                                      seqnoPtr, __ATOMIC_SEQ_CST))}});
+                                annotations->insert({{"seqnoPtr", std::to_string(seqnoPtr->load(std::memory_order_seq_cst))}});
                                 return annotations;
                             })
                             .build();
-                    while ((seqno - __atomic_load_n(seqnoPtr, __ATOMIC_SEQ_CST) != 1)) {
+                    while ((seqno - seqnoPtr->load(std::memory_order_seq_cst) != 1)) {
                         #if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)))
                         _mm_pause();
                         #elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
diff --git a/registry/vulkan/scripts/cerealgenerator.py b/registry/vulkan/scripts/cerealgenerator.py
index 29d7321..ad5aab7 100644
--- a/registry/vulkan/scripts/cerealgenerator.py
+++ b/registry/vulkan/scripts/cerealgenerator.py
@@ -411,6 +411,7 @@
 #include "{self.baseLibDirPrefix}/system/System.h"
 #include "{self.baseLibDirPrefix}/Tracing.h"
 #include "{self.baseLibDirPrefix}/Metrics.h"
+#include "stream-servers/FrameBuffer.h"
 #include "stream-servers/IOStream.h"
 #include "host-common/feature_control.h"
 #include "host-common/GfxstreamFatalError.h"