tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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_