[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;
};