// // Copyright (c) 2017 The Khronos Group Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef __WRAPPERS_H #define __WRAPPERS_H #if defined(_WIN32) #include #if defined (__MINGW32__) #include typedef unsigned char UINT8; #define __out #define __in #define __inout #define __out_bcount(size) #define __out_bcount_opt(size) #define __in_opt #define __in_ecount(size) #define __in_ecount_opt(size) #define __out_opt #define __out_ecount(size) #define __out_ecount_opt(size) #define __in_bcount_opt(size) #define __inout_opt #define __inout_bcount(size) #define __in_bcount(size) #define __deref_out #endif #include #include #endif enum TDeviceStatus { DEVICE_NOTSUPPORTED, DEVICE_PASS, DEVICE_FAIL, }; class CDeviceWrapper { public: enum TAccelerationType { ACCELERATION_HW, ACCELERATION_SW, }; CDeviceWrapper(); virtual ~CDeviceWrapper(); virtual bool AdapterNext() = 0; virtual unsigned int AdapterIdx() const = 0; virtual void *Device() const = 0; virtual TDeviceStatus Status() const = 0; virtual void *D3D() const = 0; #if defined(_WIN32) HWND WindowHandle() const; #endif int WindowWidth() const; int WindowHeight() const; void WindowInit(); static TAccelerationType AccelerationType(); static void AccelerationType(TAccelerationType accelerationTypeNew); private: static LPCTSTR WINDOW_TITLE; static const int WINDOW_WIDTH; static const int WINDOW_HEIGHT; static TAccelerationType accelerationType; #if defined(_WIN32) HMODULE _hInstance; HWND _hWnd; #endif void WindowDestroy(); }; class CSurfaceWrapper { public: CSurfaceWrapper(); virtual ~CSurfaceWrapper(); }; #if defined(_WIN32) //windows specific wrappers class CD3D9Wrapper: public CDeviceWrapper { public: CD3D9Wrapper(); ~CD3D9Wrapper(); virtual bool AdapterNext(); virtual unsigned int AdapterIdx() const; virtual void *Device() const; virtual TDeviceStatus Status() const; virtual void *D3D() const; private: LPDIRECT3D9 _d3d9; LPDIRECT3DDEVICE9 _d3dDevice; D3DDISPLAYMODE _d3ddm; D3DADAPTER_IDENTIFIER9 _adapter; TDeviceStatus _status; unsigned int _adapterIdx; bool _adapterFound; D3DFORMAT Format(); D3DADAPTER_IDENTIFIER9 Adapter(); int Init(); void Destroy(); }; class CD3D9ExWrapper: public CDeviceWrapper { public: CD3D9ExWrapper(); ~CD3D9ExWrapper(); virtual bool AdapterNext(); virtual unsigned int AdapterIdx() const; virtual void *Device() const; virtual TDeviceStatus Status() const; virtual void *D3D() const; private: LPDIRECT3D9EX _d3d9Ex; LPDIRECT3DDEVICE9EX _d3dDeviceEx; D3DDISPLAYMODEEX _d3ddmEx; D3DADAPTER_IDENTIFIER9 _adapter; TDeviceStatus _status; unsigned int _adapterIdx; bool _adapterFound; D3DFORMAT Format(); D3DADAPTER_IDENTIFIER9 Adapter(); int Init(); void Destroy(); }; class CDXVAWrapper: public CDeviceWrapper { public: CDXVAWrapper(); ~CDXVAWrapper(); virtual bool AdapterNext(); virtual unsigned int AdapterIdx() const; virtual void *Device() const; virtual TDeviceStatus Status() const; virtual void *D3D() const; const CD3D9ExWrapper &D3D9() const; private: CD3D9ExWrapper _d3d9; IDXVAHD_Device *_dxvaDevice; TDeviceStatus _status; bool _adapterFound; static const D3DFORMAT RENDER_TARGET_FORMAT; static const D3DFORMAT VIDEO_FORMAT; static const unsigned int VIDEO_FPS; TDeviceStatus DXVAHDInit(); void DXVAHDDestroy(); }; class CD3D9SurfaceWrapper: public CSurfaceWrapper { public: CD3D9SurfaceWrapper(); CD3D9SurfaceWrapper( IDirect3DSurface9* mem ); ~CD3D9SurfaceWrapper(); operator IDirect3DSurface9*() { return mMem; } IDirect3DSurface9* * operator&() { return &mMem; } IDirect3DSurface9* operator->() const { return mMem; } private: IDirect3DSurface9* mMem; }; #endif #endif // __D3D_WRAPPERS