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 // SurfaceD3D.h: D3D implementation of an EGL surface 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_SURFACED3D_H_ 10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_SURFACED3D_H_ 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/SurfaceImpl.h" 13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/d3d/NativeWindowD3D.h" 14*8975f5c5SAndroid Build Coastguard Worker 15*8975f5c5SAndroid Build Coastguard Worker namespace egl 16*8975f5c5SAndroid Build Coastguard Worker { 17*8975f5c5SAndroid Build Coastguard Worker class Surface; 18*8975f5c5SAndroid Build Coastguard Worker } 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Worker namespace rx 21*8975f5c5SAndroid Build Coastguard Worker { 22*8975f5c5SAndroid Build Coastguard Worker class DisplayD3D; 23*8975f5c5SAndroid Build Coastguard Worker class SwapChainD3D; 24*8975f5c5SAndroid Build Coastguard Worker class RendererD3D; 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker class SurfaceD3D : public SurfaceImpl 27*8975f5c5SAndroid Build Coastguard Worker { 28*8975f5c5SAndroid Build Coastguard Worker public: 29*8975f5c5SAndroid Build Coastguard Worker ~SurfaceD3D() override; 30*8975f5c5SAndroid Build Coastguard Worker void releaseSwapChain(); 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Worker egl::Error initialize(const egl::Display *display) override; 33*8975f5c5SAndroid Build Coastguard Worker 34*8975f5c5SAndroid Build Coastguard Worker egl::Error swap(const gl::Context *context) override; 35*8975f5c5SAndroid Build Coastguard Worker egl::Error postSubBuffer(const gl::Context *context, 36*8975f5c5SAndroid Build Coastguard Worker EGLint x, 37*8975f5c5SAndroid Build Coastguard Worker EGLint y, 38*8975f5c5SAndroid Build Coastguard Worker EGLint width, 39*8975f5c5SAndroid Build Coastguard Worker EGLint height) override; 40*8975f5c5SAndroid Build Coastguard Worker egl::Error querySurfacePointerANGLE(EGLint attribute, void **value) override; 41*8975f5c5SAndroid Build Coastguard Worker egl::Error bindTexImage(const gl::Context *context, 42*8975f5c5SAndroid Build Coastguard Worker gl::Texture *texture, 43*8975f5c5SAndroid Build Coastguard Worker EGLint buffer) override; 44*8975f5c5SAndroid Build Coastguard Worker egl::Error releaseTexImage(const gl::Context *context, EGLint buffer) override; 45*8975f5c5SAndroid Build Coastguard Worker egl::Error getSyncValues(EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR *sbc) override; 46*8975f5c5SAndroid Build Coastguard Worker egl::Error getMscRate(EGLint *numerator, EGLint *denominator) override; 47*8975f5c5SAndroid Build Coastguard Worker void setSwapInterval(const egl::Display *display, EGLint interval) override; 48*8975f5c5SAndroid Build Coastguard Worker void setFixedWidth(EGLint width) override; 49*8975f5c5SAndroid Build Coastguard Worker void setFixedHeight(EGLint height) override; 50*8975f5c5SAndroid Build Coastguard Worker 51*8975f5c5SAndroid Build Coastguard Worker EGLint getWidth() const override; 52*8975f5c5SAndroid Build Coastguard Worker EGLint getHeight() const override; 53*8975f5c5SAndroid Build Coastguard Worker 54*8975f5c5SAndroid Build Coastguard Worker EGLint isPostSubBufferSupported() const override; 55*8975f5c5SAndroid Build Coastguard Worker EGLint getSwapBehavior() const override; 56*8975f5c5SAndroid Build Coastguard Worker 57*8975f5c5SAndroid Build Coastguard Worker // D3D implementations 58*8975f5c5SAndroid Build Coastguard Worker SwapChainD3D *getSwapChain() const; 59*8975f5c5SAndroid Build Coastguard Worker 60*8975f5c5SAndroid Build Coastguard Worker egl::Error resetSwapChain(const egl::Display *display); 61*8975f5c5SAndroid Build Coastguard Worker 62*8975f5c5SAndroid Build Coastguard Worker egl::Error checkForOutOfDateSwapChain(DisplayD3D *displayD3D); 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Worker angle::Result getAttachmentRenderTarget(const gl::Context *context, 65*8975f5c5SAndroid Build Coastguard Worker GLenum binding, 66*8975f5c5SAndroid Build Coastguard Worker const gl::ImageIndex &imageIndex, 67*8975f5c5SAndroid Build Coastguard Worker GLsizei samples, 68*8975f5c5SAndroid Build Coastguard Worker FramebufferAttachmentRenderTarget **rtOut) override; 69*8975f5c5SAndroid Build Coastguard Worker angle::Result initializeContents(const gl::Context *context, 70*8975f5c5SAndroid Build Coastguard Worker GLenum binding, 71*8975f5c5SAndroid Build Coastguard Worker const gl::ImageIndex &imageIndex) override; 72*8975f5c5SAndroid Build Coastguard Worker 73*8975f5c5SAndroid Build Coastguard Worker const angle::Format *getD3DTextureColorFormat() const override; 74*8975f5c5SAndroid Build Coastguard Worker 75*8975f5c5SAndroid Build Coastguard Worker egl::Error attachToFramebuffer(const gl::Context *context, 76*8975f5c5SAndroid Build Coastguard Worker gl::Framebuffer *framebuffer) override; 77*8975f5c5SAndroid Build Coastguard Worker egl::Error detachFromFramebuffer(const gl::Context *context, 78*8975f5c5SAndroid Build Coastguard Worker gl::Framebuffer *framebuffer) override; 79*8975f5c5SAndroid Build Coastguard Worker 80*8975f5c5SAndroid Build Coastguard Worker protected: 81*8975f5c5SAndroid Build Coastguard Worker SurfaceD3D(const egl::SurfaceState &state, 82*8975f5c5SAndroid Build Coastguard Worker RendererD3D *renderer, 83*8975f5c5SAndroid Build Coastguard Worker egl::Display *display, 84*8975f5c5SAndroid Build Coastguard Worker EGLNativeWindowType window, 85*8975f5c5SAndroid Build Coastguard Worker EGLenum buftype, 86*8975f5c5SAndroid Build Coastguard Worker EGLClientBuffer clientBuffer, 87*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribs); 88*8975f5c5SAndroid Build Coastguard Worker 89*8975f5c5SAndroid Build Coastguard Worker egl::Error swapRect(DisplayD3D *displayD3D, EGLint x, EGLint y, EGLint width, EGLint height); 90*8975f5c5SAndroid Build Coastguard Worker egl::Error resetSwapChain(DisplayD3D *displayD3D, int backbufferWidth, int backbufferHeight); 91*8975f5c5SAndroid Build Coastguard Worker egl::Error resizeSwapChain(DisplayD3D *displayD3D, int backbufferWidth, int backbufferHeight); 92*8975f5c5SAndroid Build Coastguard Worker 93*8975f5c5SAndroid Build Coastguard Worker RendererD3D *mRenderer; 94*8975f5c5SAndroid Build Coastguard Worker egl::Display *mDisplay; 95*8975f5c5SAndroid Build Coastguard Worker 96*8975f5c5SAndroid Build Coastguard Worker bool mFixedSize; 97*8975f5c5SAndroid Build Coastguard Worker GLint mFixedWidth; 98*8975f5c5SAndroid Build Coastguard Worker GLint mFixedHeight; 99*8975f5c5SAndroid Build Coastguard Worker GLint mOrientation; 100*8975f5c5SAndroid Build Coastguard Worker 101*8975f5c5SAndroid Build Coastguard Worker GLenum mRenderTargetFormat; 102*8975f5c5SAndroid Build Coastguard Worker GLenum mDepthStencilFormat; 103*8975f5c5SAndroid Build Coastguard Worker const angle::Format *mColorFormat; 104*8975f5c5SAndroid Build Coastguard Worker 105*8975f5c5SAndroid Build Coastguard Worker SwapChainD3D *mSwapChain; 106*8975f5c5SAndroid Build Coastguard Worker bool mSwapIntervalDirty; 107*8975f5c5SAndroid Build Coastguard Worker 108*8975f5c5SAndroid Build Coastguard Worker NativeWindowD3D *mNativeWindow; // Handler for the Window that the surface is created for. 109*8975f5c5SAndroid Build Coastguard Worker EGLint mWidth; 110*8975f5c5SAndroid Build Coastguard Worker EGLint mHeight; 111*8975f5c5SAndroid Build Coastguard Worker 112*8975f5c5SAndroid Build Coastguard Worker EGLint mSwapInterval; 113*8975f5c5SAndroid Build Coastguard Worker 114*8975f5c5SAndroid Build Coastguard Worker HANDLE mShareHandle; 115*8975f5c5SAndroid Build Coastguard Worker IUnknown *mD3DTexture; 116*8975f5c5SAndroid Build Coastguard Worker 117*8975f5c5SAndroid Build Coastguard Worker EGLenum mBuftype; 118*8975f5c5SAndroid Build Coastguard Worker }; 119*8975f5c5SAndroid Build Coastguard Worker 120*8975f5c5SAndroid Build Coastguard Worker class WindowSurfaceD3D : public SurfaceD3D 121*8975f5c5SAndroid Build Coastguard Worker { 122*8975f5c5SAndroid Build Coastguard Worker public: 123*8975f5c5SAndroid Build Coastguard Worker WindowSurfaceD3D(const egl::SurfaceState &state, 124*8975f5c5SAndroid Build Coastguard Worker RendererD3D *renderer, 125*8975f5c5SAndroid Build Coastguard Worker egl::Display *display, 126*8975f5c5SAndroid Build Coastguard Worker EGLNativeWindowType window, 127*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribs); 128*8975f5c5SAndroid Build Coastguard Worker ~WindowSurfaceD3D() override; 129*8975f5c5SAndroid Build Coastguard Worker }; 130*8975f5c5SAndroid Build Coastguard Worker 131*8975f5c5SAndroid Build Coastguard Worker class PbufferSurfaceD3D : public SurfaceD3D 132*8975f5c5SAndroid Build Coastguard Worker { 133*8975f5c5SAndroid Build Coastguard Worker public: 134*8975f5c5SAndroid Build Coastguard Worker PbufferSurfaceD3D(const egl::SurfaceState &state, 135*8975f5c5SAndroid Build Coastguard Worker RendererD3D *renderer, 136*8975f5c5SAndroid Build Coastguard Worker egl::Display *display, 137*8975f5c5SAndroid Build Coastguard Worker EGLenum buftype, 138*8975f5c5SAndroid Build Coastguard Worker EGLClientBuffer clientBuffer, 139*8975f5c5SAndroid Build Coastguard Worker const egl::AttributeMap &attribs); 140*8975f5c5SAndroid Build Coastguard Worker ~PbufferSurfaceD3D() override; 141*8975f5c5SAndroid Build Coastguard Worker }; 142*8975f5c5SAndroid Build Coastguard Worker 143*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 144*8975f5c5SAndroid Build Coastguard Worker 145*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_D3D_SURFACED3D_H_ 146