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