1 // 2 // Copyright 2014 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // DisplayD3D.h: D3D implementation of egl::Display 8 9 #ifndef LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ 10 #define LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ 11 12 #include "libANGLE/Device.h" 13 #include "libANGLE/renderer/DisplayImpl.h" 14 15 #include "libANGLE/renderer/d3d/RendererD3D.h" 16 17 namespace rx 18 { 19 class ShareGroupD3D : public ShareGroupImpl 20 {}; 21 22 class DisplayD3D : public DisplayImpl, public d3d::Context 23 { 24 public: 25 DisplayD3D(const egl::DisplayState &state); 26 27 egl::Error initialize(egl::Display *display) override; 28 void terminate() override; 29 30 // Surface creation 31 SurfaceImpl *createWindowSurface(const egl::SurfaceState &state, 32 EGLNativeWindowType window, 33 const egl::AttributeMap &attribs) override; 34 SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state, 35 const egl::AttributeMap &attribs) override; 36 SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state, 37 EGLenum buftype, 38 EGLClientBuffer clientBuffer, 39 const egl::AttributeMap &attribs) override; 40 SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state, 41 NativePixmapType nativePixmap, 42 const egl::AttributeMap &attribs) override; 43 44 ImageImpl *createImage(const egl::ImageState &state, 45 const gl::Context *context, 46 EGLenum target, 47 const egl::AttributeMap &attribs) override; 48 49 ContextImpl *createContext(const gl::State &state, 50 gl::ErrorSet *errorSet, 51 const egl::Config *configuration, 52 const gl::Context *shareContext, 53 const egl::AttributeMap &attribs) override; 54 55 StreamProducerImpl *createStreamProducerD3DTexture(egl::Stream::ConsumerType consumerType, 56 const egl::AttributeMap &attribs) override; 57 58 ExternalImageSiblingImpl *createExternalImageSibling(const gl::Context *context, 59 EGLenum target, 60 EGLClientBuffer buffer, 61 const egl::AttributeMap &attribs) override; 62 63 ShareGroupImpl *createShareGroup() override; 64 65 egl::Error makeCurrent(egl::Surface *drawSurface, 66 egl::Surface *readSurface, 67 gl::Context *context) override; 68 69 egl::ConfigSet generateConfigs() override; 70 71 bool testDeviceLost() override; 72 egl::Error restoreLostDevice(const egl::Display *display) override; 73 74 bool isValidNativeWindow(EGLNativeWindowType window) const override; 75 egl::Error validateClientBuffer(const egl::Config *configuration, 76 EGLenum buftype, 77 EGLClientBuffer clientBuffer, 78 const egl::AttributeMap &attribs) const override; 79 egl::Error validateImageClientBuffer(const gl::Context *context, 80 EGLenum target, 81 EGLClientBuffer clientBuffer, 82 const egl::AttributeMap &attribs) const override; 83 84 DeviceImpl *createDevice() override; 85 86 std::string getVendorString() const override; 87 88 egl::Error waitClient(const gl::Context *context) override; 89 egl::Error waitNative(const gl::Context *context, EGLint engine) override; 90 gl::Version getMaxSupportedESVersion() const override; 91 gl::Version getMaxConformantESVersion() const override; 92 93 void handleResult(HRESULT hr, 94 const char *message, 95 const char *file, 96 const char *function, 97 unsigned int line) override; 98 getStoredErrorString()99 const std::string &getStoredErrorString() const { return mStoredErrorString; } 100 101 void populateFeatureList(angle::FeatureList *features) override; 102 103 private: 104 void generateExtensions(egl::DisplayExtensions *outExtensions) const override; 105 void generateCaps(egl::Caps *outCaps) const override; 106 107 egl::Display *mDisplay; 108 109 rx::RendererD3D *mRenderer; 110 std::string mStoredErrorString; 111 }; 112 113 } // namespace rx 114 115 #endif // LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ 116