DisplayD3D.h (7155B)
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::Display *display, 66 egl::Surface *drawSurface, 67 egl::Surface *readSurface, 68 gl::Context *context) override; 69 70 egl::ConfigSet generateConfigs() override; 71 72 bool testDeviceLost() override; 73 egl::Error restoreLostDevice(const egl::Display *display) override; 74 75 bool isValidNativeWindow(EGLNativeWindowType window) const override; 76 egl::Error validateClientBuffer(const egl::Config *configuration, 77 EGLenum buftype, 78 EGLClientBuffer clientBuffer, 79 const egl::AttributeMap &attribs) const override; 80 egl::Error validateImageClientBuffer(const gl::Context *context, 81 EGLenum target, 82 EGLClientBuffer clientBuffer, 83 const egl::AttributeMap &attribs) const override; 84 85 DeviceImpl *createDevice() override; 86 87 std::string getRendererDescription() override; 88 std::string getVendorString() override; 89 std::string getVersionString(bool includeFullVersion) override; 90 91 egl::Error waitClient(const gl::Context *context) override; 92 egl::Error waitNative(const gl::Context *context, EGLint engine) override; 93 gl::Version getMaxSupportedESVersion() const override; 94 gl::Version getMaxConformantESVersion() const override; 95 Optional<gl::Version> getMaxSupportedDesktopVersion() const override; 96 97 void handleResult(HRESULT hr, 98 const char *message, 99 const char *file, 100 const char *function, 101 unsigned int line) override; 102 103 const std::string &getStoredErrorString() const { return mStoredErrorString; } 104 105 void initializeFrontendFeatures(angle::FrontendFeatures *features) const override; 106 107 void populateFeatureList(angle::FeatureList *features) override; 108 109 private: 110 void generateExtensions(egl::DisplayExtensions *outExtensions) const override; 111 void generateCaps(egl::Caps *outCaps) const override; 112 113 egl::Display *mDisplay; 114 115 rx::RendererD3D *mRenderer; 116 std::string mStoredErrorString; 117 }; 118 119 // Possible reasons RendererD3D initialize can fail 120 enum D3D11InitError 121 { 122 // The renderer loaded successfully 123 D3D11_INIT_SUCCESS = 0, 124 // Failed to load the ANGLE & D3D compiler libraries 125 D3D11_INIT_COMPILER_ERROR, 126 // Failed to load a necessary DLL (non-compiler) 127 D3D11_INIT_MISSING_DEP, 128 // CreateDevice returned E_INVALIDARG 129 D3D11_INIT_CREATEDEVICE_INVALIDARG, 130 // CreateDevice failed with an error other than invalid arg 131 D3D11_INIT_CREATEDEVICE_ERROR, 132 // DXGI 1.2 required but not found 133 D3D11_INIT_INCOMPATIBLE_DXGI, 134 // Other initialization error 135 D3D11_INIT_OTHER_ERROR, 136 // CreateDevice returned E_FAIL 137 D3D11_INIT_CREATEDEVICE_FAIL, 138 // CreateDevice returned E_NOTIMPL 139 D3D11_INIT_CREATEDEVICE_NOTIMPL, 140 // CreateDevice returned E_OUTOFMEMORY 141 D3D11_INIT_CREATEDEVICE_OUTOFMEMORY, 142 // CreateDevice returned DXGI_ERROR_INVALID_CALL 143 D3D11_INIT_CREATEDEVICE_INVALIDCALL, 144 // CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING 145 D3D11_INIT_CREATEDEVICE_COMPONENTMISSING, 146 // CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING 147 D3D11_INIT_CREATEDEVICE_WASSTILLDRAWING, 148 // CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE 149 D3D11_INIT_CREATEDEVICE_NOTAVAILABLE, 150 // CreateDevice returned DXGI_ERROR_DEVICE_HUNG 151 D3D11_INIT_CREATEDEVICE_DEVICEHUNG, 152 // CreateDevice returned NULL 153 D3D11_INIT_CREATEDEVICE_NULL, 154 NUM_D3D11_INIT_ERRORS 155 }; 156 157 enum D3D9InitError 158 { 159 D3D9_INIT_SUCCESS = 0, 160 // Failed to load the D3D or ANGLE compiler 161 D3D9_INIT_COMPILER_ERROR, 162 // Failed to load a necessary DLL 163 D3D9_INIT_MISSING_DEP, 164 // Device creation error 165 D3D9_INIT_CREATE_DEVICE_ERROR, 166 // System does not meet minimum shader spec 167 D3D9_INIT_UNSUPPORTED_VERSION, 168 // System does not support stretchrect from textures 169 D3D9_INIT_UNSUPPORTED_STRETCHRECT, 170 // A call returned out of memory or device lost 171 D3D9_INIT_OUT_OF_MEMORY, 172 // Other unspecified error 173 D3D9_INIT_OTHER_ERROR, 174 NUM_D3D9_INIT_ERRORS 175 }; 176 177 } // namespace rx 178 179 #endif // LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_