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