xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/DisplayD3D.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker // DisplayD3D.h: D3D implementation of egl::Display
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Device.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/DisplayImpl.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/ShareGroupImpl.h"
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/d3d/RendererD3D.h"
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker namespace rx
19*8975f5c5SAndroid Build Coastguard Worker {
20*8975f5c5SAndroid Build Coastguard Worker class ShareGroupD3D : public ShareGroupImpl
21*8975f5c5SAndroid Build Coastguard Worker {
22*8975f5c5SAndroid Build Coastguard Worker   public:
ShareGroupD3D(const egl::ShareGroupState & state)23*8975f5c5SAndroid Build Coastguard Worker     ShareGroupD3D(const egl::ShareGroupState &state) : ShareGroupImpl(state) {}
24*8975f5c5SAndroid Build Coastguard Worker };
25*8975f5c5SAndroid Build Coastguard Worker 
26*8975f5c5SAndroid Build Coastguard Worker class DisplayD3D : public DisplayImpl, public d3d::Context
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker   public:
29*8975f5c5SAndroid Build Coastguard Worker     DisplayD3D(const egl::DisplayState &state);
30*8975f5c5SAndroid Build Coastguard Worker 
31*8975f5c5SAndroid Build Coastguard Worker     egl::Error initialize(egl::Display *display) override;
32*8975f5c5SAndroid Build Coastguard Worker     void terminate() override;
33*8975f5c5SAndroid Build Coastguard Worker 
34*8975f5c5SAndroid Build Coastguard Worker     // Surface creation
35*8975f5c5SAndroid Build Coastguard Worker     SurfaceImpl *createWindowSurface(const egl::SurfaceState &state,
36*8975f5c5SAndroid Build Coastguard Worker                                      EGLNativeWindowType window,
37*8975f5c5SAndroid Build Coastguard Worker                                      const egl::AttributeMap &attribs) override;
38*8975f5c5SAndroid Build Coastguard Worker     SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state,
39*8975f5c5SAndroid Build Coastguard Worker                                       const egl::AttributeMap &attribs) override;
40*8975f5c5SAndroid Build Coastguard Worker     SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
41*8975f5c5SAndroid Build Coastguard Worker                                                EGLenum buftype,
42*8975f5c5SAndroid Build Coastguard Worker                                                EGLClientBuffer clientBuffer,
43*8975f5c5SAndroid Build Coastguard Worker                                                const egl::AttributeMap &attribs) override;
44*8975f5c5SAndroid Build Coastguard Worker     SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state,
45*8975f5c5SAndroid Build Coastguard Worker                                      NativePixmapType nativePixmap,
46*8975f5c5SAndroid Build Coastguard Worker                                      const egl::AttributeMap &attribs) override;
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker     ImageImpl *createImage(const egl::ImageState &state,
49*8975f5c5SAndroid Build Coastguard Worker                            const gl::Context *context,
50*8975f5c5SAndroid Build Coastguard Worker                            EGLenum target,
51*8975f5c5SAndroid Build Coastguard Worker                            const egl::AttributeMap &attribs) override;
52*8975f5c5SAndroid Build Coastguard Worker 
53*8975f5c5SAndroid Build Coastguard Worker     ContextImpl *createContext(const gl::State &state,
54*8975f5c5SAndroid Build Coastguard Worker                                gl::ErrorSet *errorSet,
55*8975f5c5SAndroid Build Coastguard Worker                                const egl::Config *configuration,
56*8975f5c5SAndroid Build Coastguard Worker                                const gl::Context *shareContext,
57*8975f5c5SAndroid Build Coastguard Worker                                const egl::AttributeMap &attribs) override;
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker     StreamProducerImpl *createStreamProducerD3DTexture(egl::Stream::ConsumerType consumerType,
60*8975f5c5SAndroid Build Coastguard Worker                                                        const egl::AttributeMap &attribs) override;
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     ExternalImageSiblingImpl *createExternalImageSibling(const gl::Context *context,
63*8975f5c5SAndroid Build Coastguard Worker                                                          EGLenum target,
64*8975f5c5SAndroid Build Coastguard Worker                                                          EGLClientBuffer buffer,
65*8975f5c5SAndroid Build Coastguard Worker                                                          const egl::AttributeMap &attribs) override;
66*8975f5c5SAndroid Build Coastguard Worker 
67*8975f5c5SAndroid Build Coastguard Worker     ShareGroupImpl *createShareGroup(const egl::ShareGroupState &state) override;
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker     egl::Error makeCurrent(egl::Display *display,
70*8975f5c5SAndroid Build Coastguard Worker                            egl::Surface *drawSurface,
71*8975f5c5SAndroid Build Coastguard Worker                            egl::Surface *readSurface,
72*8975f5c5SAndroid Build Coastguard Worker                            gl::Context *context) override;
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker     egl::ConfigSet generateConfigs() override;
75*8975f5c5SAndroid Build Coastguard Worker 
76*8975f5c5SAndroid Build Coastguard Worker     bool testDeviceLost() override;
77*8975f5c5SAndroid Build Coastguard Worker     egl::Error restoreLostDevice(const egl::Display *display) override;
78*8975f5c5SAndroid Build Coastguard Worker 
79*8975f5c5SAndroid Build Coastguard Worker     bool isValidNativeWindow(EGLNativeWindowType window) const override;
80*8975f5c5SAndroid Build Coastguard Worker     egl::Error validateClientBuffer(const egl::Config *configuration,
81*8975f5c5SAndroid Build Coastguard Worker                                     EGLenum buftype,
82*8975f5c5SAndroid Build Coastguard Worker                                     EGLClientBuffer clientBuffer,
83*8975f5c5SAndroid Build Coastguard Worker                                     const egl::AttributeMap &attribs) const override;
84*8975f5c5SAndroid Build Coastguard Worker     egl::Error validateImageClientBuffer(const gl::Context *context,
85*8975f5c5SAndroid Build Coastguard Worker                                          EGLenum target,
86*8975f5c5SAndroid Build Coastguard Worker                                          EGLClientBuffer clientBuffer,
87*8975f5c5SAndroid Build Coastguard Worker                                          const egl::AttributeMap &attribs) const override;
88*8975f5c5SAndroid Build Coastguard Worker 
89*8975f5c5SAndroid Build Coastguard Worker     DeviceImpl *createDevice() override;
90*8975f5c5SAndroid Build Coastguard Worker 
91*8975f5c5SAndroid Build Coastguard Worker     std::string getRendererDescription() override;
92*8975f5c5SAndroid Build Coastguard Worker     std::string getVendorString() override;
93*8975f5c5SAndroid Build Coastguard Worker     std::string getVersionString(bool includeFullVersion) override;
94*8975f5c5SAndroid Build Coastguard Worker 
95*8975f5c5SAndroid Build Coastguard Worker     egl::Error waitClient(const gl::Context *context) override;
96*8975f5c5SAndroid Build Coastguard Worker     egl::Error waitNative(const gl::Context *context, EGLint engine) override;
97*8975f5c5SAndroid Build Coastguard Worker     gl::Version getMaxSupportedESVersion() const override;
98*8975f5c5SAndroid Build Coastguard Worker     gl::Version getMaxConformantESVersion() const override;
99*8975f5c5SAndroid Build Coastguard Worker 
100*8975f5c5SAndroid Build Coastguard Worker     void handleResult(HRESULT hr,
101*8975f5c5SAndroid Build Coastguard Worker                       const char *message,
102*8975f5c5SAndroid Build Coastguard Worker                       const char *file,
103*8975f5c5SAndroid Build Coastguard Worker                       const char *function,
104*8975f5c5SAndroid Build Coastguard Worker                       unsigned int line) override;
105*8975f5c5SAndroid Build Coastguard Worker 
getStoredErrorString()106*8975f5c5SAndroid Build Coastguard Worker     const std::string &getStoredErrorString() const { return mStoredErrorString; }
107*8975f5c5SAndroid Build Coastguard Worker 
108*8975f5c5SAndroid Build Coastguard Worker     void initializeFrontendFeatures(angle::FrontendFeatures *features) const override;
109*8975f5c5SAndroid Build Coastguard Worker 
110*8975f5c5SAndroid Build Coastguard Worker     void populateFeatureList(angle::FeatureList *features) override;
111*8975f5c5SAndroid Build Coastguard Worker 
112*8975f5c5SAndroid Build Coastguard Worker   private:
113*8975f5c5SAndroid Build Coastguard Worker     void generateExtensions(egl::DisplayExtensions *outExtensions) const override;
114*8975f5c5SAndroid Build Coastguard Worker     void generateCaps(egl::Caps *outCaps) const override;
115*8975f5c5SAndroid Build Coastguard Worker 
116*8975f5c5SAndroid Build Coastguard Worker     egl::Display *mDisplay;
117*8975f5c5SAndroid Build Coastguard Worker 
118*8975f5c5SAndroid Build Coastguard Worker     rx::RendererD3D *mRenderer;
119*8975f5c5SAndroid Build Coastguard Worker     std::string mStoredErrorString;
120*8975f5c5SAndroid Build Coastguard Worker };
121*8975f5c5SAndroid Build Coastguard Worker 
122*8975f5c5SAndroid Build Coastguard Worker // Possible reasons RendererD3D initialize can fail
123*8975f5c5SAndroid Build Coastguard Worker enum D3D11InitError
124*8975f5c5SAndroid Build Coastguard Worker {
125*8975f5c5SAndroid Build Coastguard Worker     // The renderer loaded successfully
126*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_SUCCESS = 0,
127*8975f5c5SAndroid Build Coastguard Worker     // Failed to load the ANGLE & D3D compiler libraries
128*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_COMPILER_ERROR,
129*8975f5c5SAndroid Build Coastguard Worker     // Failed to load a necessary DLL (non-compiler)
130*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_MISSING_DEP,
131*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned E_INVALIDARG
132*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_INVALIDARG,
133*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice failed with an error other than invalid arg
134*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_ERROR,
135*8975f5c5SAndroid Build Coastguard Worker     // DXGI 1.2 required but not found
136*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_INCOMPATIBLE_DXGI,
137*8975f5c5SAndroid Build Coastguard Worker     // Other initialization error
138*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_OTHER_ERROR,
139*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned E_FAIL
140*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_FAIL,
141*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned E_NOTIMPL
142*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_NOTIMPL,
143*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned E_OUTOFMEMORY
144*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_OUTOFMEMORY,
145*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned DXGI_ERROR_INVALID_CALL
146*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_INVALIDCALL,
147*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING
148*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_COMPONENTMISSING,
149*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING
150*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_WASSTILLDRAWING,
151*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
152*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_NOTAVAILABLE,
153*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned DXGI_ERROR_DEVICE_HUNG
154*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_DEVICEHUNG,
155*8975f5c5SAndroid Build Coastguard Worker     // CreateDevice returned NULL
156*8975f5c5SAndroid Build Coastguard Worker     D3D11_INIT_CREATEDEVICE_NULL,
157*8975f5c5SAndroid Build Coastguard Worker     NUM_D3D11_INIT_ERRORS
158*8975f5c5SAndroid Build Coastguard Worker };
159*8975f5c5SAndroid Build Coastguard Worker 
160*8975f5c5SAndroid Build Coastguard Worker enum D3D9InitError
161*8975f5c5SAndroid Build Coastguard Worker {
162*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_SUCCESS = 0,
163*8975f5c5SAndroid Build Coastguard Worker     // Failed to load the D3D or ANGLE compiler
164*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_COMPILER_ERROR,
165*8975f5c5SAndroid Build Coastguard Worker     // Failed to load a necessary DLL
166*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_MISSING_DEP,
167*8975f5c5SAndroid Build Coastguard Worker     // Device creation error
168*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_CREATE_DEVICE_ERROR,
169*8975f5c5SAndroid Build Coastguard Worker     // System does not meet minimum shader spec
170*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_UNSUPPORTED_VERSION,
171*8975f5c5SAndroid Build Coastguard Worker     // System does not support stretchrect from textures
172*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_UNSUPPORTED_STRETCHRECT,
173*8975f5c5SAndroid Build Coastguard Worker     // A call returned out of memory or device lost
174*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_OUT_OF_MEMORY,
175*8975f5c5SAndroid Build Coastguard Worker     // Other unspecified error
176*8975f5c5SAndroid Build Coastguard Worker     D3D9_INIT_OTHER_ERROR,
177*8975f5c5SAndroid Build Coastguard Worker     NUM_D3D9_INIT_ERRORS
178*8975f5c5SAndroid Build Coastguard Worker };
179*8975f5c5SAndroid Build Coastguard Worker 
180*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
181*8975f5c5SAndroid Build Coastguard Worker 
182*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_
183