xref: /aosp_15_r20/external/mesa3d/src/gfxstream/guest/connection-manager/GfxStreamConnectionManager.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2024 Google LLC
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef GFXSTREAM_CONNECTION_MANAGER_H
7 #define GFXSTREAM_CONNECTION_MANAGER_H
8 
9 #include <memory>
10 #include <unordered_map>
11 
12 #include "GfxStreamConnection.h"
13 #include "VirtGpu.h"
14 #include "gfxstream/guest/IOStream.h"
15 
16 enum GfxStreamConnectionType {
17     GFXSTREAM_CONNECTION_GLES = 1,
18     GFXSTREAM_CONNECTION_GLES2 = 2,
19     GFXSTREAM_CONNECTION_RENDER_CONTROL = 3,
20     GFXSTREAM_CONNECTION_VULKAN = 4,
21 };
22 
23 enum GfxStreamTransportType {
24     GFXSTREAM_TRANSPORT_QEMU_PIPE = 1,
25     GFXSTREAM_TRANSPORT_ADDRESS_SPACE = 2,
26     GFXSTREAM_TRANSPORT_VIRTIO_GPU_PIPE = 3,
27     GFXSTREAM_TRANSPORT_VIRTIO_GPU_ADDRESS_SPACE = 4,
28 };
29 
30 class GfxStreamConnectionManager {
31    public:
32     GfxStreamConnectionManager(GfxStreamTransportType type, VirtGpuCapset capset);
33     ~GfxStreamConnectionManager();
34 
35     static GfxStreamConnectionManager* getThreadLocalInstance(GfxStreamTransportType type,
36                                                               VirtGpuCapset capset);
37     void threadLocalExit();
38 
39     bool initialize();
40     int32_t addConnection(GfxStreamConnectionType type,
41                           std::unique_ptr<GfxStreamConnection> connection);
42     void* getEncoder(GfxStreamConnectionType type);
43 
44     gfxstream::guest::IOStream* getStream();
45     gfxstream::guest::IOStream* processPipeStream(GfxStreamTransportType transportType);
46 
47    private:
48     // intrusively refcounted
49     gfxstream::guest::IOStream* mStream = nullptr;
50     int32_t mDescriptor = -1;
51     GfxStreamTransportType mTransportType;
52     VirtGpuCapset mCapset;
53     std::unordered_map<GfxStreamConnectionType, std::unique_ptr<GfxStreamConnection>> mConnections;
54 };
55 
56 #endif
57