diff options
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/renderer/DisplayImpl.h')
-rw-r--r-- | gfx/angle/checkout/src/libANGLE/renderer/DisplayImpl.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/renderer/DisplayImpl.h b/gfx/angle/checkout/src/libANGLE/renderer/DisplayImpl.h new file mode 100644 index 0000000000..cd1d365467 --- /dev/null +++ b/gfx/angle/checkout/src/libANGLE/renderer/DisplayImpl.h @@ -0,0 +1,142 @@ +// +// Copyright 2014 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// + +// DisplayImpl.h: Implementation methods of egl::Display + +#ifndef LIBANGLE_RENDERER_DISPLAYIMPL_H_ +#define LIBANGLE_RENDERER_DISPLAYIMPL_H_ + +#include "common/angleutils.h" +#include "libANGLE/Caps.h" +#include "libANGLE/Config.h" +#include "libANGLE/Error.h" +#include "libANGLE/Observer.h" +#include "libANGLE/Stream.h" +#include "libANGLE/Version.h" +#include "libANGLE/renderer/EGLImplFactory.h" +#include "platform/Feature.h" + +#include <set> +#include <vector> + +namespace angle +{ +struct FrontendFeatures; +} // namespace angle + +namespace egl +{ +class AttributeMap; +class BlobCache; +class Display; +struct DisplayState; +struct Config; +class Surface; +class ImageSibling; +class Thread; +} // namespace egl + +namespace gl +{ +class Context; +} // namespace gl + +namespace rx +{ +class SurfaceImpl; +class ImageImpl; +struct ConfigDesc; +class DeviceImpl; +class StreamProducerImpl; + +class ShareGroupImpl : angle::NonCopyable +{ + public: + ShareGroupImpl() {} + virtual ~ShareGroupImpl() {} + virtual void onDestroy(const egl::Display *display) {} +}; + +class DisplayImpl : public EGLImplFactory, public angle::Subject +{ + public: + DisplayImpl(const egl::DisplayState &state); + ~DisplayImpl() override; + + virtual egl::Error initialize(egl::Display *display) = 0; + virtual void terminate() = 0; + virtual egl::Error prepareForCall(); + virtual egl::Error releaseThread(); + + virtual egl::Error makeCurrent(egl::Display *display, + egl::Surface *drawSurface, + egl::Surface *readSurface, + gl::Context *context) = 0; + + virtual egl::ConfigSet generateConfigs() = 0; + + virtual bool testDeviceLost() = 0; + virtual egl::Error restoreLostDevice(const egl::Display *display) = 0; + + virtual bool isValidNativeWindow(EGLNativeWindowType window) const = 0; + virtual egl::Error validateClientBuffer(const egl::Config *configuration, + EGLenum buftype, + EGLClientBuffer clientBuffer, + const egl::AttributeMap &attribs) const; + virtual egl::Error validateImageClientBuffer(const gl::Context *context, + EGLenum target, + EGLClientBuffer clientBuffer, + const egl::AttributeMap &attribs) const; + virtual egl::Error validatePixmap(const egl::Config *config, + EGLNativePixmapType pixmap, + const egl::AttributeMap &attributes) const; + + virtual std::string getRendererDescription() = 0; + virtual std::string getVendorString() = 0; + virtual std::string getVersionString() = 0; + + virtual DeviceImpl *createDevice(); + + virtual egl::Error waitClient(const gl::Context *context) = 0; + virtual egl::Error waitNative(const gl::Context *context, EGLint engine) = 0; + virtual gl::Version getMaxSupportedESVersion() const = 0; + virtual gl::Version getMaxConformantESVersion() const = 0; + const egl::Caps &getCaps() const; + + virtual void setBlobCacheFuncs(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) {} + + const egl::DisplayExtensions &getExtensions() const; + + void setBlobCache(egl::BlobCache *blobCache) { mBlobCache = blobCache; } + egl::BlobCache *getBlobCache() const { return mBlobCache; } + + virtual void initializeFrontendFeatures(angle::FrontendFeatures *features) const {} + + virtual void populateFeatureList(angle::FeatureList *features) = 0; + + const egl::DisplayState &getState() const { return mState; } + + virtual egl::Error handleGPUSwitch(); + + protected: + const egl::DisplayState &mState; + + private: + virtual void generateExtensions(egl::DisplayExtensions *outExtensions) const = 0; + virtual void generateCaps(egl::Caps *outCaps) const = 0; + + mutable bool mExtensionsInitialized; + mutable egl::DisplayExtensions mExtensions; + + mutable bool mCapsInitialized; + mutable egl::Caps mCaps; + + egl::BlobCache *mBlobCache; +}; + +} // namespace rx + +#endif // LIBANGLE_RENDERER_DISPLAYIMPL_H_ |