1d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens// 3d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Licensed under the Apache License, Version 2.0 (the "License"); 4d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// you may not use this file except in compliance with the License. 5d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// You may obtain a copy of the License at 6ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens// 7d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// http://www.apache.org/licenses/LICENSE-2.0 8ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens// 9d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Unless required by applicable law or agreed to in writing, software 10d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// distributed under the License is distributed on an "AS IS" BASIS, 11d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// See the License for the specific language governing permissions and 13d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// limitations under the License. 14ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 15ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens#ifndef D3D9_Direct3DSwapChain9_hpp 16ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens#define D3D9_Direct3DSwapChain9_hpp 17ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 18ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens#include "Unknown.hpp" 19ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 20ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens#include "Direct3DSurface9.hpp" 21ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 2266839438a7ed306493ed2b8721d197cd3663c67aNicolas Capens#include "FrameBufferWin.hpp" 23ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 24ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens#include <d3d9.h> 25ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 26ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capensnamespace D3D9 27ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens{ 28ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens class Direct3DDevice9; 29ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 30ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens class Direct3DSwapChain9 : public IDirect3DSwapChain9, public Unknown 31ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens { 32ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens public: 33ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens Direct3DSwapChain9(Direct3DDevice9 *device, D3DPRESENT_PARAMETERS *presentParameters); 34ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 35ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens virtual ~Direct3DSwapChain9(); 36ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 37ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens // IUnknown methods 38ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall QueryInterface(const IID &iid, void **object); 39ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens unsigned long __stdcall AddRef(); 40ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens unsigned long __stdcall Release(); 41ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 42ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens // IDirect3DSwapChain9 methods 43ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall Present(const RECT *sourceRect, const RECT *destRect, HWND destWindowOverride, const RGNDATA *dirtyRegion, unsigned long flags); 44ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall GetFrontBufferData(IDirect3DSurface9 *destSurface); 45ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall GetBackBuffer(unsigned int index, D3DBACKBUFFER_TYPE type, IDirect3DSurface9 **backBuffer); 46ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall GetRasterStatus(D3DRASTER_STATUS *rasterStatus); 47ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall GetDisplayMode(D3DDISPLAYMODE *displayMode); 48ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall GetDevice(IDirect3DDevice9 **device); 49ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens long __stdcall GetPresentParameters(D3DPRESENT_PARAMETERS *presentParameters); 50ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 51ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens // Internal methods 52ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens void reset(D3DPRESENT_PARAMETERS *presentParameters); 53ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 54ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens void setGammaRamp(sw::GammaRamp *gammaRamp, bool calibrate); 55ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens void getGammaRamp(sw::GammaRamp *gammaRamp); 56ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 57ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens void *lockBackBuffer(int index); 58ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens void unlockBackBuffer(int index); 59ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 60ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens private: 61ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens void release(); 62ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 63ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens // Creation parameters 64ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens Direct3DDevice9 *const device; 65ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens D3DPRESENT_PARAMETERS presentParameters; 66ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 67ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens bool lockable; 68ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 6966839438a7ed306493ed2b8721d197cd3663c67aNicolas Capens sw::FrameBufferWin *frameBuffer; 70ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 71ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens public: // FIXME 72ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens Direct3DSurface9 *backBuffer[3]; 73ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens }; 74ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens} 75ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens 76ee16f0de07d4b02a81c1c9ac716d631e67f487fcNicolas Capens#endif // D3D9_Direct3DSwapChain9_hpp 77