|  | // | 
|  | // 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. | 
|  | // | 
|  |  | 
|  | // DisplayD3D.h: D3D implementation of egl::Display | 
|  |  | 
|  | #ifndef LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ | 
|  | #define LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ | 
|  |  | 
|  | #include "libANGLE/Device.h" | 
|  | #include "libANGLE/renderer/DisplayImpl.h" | 
|  |  | 
|  | #include "libANGLE/renderer/d3d/RendererD3D.h" | 
|  |  | 
|  | namespace rx | 
|  | { | 
|  | class DisplayD3D : public DisplayImpl, public d3d::Context | 
|  | { | 
|  | public: | 
|  | DisplayD3D(const egl::DisplayState &state); | 
|  |  | 
|  | egl::Error initialize(egl::Display *display) override; | 
|  | void terminate() override; | 
|  |  | 
|  | // Surface creation | 
|  | SurfaceImpl *createWindowSurface(const egl::SurfaceState &state, | 
|  | EGLNativeWindowType window, | 
|  | const egl::AttributeMap &attribs) override; | 
|  | SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state, | 
|  | const egl::AttributeMap &attribs) override; | 
|  | SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state, | 
|  | EGLenum buftype, | 
|  | EGLClientBuffer clientBuffer, | 
|  | const egl::AttributeMap &attribs) override; | 
|  | SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state, | 
|  | NativePixmapType nativePixmap, | 
|  | const egl::AttributeMap &attribs) override; | 
|  |  | 
|  | ImageImpl *createImage(const egl::ImageState &state, | 
|  | const gl::Context *context, | 
|  | EGLenum target, | 
|  | const egl::AttributeMap &attribs) override; | 
|  |  | 
|  | ContextImpl *createContext(const gl::State &state, | 
|  | gl::ErrorSet *errorSet, | 
|  | const egl::Config *configuration, | 
|  | const gl::Context *shareContext, | 
|  | const egl::AttributeMap &attribs) override; | 
|  |  | 
|  | StreamProducerImpl *createStreamProducerD3DTexture(egl::Stream::ConsumerType consumerType, | 
|  | const egl::AttributeMap &attribs) override; | 
|  |  | 
|  | ExternalImageSiblingImpl *createExternalImageSibling(const gl::Context *context, | 
|  | EGLenum target, | 
|  | EGLClientBuffer buffer, | 
|  | const egl::AttributeMap &attribs) override; | 
|  |  | 
|  | egl::Error makeCurrent(egl::Surface *drawSurface, | 
|  | egl::Surface *readSurface, | 
|  | gl::Context *context) override; | 
|  |  | 
|  | egl::ConfigSet generateConfigs() override; | 
|  |  | 
|  | bool testDeviceLost() override; | 
|  | egl::Error restoreLostDevice(const egl::Display *display) override; | 
|  |  | 
|  | bool isValidNativeWindow(EGLNativeWindowType window) const override; | 
|  | egl::Error validateClientBuffer(const egl::Config *configuration, | 
|  | EGLenum buftype, | 
|  | EGLClientBuffer clientBuffer, | 
|  | const egl::AttributeMap &attribs) const override; | 
|  | egl::Error validateImageClientBuffer(const gl::Context *context, | 
|  | EGLenum target, | 
|  | EGLClientBuffer clientBuffer, | 
|  | const egl::AttributeMap &attribs) const override; | 
|  |  | 
|  | DeviceImpl *createDevice() override; | 
|  |  | 
|  | std::string getVendorString() const override; | 
|  |  | 
|  | egl::Error waitClient(const gl::Context *context) override; | 
|  | egl::Error waitNative(const gl::Context *context, EGLint engine) override; | 
|  | gl::Version getMaxSupportedESVersion() const override; | 
|  | gl::Version getMaxConformantESVersion() const override; | 
|  |  | 
|  | void handleResult(HRESULT hr, | 
|  | const char *message, | 
|  | const char *file, | 
|  | const char *function, | 
|  | unsigned int line) override; | 
|  |  | 
|  | const std::string &getStoredErrorString() const { return mStoredErrorString; } | 
|  |  | 
|  | void populateFeatureList(angle::FeatureList *features) override; | 
|  |  | 
|  | private: | 
|  | void generateExtensions(egl::DisplayExtensions *outExtensions) const override; | 
|  | void generateCaps(egl::Caps *outCaps) const override; | 
|  |  | 
|  | egl::Display *mDisplay; | 
|  |  | 
|  | rx::RendererD3D *mRenderer; | 
|  | std::string mStoredErrorString; | 
|  | }; | 
|  |  | 
|  | }  // namespace rx | 
|  |  | 
|  | #endif  // LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ |