[magma] Plumb context ID to magma decoder

This change makes the RenderThread's context ID visible to the magma
decoder. This will be needed for secure use of guest-allocated
buffers.

Bug: b/277219980
Test: m libgfxstream_backend
Change-Id: I482fee58b9513e252cf62f414366d299d111adf1
diff --git a/stream-servers/RenderThread.cpp b/stream-servers/RenderThread.cpp
index d014795..195ec6a 100644
--- a/stream-servers/RenderThread.cpp
+++ b/stream-servers/RenderThread.cpp
@@ -298,7 +298,7 @@
         tInfo.m_vkInfo.emplace();
     }
 
-    tInfo.m_magmaInfo.emplace();
+    tInfo.m_magmaInfo.emplace(mContextId);
 
     // This is the only place where we try loading from snapshot.
     // But the context bind / restoration will be delayed after receiving
diff --git a/stream-servers/RenderThreadInfoMagma.cpp b/stream-servers/RenderThreadInfoMagma.cpp
index 4b80fc8..3c8b678 100644
--- a/stream-servers/RenderThreadInfoMagma.cpp
+++ b/stream-servers/RenderThreadInfoMagma.cpp
@@ -18,13 +18,13 @@
 
 static thread_local RenderThreadInfoMagma* tlThreadInfo = nullptr;
 
-RenderThreadInfoMagma::RenderThreadInfoMagma() {
+RenderThreadInfoMagma::RenderThreadInfoMagma(uint32_t context_id) {
     if (tlThreadInfo != nullptr) {
       GFXSTREAM_ABORT(emugl::FatalError(emugl::ABORT_REASON_OTHER))
         << "Attempted to set thread local Magma render thread info twice.";
     }
     tlThreadInfo = this;
-    mMagmaDec = gfxstream::magma::Decoder::create();
+    mMagmaDec = gfxstream::magma::Decoder::create(context_id);
 }
 
 RenderThreadInfoMagma::~RenderThreadInfoMagma() {
diff --git a/stream-servers/RenderThreadInfoMagma.h b/stream-servers/RenderThreadInfoMagma.h
index e8fa2c6..42e327c 100644
--- a/stream-servers/RenderThreadInfoMagma.h
+++ b/stream-servers/RenderThreadInfoMagma.h
@@ -20,7 +20,7 @@
     // Create new instance. Only call this once per thread.
     // Future calls to get() will return this instance until
     // it is destroyed.
-    RenderThreadInfoMagma();
+    RenderThreadInfoMagma(uint32_t context_id);
 
     // Destructor.
     ~RenderThreadInfoMagma();
diff --git a/stream-servers/magma/Decoder.cpp b/stream-servers/magma/Decoder.cpp
index 6ae5fe3..7ee04a0 100644
--- a/stream-servers/magma/Decoder.cpp
+++ b/stream-servers/magma/Decoder.cpp
@@ -23,9 +23,9 @@
 namespace gfxstream {
 namespace magma {
 
-std::unique_ptr<Decoder> Decoder::create() {
+std::unique_ptr<Decoder> Decoder::create(uint32_t context_id) {
 #if GFXSTREAM_MAGMA_USE_INTEL_DRM
-    return IntelDrmDecoder::create();
+    return IntelDrmDecoder::create(context_id);
 #endif
     return nullptr;
 }
diff --git a/stream-servers/magma/Decoder.h b/stream-servers/magma/Decoder.h
index 3ace5df..e6f5d3c 100644
--- a/stream-servers/magma/Decoder.h
+++ b/stream-servers/magma/Decoder.h
@@ -24,7 +24,7 @@
 // Generic magma decoder.
 class Decoder : public magma_decoder_context_t {
    public:
-    static std::unique_ptr<Decoder> create();
+    static std::unique_ptr<Decoder> create(uint32_t context_id);
 
    protected:
     Decoder();
diff --git a/stream-servers/magma/IntelDrmDecoder.cpp b/stream-servers/magma/IntelDrmDecoder.cpp
index 0aedaae..414bb71 100644
--- a/stream-servers/magma/IntelDrmDecoder.cpp
+++ b/stream-servers/magma/IntelDrmDecoder.cpp
@@ -28,8 +28,10 @@
 namespace gfxstream {
 namespace magma {
 
-std::unique_ptr<IntelDrmDecoder> IntelDrmDecoder::create() {
+std::unique_ptr<IntelDrmDecoder> IntelDrmDecoder::create(uint32_t context_id) {
     std::unique_ptr<IntelDrmDecoder> decoder(new IntelDrmDecoder());
+    decoder->mContextId = context_id;
+    INFO("IntelDrmDecoder created for context %" PRIu32, context_id);
     return decoder;
 }
 
diff --git a/stream-servers/magma/IntelDrmDecoder.h b/stream-servers/magma/IntelDrmDecoder.h
index ae78c92..211b0cb 100644
--- a/stream-servers/magma/IntelDrmDecoder.h
+++ b/stream-servers/magma/IntelDrmDecoder.h
@@ -24,7 +24,7 @@
 // Magma decoder for running on an Intel DRM backend.
 class IntelDrmDecoder : public Decoder {
   public:
-    static std::unique_ptr<IntelDrmDecoder> create();
+    static std::unique_ptr<IntelDrmDecoder> create(uint32_t context_id);
 
   private:
     IntelDrmDecoder();
@@ -47,6 +47,7 @@
     magma_status_t magma_connection_map_buffer(magma_connection_t connection, uint64_t hw_va, magma_buffer_t buffer, uint64_t offset, uint64_t length, uint64_t map_flags) override;
     void magma_connection_unmap_buffer(magma_connection_t connection, uint64_t hw_va, magma_buffer_t buffer) override;
 
+    uint32_t mContextId;
     MonotonicMap<magma_device_t, DrmDevice> mDevices;
 };