• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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