• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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