132fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com//
232fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
332fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
432fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com// found in the LICENSE file.
532fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com//
632fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
732fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com// SwapChain11.h: Defines a back-end specific class for the D3D11 swap chain.
832fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
932fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com#ifndef LIBGLESV2_RENDERER_SWAPCHAIN11_H_
1032fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com#define LIBGLESV2_RENDERER_SWAPCHAIN11_H_
1132fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
1232fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com#include "common/angleutils.h"
1332fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com#include "libGLESv2/renderer/SwapChain.h"
1432fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
1532fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.comnamespace rx
1632fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com{
1732fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.comclass Renderer11;
1832fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
1932fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.comclass SwapChain11 : public SwapChain
2032fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com{
2132fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com  public:
2232fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    SwapChain11(Renderer11 *renderer, HWND window, HANDLE shareHandle,
2332fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com                GLenum backBufferFormat, GLenum depthBufferFormat);
2432fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    virtual ~SwapChain11();
2532fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
26c71ca75ad647335876ed6961ebf461203df4caddshannon.woods@transgaming.com    EGLint resize(EGLint backbufferWidth, EGLint backbufferHeight);
2732fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    virtual EGLint reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLint swapInterval);
2832fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    virtual EGLint swapRect(EGLint x, EGLint y, EGLint width, EGLint height);
298bce3f59f55ebbef64e2a7b0f024644afbebd5b0shannon.woods%transgaming.com@gtempaccount.com    virtual void recreate();
3032fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
315c25ed2f8aa6f1b2b906e9facbd6da21501cee70shannon.woods@transgaming.com    virtual ID3D11Texture2D *getOffscreenTexture();
3232fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    virtual ID3D11RenderTargetView *getRenderTarget();
335c25ed2f8aa6f1b2b906e9facbd6da21501cee70shannon.woods@transgaming.com    virtual ID3D11ShaderResourceView *getRenderTargetShaderResource();
345c25ed2f8aa6f1b2b906e9facbd6da21501cee70shannon.woods@transgaming.com
357e23285f51e48e8f3d75c99a1451023543fb4c66shannon.woods@transgaming.com    virtual ID3D11Texture2D *getDepthStencilTexture();
3632fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    virtual ID3D11DepthStencilView *getDepthStencil();
3788f9cbf254dbc9ee0d87c84155cbcd3b2ca4f853Geoff Lang    virtual ID3D11ShaderResourceView *getDepthStencilShaderResource();
3832fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
39b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    EGLint getWidth() const { return mWidth; }
40b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com    EGLint getHeight() const { return mHeight; }
41b6b27bc4179f0cab0c64c599d19ce2f4f2623d98daniel@transgaming.com
42d733bb88bc5544f6e55bc359e1ce26faa5d45565daniel@transgaming.com    static SwapChain11 *makeSwapChain11(SwapChain *swapChain);
43d733bb88bc5544f6e55bc359e1ce26faa5d45565daniel@transgaming.com
4432fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com  private:
4532fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(SwapChain11);
4632fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
4732fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    void release();
48211fa2edc6290101d995dac7a21de54be3e0aab3shannon.woods@transgaming.com    void initPassThroughResources();
4930f52c6c5ad8f593bbfb91b3e31bc91e505feb3ashannon.woods@transgaming.com    void releaseOffscreenTexture();
50ae81383606efb5f9b06e7e21e5ed4ac526b25248shannon.woods@transgaming.com    EGLint resetOffscreenTexture(int backbufferWidth, int backbufferHeight);
5132fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
5232fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    Renderer11 *mRenderer;
5332fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    EGLint mHeight;
5432fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    EGLint mWidth;
55c60c5215ebab426654d1670282d15652667e38dashannon.woods@transgaming.com    bool mAppCreatedShareHandle;
56ad74a4b10a90d0353ff941ad792874f1e1440374shannon.woods@transgaming.com    unsigned int mSwapInterval;
57211fa2edc6290101d995dac7a21de54be3e0aab3shannon.woods@transgaming.com    bool mPassThroughResourcesInit;
5832fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
5932fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    IDXGISwapChain *mSwapChain;
60c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com
61c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com    ID3D11Texture2D *mBackBufferTexture;
62c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com    ID3D11RenderTargetView *mBackBufferRTView;
63c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com
6432fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com    ID3D11Texture2D *mOffscreenTexture;
65c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com    ID3D11RenderTargetView *mOffscreenRTView;
665c25ed2f8aa6f1b2b906e9facbd6da21501cee70shannon.woods@transgaming.com    ID3D11ShaderResourceView *mOffscreenSRView;
67c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com
68c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com    ID3D11Texture2D *mDepthStencilTexture;
69c8c70adcb87042b8fc509025f44ebae1c2291bd5daniel@transgaming.com    ID3D11DepthStencilView *mDepthStencilDSView;
7088f9cbf254dbc9ee0d87c84155cbcd3b2ca4f853Geoff Lang    ID3D11ShaderResourceView *mDepthStencilSRView;
71e097047e2ae1400cb2e741aa50a51781fc28dce4daniel@transgaming.com
72e097047e2ae1400cb2e741aa50a51781fc28dce4daniel@transgaming.com    ID3D11Buffer *mQuadVB;
73e097047e2ae1400cb2e741aa50a51781fc28dce4daniel@transgaming.com    ID3D11SamplerState *mPassThroughSampler;
74e097047e2ae1400cb2e741aa50a51781fc28dce4daniel@transgaming.com    ID3D11InputLayout *mPassThroughIL;
75e097047e2ae1400cb2e741aa50a51781fc28dce4daniel@transgaming.com    ID3D11VertexShader *mPassThroughVS;
76e097047e2ae1400cb2e741aa50a51781fc28dce4daniel@transgaming.com    ID3D11PixelShader *mPassThroughPS;
7732fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com};
7832fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com
7932fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com}
8032fdf822840418a1bf890d1f1f0fea68b43006b0daniel@transgaming.com#endif // LIBGLESV2_RENDERER_SWAPCHAIN11_H_
81