1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // DisplayImpl.h: Implementation methods of egl::Display 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_DISPLAYIMPL_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_DISPLAYIMPL_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include "common/Optional.h" 13*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Caps.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Config.h" 16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Observer.h" 18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Stream.h" 19*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Version.h" 20*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/EGLImplFactory.h" 21*8975f5c5SAndroid Build Coastguard Worker #include "platform/Feature.h" 22*8975f5c5SAndroid Build Coastguard Worker 23*8975f5c5SAndroid Build Coastguard Worker #include <set> 24*8975f5c5SAndroid Build Coastguard Worker #include <vector> 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker namespace angle 27*8975f5c5SAndroid Build Coastguard Worker { 28*8975f5c5SAndroid Build Coastguard Worker struct FrontendFeatures; 29*8975f5c5SAndroid Build Coastguard Worker } // namespace angle 30*8975f5c5SAndroid Build Coastguard Worker 31*8975f5c5SAndroid Build Coastguard Worker namespace egl 32*8975f5c5SAndroid Build Coastguard Worker { 33*8975f5c5SAndroid Build Coastguard Worker class AttributeMap; 34*8975f5c5SAndroid Build Coastguard Worker class BlobCache; 35*8975f5c5SAndroid Build Coastguard Worker class Display; 36*8975f5c5SAndroid Build Coastguard Worker struct DisplayState; 37*8975f5c5SAndroid Build Coastguard Worker struct Config; 38*8975f5c5SAndroid Build Coastguard Worker class Surface; 39*8975f5c5SAndroid Build Coastguard Worker class ImageSibling; 40*8975f5c5SAndroid Build Coastguard Worker class Thread; 41*8975f5c5SAndroid Build Coastguard Worker } // namespace egl 42*8975f5c5SAndroid Build Coastguard Worker 43*8975f5c5SAndroid Build Coastguard Worker namespace gl 44*8975f5c5SAndroid Build Coastguard Worker { 45*8975f5c5SAndroid Build Coastguard Worker class Context; 46*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker namespace rx 49*8975f5c5SAndroid Build Coastguard Worker { 50*8975f5c5SAndroid Build Coastguard Worker class SurfaceImpl; 51*8975f5c5SAndroid Build Coastguard Worker class ImageImpl; 52*8975f5c5SAndroid Build Coastguard Worker struct ConfigDesc; 53*8975f5c5SAndroid Build Coastguard Worker class DeviceImpl; 54*8975f5c5SAndroid Build Coastguard Worker class StreamProducerImpl; 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker class DisplayImpl : public EGLImplFactory, public angle::Subject 57*8975f5c5SAndroid Build Coastguard Worker { 58*8975f5c5SAndroid Build Coastguard Worker public: 59*8975f5c5SAndroid Build Coastguard Worker DisplayImpl(const egl::DisplayState &state); 60*8975f5c5SAndroid Build Coastguard Worker ~DisplayImpl() override; 61*8975f5c5SAndroid Build Coastguard Worker 62*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error initialize(egl::Display *display) = 0; 63*8975f5c5SAndroid Build Coastguard Worker virtual void terminate() = 0; 64*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error prepareForCall(); 65*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error releaseThread(); 66*8975f5c5SAndroid Build Coastguard Worker 67*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error makeCurrent(egl::Display *display, 68*8975f5c5SAndroid Build Coastguard Worker egl::Surface *drawSurface, 69*8975f5c5SAndroid Build Coastguard Worker egl::Surface *readSurface, 70*8975f5c5SAndroid Build Coastguard Worker gl::Context *context) = 0; 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker virtual egl::ConfigSet generateConfigs() = 0; 73*8975f5c5SAndroid Build Coastguard Worker 74*8975f5c5SAndroid Build Coastguard Worker virtual bool testDeviceLost() = 0; 75*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error restoreLostDevice(const egl::Display *display) = 0; 76*8975f5c5SAndroid Build Coastguard Worker 77*8975f5c5SAndroid Build Coastguard Worker virtual bool isValidNativeWindow(EGLNativeWindowType window) const = 0; 78*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error validateClientBuffer(const egl::Config *configuration, 79*8975f5c5SAndroid Build Coastguard Worker EGLenum buftype, 80*8975f5c5SAndroid Build Coastguard Worker EGLClientBuffer clientBuffer, 81*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribs) const; 82*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error validateImageClientBuffer(const gl::Context *context, 83*8975f5c5SAndroid Build Coastguard Worker EGLenum target, 84*8975f5c5SAndroid Build Coastguard Worker EGLClientBuffer clientBuffer, 85*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribs) const; 86*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error validatePixmap(const egl::Config *config, 87*8975f5c5SAndroid Build Coastguard Worker EGLNativePixmapType pixmap, 88*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attributes) const; 89*8975f5c5SAndroid Build Coastguard Worker 90*8975f5c5SAndroid Build Coastguard Worker virtual std::string getRendererDescription() = 0; 91*8975f5c5SAndroid Build Coastguard Worker virtual std::string getVendorString() = 0; 92*8975f5c5SAndroid Build Coastguard Worker virtual std::string getVersionString(bool includeFullVersion) = 0; 93*8975f5c5SAndroid Build Coastguard Worker 94*8975f5c5SAndroid Build Coastguard Worker virtual DeviceImpl *createDevice(); 95*8975f5c5SAndroid Build Coastguard Worker 96*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error waitClient(const gl::Context *context) = 0; 97*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error waitNative(const gl::Context *context, EGLint engine) = 0; 98*8975f5c5SAndroid Build Coastguard Worker virtual gl::Version getMaxSupportedESVersion() const = 0; 99*8975f5c5SAndroid Build Coastguard Worker virtual gl::Version getMaxConformantESVersion() const = 0; 100*8975f5c5SAndroid Build Coastguard Worker const egl::Caps &getCaps() const; 101*8975f5c5SAndroid Build Coastguard Worker setBlobCacheFuncs(EGLSetBlobFuncANDROID set,EGLGetBlobFuncANDROID get)102*8975f5c5SAndroid Build Coastguard Worker virtual void setBlobCacheFuncs(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) {} 103*8975f5c5SAndroid Build Coastguard Worker 104*8975f5c5SAndroid Build Coastguard Worker const egl::DisplayExtensions &getExtensions() const; 105*8975f5c5SAndroid Build Coastguard Worker setBlobCache(egl::BlobCache * blobCache)106*8975f5c5SAndroid Build Coastguard Worker void setBlobCache(egl::BlobCache *blobCache) { mBlobCache = blobCache; } getBlobCache()107*8975f5c5SAndroid Build Coastguard Worker egl::BlobCache *getBlobCache() const { return mBlobCache; } 108*8975f5c5SAndroid Build Coastguard Worker initializeFrontendFeatures(angle::FrontendFeatures * features)109*8975f5c5SAndroid Build Coastguard Worker virtual void initializeFrontendFeatures(angle::FrontendFeatures *features) const {} 110*8975f5c5SAndroid Build Coastguard Worker 111*8975f5c5SAndroid Build Coastguard Worker virtual void populateFeatureList(angle::FeatureList *features) = 0; 112*8975f5c5SAndroid Build Coastguard Worker getState()113*8975f5c5SAndroid Build Coastguard Worker const egl::DisplayState &getState() const { return mState; } 114*8975f5c5SAndroid Build Coastguard Worker 115*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error handleGPUSwitch(); 116*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error forceGPUSwitch(EGLint gpuIDHigh, EGLint gpuIDLow); 117*8975f5c5SAndroid Build Coastguard Worker 118*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error waitUntilWorkScheduled(); 119*8975f5c5SAndroid Build Coastguard Worker 120*8975f5c5SAndroid Build Coastguard Worker virtual angle::NativeWindowSystem getWindowSystem() const; 121*8975f5c5SAndroid Build Coastguard Worker 122*8975f5c5SAndroid Build Coastguard Worker virtual bool supportsDmaBufFormat(EGLint format) const; 123*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error queryDmaBufFormats(EGLint max_formats, EGLint *formats, EGLint *num_formats); 124*8975f5c5SAndroid Build Coastguard Worker virtual egl::Error queryDmaBufModifiers(EGLint format, 125*8975f5c5SAndroid Build Coastguard Worker EGLint max_modifiers, 126*8975f5c5SAndroid Build Coastguard Worker EGLuint64KHR *modifiers, 127*8975f5c5SAndroid Build Coastguard Worker EGLBoolean *external_only, 128*8975f5c5SAndroid Build Coastguard Worker EGLint *num_modifiers); 129*8975f5c5SAndroid Build Coastguard Worker 130*8975f5c5SAndroid Build Coastguard Worker protected: 131*8975f5c5SAndroid Build Coastguard Worker const egl::DisplayState &mState; 132*8975f5c5SAndroid Build Coastguard Worker 133*8975f5c5SAndroid Build Coastguard Worker private: 134*8975f5c5SAndroid Build Coastguard Worker virtual void generateExtensions(egl::DisplayExtensions *outExtensions) const = 0; 135*8975f5c5SAndroid Build Coastguard Worker virtual void generateCaps(egl::Caps *outCaps) const = 0; 136*8975f5c5SAndroid Build Coastguard Worker 137*8975f5c5SAndroid Build Coastguard Worker mutable bool mExtensionsInitialized; 138*8975f5c5SAndroid Build Coastguard Worker mutable egl::DisplayExtensions mExtensions; 139*8975f5c5SAndroid Build Coastguard Worker 140*8975f5c5SAndroid Build Coastguard Worker mutable bool mCapsInitialized; 141*8975f5c5SAndroid Build Coastguard Worker mutable egl::Caps mCaps; 142*8975f5c5SAndroid Build Coastguard Worker 143*8975f5c5SAndroid Build Coastguard Worker egl::BlobCache *mBlobCache; 144*8975f5c5SAndroid Build Coastguard Worker }; 145*8975f5c5SAndroid Build Coastguard Worker 146*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 147*8975f5c5SAndroid Build Coastguard Worker 148*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_DISPLAYIMPL_H_ 149