1b8e80941Smrg/* 2b8e80941Smrg * Copyright 2011 Joakim Sindholt <opensource@zhasha.com> 3b8e80941Smrg * 4b8e80941Smrg * Permission is hereby granted, free of charge, to any person obtaining a 5b8e80941Smrg * copy of this software and associated documentation files (the "Software"), 6b8e80941Smrg * to deal in the Software without restriction, including without limitation 7b8e80941Smrg * on the rights to use, copy, modify, merge, publish, distribute, sub 8b8e80941Smrg * license, and/or sell copies of the Software, and to permit persons to whom 9b8e80941Smrg * the Software is furnished to do so, subject to the following conditions: 10b8e80941Smrg * 11b8e80941Smrg * The above copyright notice and this permission notice (including the next 12b8e80941Smrg * paragraph) shall be included in all copies or substantial portions of the 13b8e80941Smrg * Software. 14b8e80941Smrg * 15b8e80941Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16b8e80941Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17b8e80941Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18b8e80941Smrg * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 19b8e80941Smrg * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20b8e80941Smrg * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 21b8e80941Smrg * USE OR OTHER DEALINGS IN THE SOFTWARE. */ 22b8e80941Smrg 23b8e80941Smrg#ifndef _NINE_DEVICE9_H_ 24b8e80941Smrg#define _NINE_DEVICE9_H_ 25b8e80941Smrg 26b8e80941Smrg#include "d3dadapter/d3dadapter9.h" 27b8e80941Smrg 28b8e80941Smrg#include "iunknown.h" 29b8e80941Smrg#include "adapter9.h" 30b8e80941Smrg 31b8e80941Smrg#include "nine_helpers.h" 32b8e80941Smrg#include "nine_state.h" 33b8e80941Smrg 34b8e80941Smrgstruct gen_mipmap_state; 35b8e80941Smrgstruct util_hash_table; 36b8e80941Smrgstruct pipe_screen; 37b8e80941Smrgstruct pipe_context; 38b8e80941Smrgstruct cso_context; 39b8e80941Smrgstruct hud_context; 40b8e80941Smrgstruct u_upload_mgr; 41b8e80941Smrgstruct csmt_context; 42b8e80941Smrg 43b8e80941Smrgstruct NineSwapChain9; 44b8e80941Smrgstruct NineStateBlock9; 45b8e80941Smrg 46b8e80941Smrg#include "util/list.h" 47b8e80941Smrg 48b8e80941Smrgstruct NineDevice9 49b8e80941Smrg{ 50b8e80941Smrg struct NineUnknown base; 51b8e80941Smrg boolean ex; 52b8e80941Smrg boolean may_swvp; 53b8e80941Smrg 54b8e80941Smrg /* G3D context */ 55b8e80941Smrg struct pipe_screen *screen; 56b8e80941Smrg /* For first time upload. No Sync with rendering thread */ 57b8e80941Smrg struct pipe_context *pipe_secondary; 58b8e80941Smrg struct pipe_screen *screen_sw; 59b8e80941Smrg struct pipe_context *pipe_sw; 60b8e80941Smrg struct cso_context *cso_sw; 61b8e80941Smrg 62b8e80941Smrg /* CSMT context */ 63b8e80941Smrg struct csmt_context *csmt_ctx; 64b8e80941Smrg BOOL csmt_active; 65b8e80941Smrg 66b8e80941Smrg /* For DISCARD/NOOVERWRITE */ 67b8e80941Smrg struct nine_buffer_upload *buffer_upload; 68b8e80941Smrg 69b8e80941Smrg /* creation parameters */ 70b8e80941Smrg D3DCAPS9 caps; 71b8e80941Smrg D3DDEVICE_CREATION_PARAMETERS params; 72b8e80941Smrg IDirect3D9 *d3d9; 73b8e80941Smrg 74b8e80941Smrg /* swapchain stuff */ 75b8e80941Smrg ID3DPresentGroup *present; 76b8e80941Smrg struct NineSwapChain9 **swapchains; 77b8e80941Smrg unsigned nswapchains; 78b8e80941Smrg 79b8e80941Smrg struct NineStateBlock9 *record; 80b8e80941Smrg struct nine_state *update; /* state to update (&state / &record->state) */ 81b8e80941Smrg struct nine_state state; /* device state */ 82b8e80941Smrg struct nine_context context; 83b8e80941Smrg struct nine_state_sw_internal state_sw_internal; 84b8e80941Smrg 85b8e80941Smrg struct list_head update_buffers; 86b8e80941Smrg struct list_head update_textures; 87b8e80941Smrg struct list_head managed_buffers; 88b8e80941Smrg struct list_head managed_textures; 89b8e80941Smrg 90b8e80941Smrg boolean is_recording; 91b8e80941Smrg boolean in_scene; 92b8e80941Smrg 93b8e80941Smrg uint16_t vs_const_size; 94b8e80941Smrg uint16_t ps_const_size; 95b8e80941Smrg uint16_t max_vs_const_f; 96b8e80941Smrg uint16_t max_ps_const_f; 97b8e80941Smrg 98b8e80941Smrg struct pipe_resource *dummy_texture; 99b8e80941Smrg struct pipe_sampler_view *dummy_sampler_view; 100b8e80941Smrg struct pipe_sampler_state dummy_sampler_state; 101b8e80941Smrg 102b8e80941Smrg struct gen_mipmap_state *gen_mipmap; 103b8e80941Smrg 104b8e80941Smrg struct { 105b8e80941Smrg struct util_hash_table *ht_vs; 106b8e80941Smrg struct util_hash_table *ht_ps; 107b8e80941Smrg struct NineVertexShader9 *vs; 108b8e80941Smrg struct NinePixelShader9 *ps; 109b8e80941Smrg unsigned num_vs; 110b8e80941Smrg unsigned num_ps; 111b8e80941Smrg float *vs_const; 112b8e80941Smrg float *ps_const; 113b8e80941Smrg 114b8e80941Smrg struct util_hash_table *ht_fvf; 115b8e80941Smrg } ff; 116b8e80941Smrg 117b8e80941Smrg struct { 118b8e80941Smrg struct pipe_resource *image; 119b8e80941Smrg unsigned w; 120b8e80941Smrg unsigned h; 121b8e80941Smrg POINT hotspot; /* -1, -1 if no cursor image set */ 122b8e80941Smrg POINT pos; 123b8e80941Smrg BOOL visible; 124b8e80941Smrg boolean software; 125b8e80941Smrg void *hw_upload_temp; 126b8e80941Smrg } cursor; 127b8e80941Smrg 128b8e80941Smrg struct { 129b8e80941Smrg boolean user_vbufs; 130b8e80941Smrg boolean user_sw_vbufs; 131b8e80941Smrg boolean window_space_position_support; 132b8e80941Smrg boolean vs_integer; 133b8e80941Smrg boolean ps_integer; 134b8e80941Smrg boolean offset_units_unscaled; 135b8e80941Smrg } driver_caps; 136b8e80941Smrg 137b8e80941Smrg struct { 138b8e80941Smrg boolean buggy_barycentrics; 139b8e80941Smrg } driver_bugs; 140b8e80941Smrg 141b8e80941Smrg struct { 142b8e80941Smrg boolean dynamic_texture_workaround; 143b8e80941Smrg } workarounds; 144b8e80941Smrg 145b8e80941Smrg struct u_upload_mgr *vertex_uploader; 146b8e80941Smrg 147b8e80941Smrg struct nine_range_pool range_pool; 148b8e80941Smrg 149b8e80941Smrg struct hud_context *hud; /* NULL if hud is disabled */ 150b8e80941Smrg 151b8e80941Smrg /* dummy vbo (containing 0 0 0 0) to bind if vertex shader input 152b8e80941Smrg * is not bound to anything by the vertex declaration */ 153b8e80941Smrg struct pipe_resource *dummy_vbo; 154b8e80941Smrg BOOL device_needs_reset; 155b8e80941Smrg int minor_version_num; 156b8e80941Smrg long long available_texture_mem; 157b8e80941Smrg long long available_texture_limit; 158b8e80941Smrg 159b8e80941Smrg /* software vertex processing */ 160b8e80941Smrg boolean swvp; 161b8e80941Smrg}; 162b8e80941Smrgstatic inline struct NineDevice9 * 163b8e80941SmrgNineDevice9( void *data ) 164b8e80941Smrg{ 165b8e80941Smrg return (struct NineDevice9 *)data; 166b8e80941Smrg} 167b8e80941Smrg 168b8e80941SmrgHRESULT 169b8e80941SmrgNineDevice9_new( struct pipe_screen *pScreen, 170b8e80941Smrg D3DDEVICE_CREATION_PARAMETERS *pCreationParameters, 171b8e80941Smrg D3DCAPS9 *pCaps, 172b8e80941Smrg D3DPRESENT_PARAMETERS *pPresentationParameters, 173b8e80941Smrg IDirect3D9 *pD3D9, 174b8e80941Smrg ID3DPresentGroup *pPresentationGroup, 175b8e80941Smrg struct d3dadapter9_context *pCTX, 176b8e80941Smrg boolean ex, 177b8e80941Smrg D3DDISPLAYMODEEX *pFullscreenDisplayMode, 178b8e80941Smrg struct NineDevice9 **ppOut, 179b8e80941Smrg int minorVersionNum ); 180b8e80941Smrg 181b8e80941SmrgHRESULT 182b8e80941SmrgNineDevice9_ctor( struct NineDevice9 *This, 183b8e80941Smrg struct NineUnknownParams *pParams, 184b8e80941Smrg struct pipe_screen *pScreen, 185b8e80941Smrg D3DDEVICE_CREATION_PARAMETERS *pCreationParameters, 186b8e80941Smrg D3DCAPS9 *pCaps, 187b8e80941Smrg D3DPRESENT_PARAMETERS *pPresentationParameters, 188b8e80941Smrg IDirect3D9 *pD3D9, 189b8e80941Smrg ID3DPresentGroup *pPresentationGroup, 190b8e80941Smrg struct d3dadapter9_context *pCTX, 191b8e80941Smrg boolean ex, 192b8e80941Smrg D3DDISPLAYMODEEX *pFullscreenDisplayMode, 193b8e80941Smrg int minorVersionNum ); 194b8e80941Smrg 195b8e80941Smrgvoid 196b8e80941SmrgNineDevice9_dtor( struct NineDevice9 *This ); 197b8e80941Smrg 198b8e80941Smrg/*** Nine private ***/ 199b8e80941Smrgvoid 200b8e80941SmrgNineDevice9_SetDefaultState( struct NineDevice9 *This, boolean is_reset ); 201b8e80941Smrg 202b8e80941Smrgstruct pipe_screen * 203b8e80941SmrgNineDevice9_GetScreen( struct NineDevice9 *This ); 204b8e80941Smrg 205b8e80941Smrgstruct pipe_context * 206b8e80941SmrgNineDevice9_GetPipe( struct NineDevice9 *This ); 207b8e80941Smrg 208b8e80941Smrgconst D3DCAPS9 * 209b8e80941SmrgNineDevice9_GetCaps( struct NineDevice9 *This ); 210b8e80941Smrg 211b8e80941Smrg/*** Direct3D public ***/ 212b8e80941Smrg 213b8e80941SmrgHRESULT NINE_WINAPI 214b8e80941SmrgNineDevice9_TestCooperativeLevel( struct NineDevice9 *This ); 215b8e80941Smrg 216b8e80941SmrgUINT NINE_WINAPI 217b8e80941SmrgNineDevice9_GetAvailableTextureMem( struct NineDevice9 *This ); 218b8e80941Smrg 219b8e80941SmrgHRESULT NINE_WINAPI 220b8e80941SmrgNineDevice9_EvictManagedResources( struct NineDevice9 *This ); 221b8e80941Smrg 222b8e80941SmrgHRESULT NINE_WINAPI 223b8e80941SmrgNineDevice9_GetDirect3D( struct NineDevice9 *This, 224b8e80941Smrg IDirect3D9 **ppD3D9 ); 225b8e80941Smrg 226b8e80941SmrgHRESULT NINE_WINAPI 227b8e80941SmrgNineDevice9_GetDeviceCaps( struct NineDevice9 *This, 228b8e80941Smrg D3DCAPS9 *pCaps ); 229b8e80941Smrg 230b8e80941SmrgHRESULT NINE_WINAPI 231b8e80941SmrgNineDevice9_GetDisplayMode( struct NineDevice9 *This, 232b8e80941Smrg UINT iSwapChain, 233b8e80941Smrg D3DDISPLAYMODE *pMode ); 234b8e80941Smrg 235b8e80941SmrgHRESULT NINE_WINAPI 236b8e80941SmrgNineDevice9_GetCreationParameters( struct NineDevice9 *This, 237b8e80941Smrg D3DDEVICE_CREATION_PARAMETERS *pParameters ); 238b8e80941Smrg 239b8e80941SmrgHRESULT NINE_WINAPI 240b8e80941SmrgNineDevice9_SetCursorProperties( struct NineDevice9 *This, 241b8e80941Smrg UINT XHotSpot, 242b8e80941Smrg UINT YHotSpot, 243b8e80941Smrg IDirect3DSurface9 *pCursorBitmap ); 244b8e80941Smrg 245b8e80941Smrgvoid NINE_WINAPI 246b8e80941SmrgNineDevice9_SetCursorPosition( struct NineDevice9 *This, 247b8e80941Smrg int X, 248b8e80941Smrg int Y, 249b8e80941Smrg DWORD Flags ); 250b8e80941Smrg 251b8e80941SmrgBOOL NINE_WINAPI 252b8e80941SmrgNineDevice9_ShowCursor( struct NineDevice9 *This, 253b8e80941Smrg BOOL bShow ); 254b8e80941Smrg 255b8e80941SmrgHRESULT NINE_WINAPI 256b8e80941SmrgNineDevice9_CreateAdditionalSwapChain( struct NineDevice9 *This, 257b8e80941Smrg D3DPRESENT_PARAMETERS *pPresentationParameters, 258b8e80941Smrg IDirect3DSwapChain9 **pSwapChain ); 259b8e80941Smrg 260b8e80941SmrgHRESULT NINE_WINAPI 261b8e80941SmrgNineDevice9_GetSwapChain( struct NineDevice9 *This, 262b8e80941Smrg UINT iSwapChain, 263b8e80941Smrg IDirect3DSwapChain9 **pSwapChain ); 264b8e80941Smrg 265b8e80941SmrgUINT NINE_WINAPI 266b8e80941SmrgNineDevice9_GetNumberOfSwapChains( struct NineDevice9 *This ); 267b8e80941Smrg 268b8e80941SmrgHRESULT NINE_WINAPI 269b8e80941SmrgNineDevice9_Reset( struct NineDevice9 *This, 270b8e80941Smrg D3DPRESENT_PARAMETERS *pPresentationParameters ); 271b8e80941Smrg 272b8e80941SmrgHRESULT NINE_WINAPI 273b8e80941SmrgNineDevice9_Present( struct NineDevice9 *This, 274b8e80941Smrg const RECT *pSourceRect, 275b8e80941Smrg const RECT *pDestRect, 276b8e80941Smrg HWND hDestWindowOverride, 277b8e80941Smrg const RGNDATA *pDirtyRegion ); 278b8e80941Smrg 279b8e80941SmrgHRESULT NINE_WINAPI 280b8e80941SmrgNineDevice9_GetBackBuffer( struct NineDevice9 *This, 281b8e80941Smrg UINT iSwapChain, 282b8e80941Smrg UINT iBackBuffer, 283b8e80941Smrg D3DBACKBUFFER_TYPE Type, 284b8e80941Smrg IDirect3DSurface9 **ppBackBuffer ); 285b8e80941Smrg 286b8e80941SmrgHRESULT NINE_WINAPI 287b8e80941SmrgNineDevice9_GetRasterStatus( struct NineDevice9 *This, 288b8e80941Smrg UINT iSwapChain, 289b8e80941Smrg D3DRASTER_STATUS *pRasterStatus ); 290b8e80941Smrg 291b8e80941SmrgHRESULT NINE_WINAPI 292b8e80941SmrgNineDevice9_SetDialogBoxMode( struct NineDevice9 *This, 293b8e80941Smrg BOOL bEnableDialogs ); 294b8e80941Smrg 295b8e80941Smrgvoid NINE_WINAPI 296b8e80941SmrgNineDevice9_SetGammaRamp( struct NineDevice9 *This, 297b8e80941Smrg UINT iSwapChain, 298b8e80941Smrg DWORD Flags, 299b8e80941Smrg const D3DGAMMARAMP *pRamp ); 300b8e80941Smrg 301b8e80941Smrgvoid NINE_WINAPI 302b8e80941SmrgNineDevice9_GetGammaRamp( struct NineDevice9 *This, 303b8e80941Smrg UINT iSwapChain, 304b8e80941Smrg D3DGAMMARAMP *pRamp ); 305b8e80941Smrg 306b8e80941SmrgHRESULT NINE_WINAPI 307b8e80941SmrgNineDevice9_CreateTexture( struct NineDevice9 *This, 308b8e80941Smrg UINT Width, 309b8e80941Smrg UINT Height, 310b8e80941Smrg UINT Levels, 311b8e80941Smrg DWORD Usage, 312b8e80941Smrg D3DFORMAT Format, 313b8e80941Smrg D3DPOOL Pool, 314b8e80941Smrg IDirect3DTexture9 **ppTexture, 315b8e80941Smrg HANDLE *pSharedHandle ); 316b8e80941Smrg 317b8e80941SmrgHRESULT NINE_WINAPI 318b8e80941SmrgNineDevice9_CreateVolumeTexture( struct NineDevice9 *This, 319b8e80941Smrg UINT Width, 320b8e80941Smrg UINT Height, 321b8e80941Smrg UINT Depth, 322b8e80941Smrg UINT Levels, 323b8e80941Smrg DWORD Usage, 324b8e80941Smrg D3DFORMAT Format, 325b8e80941Smrg D3DPOOL Pool, 326b8e80941Smrg IDirect3DVolumeTexture9 **ppVolumeTexture, 327b8e80941Smrg HANDLE *pSharedHandle ); 328b8e80941Smrg 329b8e80941SmrgHRESULT NINE_WINAPI 330b8e80941SmrgNineDevice9_CreateCubeTexture( struct NineDevice9 *This, 331b8e80941Smrg UINT EdgeLength, 332b8e80941Smrg UINT Levels, 333b8e80941Smrg DWORD Usage, 334b8e80941Smrg D3DFORMAT Format, 335b8e80941Smrg D3DPOOL Pool, 336b8e80941Smrg IDirect3DCubeTexture9 **ppCubeTexture, 337b8e80941Smrg HANDLE *pSharedHandle ); 338b8e80941Smrg 339b8e80941SmrgHRESULT NINE_WINAPI 340b8e80941SmrgNineDevice9_CreateVertexBuffer( struct NineDevice9 *This, 341b8e80941Smrg UINT Length, 342b8e80941Smrg DWORD Usage, 343b8e80941Smrg DWORD FVF, 344b8e80941Smrg D3DPOOL Pool, 345b8e80941Smrg IDirect3DVertexBuffer9 **ppVertexBuffer, 346b8e80941Smrg HANDLE *pSharedHandle ); 347b8e80941Smrg 348b8e80941SmrgHRESULT NINE_WINAPI 349b8e80941SmrgNineDevice9_CreateIndexBuffer( struct NineDevice9 *This, 350b8e80941Smrg UINT Length, 351b8e80941Smrg DWORD Usage, 352b8e80941Smrg D3DFORMAT Format, 353b8e80941Smrg D3DPOOL Pool, 354b8e80941Smrg IDirect3DIndexBuffer9 **ppIndexBuffer, 355b8e80941Smrg HANDLE *pSharedHandle ); 356b8e80941Smrg 357b8e80941SmrgHRESULT NINE_WINAPI 358b8e80941SmrgNineDevice9_CreateRenderTarget( struct NineDevice9 *This, 359b8e80941Smrg UINT Width, 360b8e80941Smrg UINT Height, 361b8e80941Smrg D3DFORMAT Format, 362b8e80941Smrg D3DMULTISAMPLE_TYPE MultiSample, 363b8e80941Smrg DWORD MultisampleQuality, 364b8e80941Smrg BOOL Lockable, 365b8e80941Smrg IDirect3DSurface9 **ppSurface, 366b8e80941Smrg HANDLE *pSharedHandle ); 367b8e80941Smrg 368b8e80941SmrgHRESULT NINE_WINAPI 369b8e80941SmrgNineDevice9_CreateDepthStencilSurface( struct NineDevice9 *This, 370b8e80941Smrg UINT Width, 371b8e80941Smrg UINT Height, 372b8e80941Smrg D3DFORMAT Format, 373b8e80941Smrg D3DMULTISAMPLE_TYPE MultiSample, 374b8e80941Smrg DWORD MultisampleQuality, 375b8e80941Smrg BOOL Discard, 376b8e80941Smrg IDirect3DSurface9 **ppSurface, 377b8e80941Smrg HANDLE *pSharedHandle ); 378b8e80941Smrg 379b8e80941SmrgHRESULT NINE_WINAPI 380b8e80941SmrgNineDevice9_UpdateSurface( struct NineDevice9 *This, 381b8e80941Smrg IDirect3DSurface9 *pSourceSurface, 382b8e80941Smrg const RECT *pSourceRect, 383b8e80941Smrg IDirect3DSurface9 *pDestinationSurface, 384b8e80941Smrg const POINT *pDestPoint ); 385b8e80941Smrg 386b8e80941SmrgHRESULT NINE_WINAPI 387b8e80941SmrgNineDevice9_UpdateTexture( struct NineDevice9 *This, 388b8e80941Smrg IDirect3DBaseTexture9 *pSourceTexture, 389b8e80941Smrg IDirect3DBaseTexture9 *pDestinationTexture ); 390b8e80941Smrg 391b8e80941SmrgHRESULT NINE_WINAPI 392b8e80941SmrgNineDevice9_GetRenderTargetData( struct NineDevice9 *This, 393b8e80941Smrg IDirect3DSurface9 *pRenderTarget, 394b8e80941Smrg IDirect3DSurface9 *pDestSurface ); 395b8e80941Smrg 396b8e80941SmrgHRESULT NINE_WINAPI 397b8e80941SmrgNineDevice9_GetFrontBufferData( struct NineDevice9 *This, 398b8e80941Smrg UINT iSwapChain, 399b8e80941Smrg IDirect3DSurface9 *pDestSurface ); 400b8e80941Smrg 401b8e80941SmrgHRESULT NINE_WINAPI 402b8e80941SmrgNineDevice9_StretchRect( struct NineDevice9 *This, 403b8e80941Smrg IDirect3DSurface9 *pSourceSurface, 404b8e80941Smrg const RECT *pSourceRect, 405b8e80941Smrg IDirect3DSurface9 *pDestSurface, 406b8e80941Smrg const RECT *pDestRect, 407b8e80941Smrg D3DTEXTUREFILTERTYPE Filter ); 408b8e80941Smrg 409b8e80941SmrgHRESULT NINE_WINAPI 410b8e80941SmrgNineDevice9_ColorFill( struct NineDevice9 *This, 411b8e80941Smrg IDirect3DSurface9 *pSurface, 412b8e80941Smrg const RECT *pRect, 413b8e80941Smrg D3DCOLOR color ); 414b8e80941Smrg 415b8e80941SmrgHRESULT NINE_WINAPI 416b8e80941SmrgNineDevice9_CreateOffscreenPlainSurface( struct NineDevice9 *This, 417b8e80941Smrg UINT Width, 418b8e80941Smrg UINT Height, 419b8e80941Smrg D3DFORMAT Format, 420b8e80941Smrg D3DPOOL Pool, 421b8e80941Smrg IDirect3DSurface9 **ppSurface, 422b8e80941Smrg HANDLE *pSharedHandle ); 423b8e80941Smrg 424b8e80941SmrgHRESULT NINE_WINAPI 425b8e80941SmrgNineDevice9_SetRenderTarget( struct NineDevice9 *This, 426b8e80941Smrg DWORD RenderTargetIndex, 427b8e80941Smrg IDirect3DSurface9 *pRenderTarget ); 428b8e80941Smrg 429b8e80941SmrgHRESULT NINE_WINAPI 430b8e80941SmrgNineDevice9_GetRenderTarget( struct NineDevice9 *This, 431b8e80941Smrg DWORD RenderTargetIndex, 432b8e80941Smrg IDirect3DSurface9 **ppRenderTarget ); 433b8e80941Smrg 434b8e80941SmrgHRESULT NINE_WINAPI 435b8e80941SmrgNineDevice9_SetDepthStencilSurface( struct NineDevice9 *This, 436b8e80941Smrg IDirect3DSurface9 *pNewZStencil ); 437b8e80941Smrg 438b8e80941SmrgHRESULT NINE_WINAPI 439b8e80941SmrgNineDevice9_GetDepthStencilSurface( struct NineDevice9 *This, 440b8e80941Smrg IDirect3DSurface9 **ppZStencilSurface ); 441b8e80941Smrg 442b8e80941SmrgHRESULT NINE_WINAPI 443b8e80941SmrgNineDevice9_BeginScene( struct NineDevice9 *This ); 444b8e80941Smrg 445b8e80941SmrgHRESULT NINE_WINAPI 446b8e80941SmrgNineDevice9_EndScene( struct NineDevice9 *This ); 447b8e80941Smrg 448b8e80941SmrgHRESULT NINE_WINAPI 449b8e80941SmrgNineDevice9_Clear( struct NineDevice9 *This, 450b8e80941Smrg DWORD Count, 451b8e80941Smrg const D3DRECT *pRects, 452b8e80941Smrg DWORD Flags, 453b8e80941Smrg D3DCOLOR Color, 454b8e80941Smrg float Z, 455b8e80941Smrg DWORD Stencil ); 456b8e80941Smrg 457b8e80941SmrgHRESULT NINE_WINAPI 458b8e80941SmrgNineDevice9_SetTransform( struct NineDevice9 *This, 459b8e80941Smrg D3DTRANSFORMSTATETYPE State, 460b8e80941Smrg const D3DMATRIX *pMatrix ); 461b8e80941Smrg 462b8e80941SmrgHRESULT NINE_WINAPI 463b8e80941SmrgNineDevice9_GetTransform( struct NineDevice9 *This, 464b8e80941Smrg D3DTRANSFORMSTATETYPE State, 465b8e80941Smrg D3DMATRIX *pMatrix ); 466b8e80941Smrg 467b8e80941SmrgHRESULT NINE_WINAPI 468b8e80941SmrgNineDevice9_MultiplyTransform( struct NineDevice9 *This, 469b8e80941Smrg D3DTRANSFORMSTATETYPE State, 470b8e80941Smrg const D3DMATRIX *pMatrix ); 471b8e80941Smrg 472b8e80941SmrgHRESULT NINE_WINAPI 473b8e80941SmrgNineDevice9_SetViewport( struct NineDevice9 *This, 474b8e80941Smrg const D3DVIEWPORT9 *pViewport ); 475b8e80941Smrg 476b8e80941SmrgHRESULT NINE_WINAPI 477b8e80941SmrgNineDevice9_GetViewport( struct NineDevice9 *This, 478b8e80941Smrg D3DVIEWPORT9 *pViewport ); 479b8e80941Smrg 480b8e80941SmrgHRESULT NINE_WINAPI 481b8e80941SmrgNineDevice9_SetMaterial( struct NineDevice9 *This, 482b8e80941Smrg const D3DMATERIAL9 *pMaterial ); 483b8e80941Smrg 484b8e80941SmrgHRESULT NINE_WINAPI 485b8e80941SmrgNineDevice9_GetMaterial( struct NineDevice9 *This, 486b8e80941Smrg D3DMATERIAL9 *pMaterial ); 487b8e80941Smrg 488b8e80941SmrgHRESULT NINE_WINAPI 489b8e80941SmrgNineDevice9_SetLight( struct NineDevice9 *This, 490b8e80941Smrg DWORD Index, 491b8e80941Smrg const D3DLIGHT9 *pLight ); 492b8e80941Smrg 493b8e80941SmrgHRESULT NINE_WINAPI 494b8e80941SmrgNineDevice9_GetLight( struct NineDevice9 *This, 495b8e80941Smrg DWORD Index, 496b8e80941Smrg D3DLIGHT9 *pLight ); 497b8e80941Smrg 498b8e80941SmrgHRESULT NINE_WINAPI 499b8e80941SmrgNineDevice9_LightEnable( struct NineDevice9 *This, 500b8e80941Smrg DWORD Index, 501b8e80941Smrg BOOL Enable ); 502b8e80941Smrg 503b8e80941SmrgHRESULT NINE_WINAPI 504b8e80941SmrgNineDevice9_GetLightEnable( struct NineDevice9 *This, 505b8e80941Smrg DWORD Index, 506b8e80941Smrg BOOL *pEnable ); 507b8e80941Smrg 508b8e80941SmrgHRESULT NINE_WINAPI 509b8e80941SmrgNineDevice9_SetClipPlane( struct NineDevice9 *This, 510b8e80941Smrg DWORD Index, 511b8e80941Smrg const float *pPlane ); 512b8e80941Smrg 513b8e80941SmrgHRESULT NINE_WINAPI 514b8e80941SmrgNineDevice9_GetClipPlane( struct NineDevice9 *This, 515b8e80941Smrg DWORD Index, 516b8e80941Smrg float *pPlane ); 517b8e80941Smrg 518b8e80941SmrgHRESULT NINE_WINAPI 519b8e80941SmrgNineDevice9_SetRenderState( struct NineDevice9 *This, 520b8e80941Smrg D3DRENDERSTATETYPE State, 521b8e80941Smrg DWORD Value ); 522b8e80941Smrg 523b8e80941SmrgHRESULT NINE_WINAPI 524b8e80941SmrgNineDevice9_GetRenderState( struct NineDevice9 *This, 525b8e80941Smrg D3DRENDERSTATETYPE State, 526b8e80941Smrg DWORD *pValue ); 527b8e80941Smrg 528b8e80941SmrgHRESULT NINE_WINAPI 529b8e80941SmrgNineDevice9_CreateStateBlock( struct NineDevice9 *This, 530b8e80941Smrg D3DSTATEBLOCKTYPE Type, 531b8e80941Smrg IDirect3DStateBlock9 **ppSB ); 532b8e80941Smrg 533b8e80941SmrgHRESULT NINE_WINAPI 534b8e80941SmrgNineDevice9_BeginStateBlock( struct NineDevice9 *This ); 535b8e80941Smrg 536b8e80941SmrgHRESULT NINE_WINAPI 537b8e80941SmrgNineDevice9_EndStateBlock( struct NineDevice9 *This, 538b8e80941Smrg IDirect3DStateBlock9 **ppSB ); 539b8e80941Smrg 540b8e80941SmrgHRESULT NINE_WINAPI 541b8e80941SmrgNineDevice9_SetClipStatus( struct NineDevice9 *This, 542b8e80941Smrg const D3DCLIPSTATUS9 *pClipStatus ); 543b8e80941Smrg 544b8e80941SmrgHRESULT NINE_WINAPI 545b8e80941SmrgNineDevice9_GetClipStatus( struct NineDevice9 *This, 546b8e80941Smrg D3DCLIPSTATUS9 *pClipStatus ); 547b8e80941Smrg 548b8e80941SmrgHRESULT NINE_WINAPI 549b8e80941SmrgNineDevice9_GetTexture( struct NineDevice9 *This, 550b8e80941Smrg DWORD Stage, 551b8e80941Smrg IDirect3DBaseTexture9 **ppTexture ); 552b8e80941Smrg 553b8e80941SmrgHRESULT NINE_WINAPI 554b8e80941SmrgNineDevice9_SetTexture( struct NineDevice9 *This, 555b8e80941Smrg DWORD Stage, 556b8e80941Smrg IDirect3DBaseTexture9 *pTexture ); 557b8e80941Smrg 558b8e80941SmrgHRESULT NINE_WINAPI 559b8e80941SmrgNineDevice9_GetTextureStageState( struct NineDevice9 *This, 560b8e80941Smrg DWORD Stage, 561b8e80941Smrg D3DTEXTURESTAGESTATETYPE Type, 562b8e80941Smrg DWORD *pValue ); 563b8e80941Smrg 564b8e80941SmrgHRESULT NINE_WINAPI 565b8e80941SmrgNineDevice9_SetTextureStageState( struct NineDevice9 *This, 566b8e80941Smrg DWORD Stage, 567b8e80941Smrg D3DTEXTURESTAGESTATETYPE Type, 568b8e80941Smrg DWORD Value ); 569b8e80941Smrg 570b8e80941SmrgHRESULT NINE_WINAPI 571b8e80941SmrgNineDevice9_GetSamplerState( struct NineDevice9 *This, 572b8e80941Smrg DWORD Sampler, 573b8e80941Smrg D3DSAMPLERSTATETYPE Type, 574b8e80941Smrg DWORD *pValue ); 575b8e80941Smrg 576b8e80941SmrgHRESULT NINE_WINAPI 577b8e80941SmrgNineDevice9_SetSamplerState( struct NineDevice9 *This, 578b8e80941Smrg DWORD Sampler, 579b8e80941Smrg D3DSAMPLERSTATETYPE Type, 580b8e80941Smrg DWORD Value ); 581b8e80941Smrg 582b8e80941SmrgHRESULT NINE_WINAPI 583b8e80941SmrgNineDevice9_ValidateDevice( struct NineDevice9 *This, 584b8e80941Smrg DWORD *pNumPasses ); 585b8e80941Smrg 586b8e80941SmrgHRESULT NINE_WINAPI 587b8e80941SmrgNineDevice9_SetPaletteEntries( struct NineDevice9 *This, 588b8e80941Smrg UINT PaletteNumber, 589b8e80941Smrg const PALETTEENTRY *pEntries ); 590b8e80941Smrg 591b8e80941SmrgHRESULT NINE_WINAPI 592b8e80941SmrgNineDevice9_GetPaletteEntries( struct NineDevice9 *This, 593b8e80941Smrg UINT PaletteNumber, 594b8e80941Smrg PALETTEENTRY *pEntries ); 595b8e80941Smrg 596b8e80941SmrgHRESULT NINE_WINAPI 597b8e80941SmrgNineDevice9_SetCurrentTexturePalette( struct NineDevice9 *This, 598b8e80941Smrg UINT PaletteNumber ); 599b8e80941Smrg 600b8e80941SmrgHRESULT NINE_WINAPI 601b8e80941SmrgNineDevice9_GetCurrentTexturePalette( struct NineDevice9 *This, 602b8e80941Smrg UINT *PaletteNumber ); 603b8e80941Smrg 604b8e80941SmrgHRESULT NINE_WINAPI 605b8e80941SmrgNineDevice9_SetScissorRect( struct NineDevice9 *This, 606b8e80941Smrg const RECT *pRect ); 607b8e80941Smrg 608b8e80941SmrgHRESULT NINE_WINAPI 609b8e80941SmrgNineDevice9_GetScissorRect( struct NineDevice9 *This, 610b8e80941Smrg RECT *pRect ); 611b8e80941Smrg 612b8e80941SmrgHRESULT NINE_WINAPI 613b8e80941SmrgNineDevice9_SetSoftwareVertexProcessing( struct NineDevice9 *This, 614b8e80941Smrg BOOL bSoftware ); 615b8e80941Smrg 616b8e80941SmrgBOOL NINE_WINAPI 617b8e80941SmrgNineDevice9_GetSoftwareVertexProcessing( struct NineDevice9 *This ); 618b8e80941Smrg 619b8e80941SmrgHRESULT NINE_WINAPI 620b8e80941SmrgNineDevice9_SetNPatchMode( struct NineDevice9 *This, 621b8e80941Smrg float nSegments ); 622b8e80941Smrg 623b8e80941Smrgfloat NINE_WINAPI 624b8e80941SmrgNineDevice9_GetNPatchMode( struct NineDevice9 *This ); 625b8e80941Smrg 626b8e80941SmrgHRESULT NINE_WINAPI 627b8e80941SmrgNineDevice9_DrawPrimitive( struct NineDevice9 *This, 628b8e80941Smrg D3DPRIMITIVETYPE PrimitiveType, 629b8e80941Smrg UINT StartVertex, 630b8e80941Smrg UINT PrimitiveCount ); 631b8e80941Smrg 632b8e80941SmrgHRESULT NINE_WINAPI 633b8e80941SmrgNineDevice9_DrawIndexedPrimitive( struct NineDevice9 *This, 634b8e80941Smrg D3DPRIMITIVETYPE PrimitiveType, 635b8e80941Smrg INT BaseVertexIndex, 636b8e80941Smrg UINT MinVertexIndex, 637b8e80941Smrg UINT NumVertices, 638b8e80941Smrg UINT startIndex, 639b8e80941Smrg UINT primCount ); 640b8e80941Smrg 641b8e80941SmrgHRESULT NINE_WINAPI 642b8e80941SmrgNineDevice9_DrawPrimitiveUP( struct NineDevice9 *This, 643b8e80941Smrg D3DPRIMITIVETYPE PrimitiveType, 644b8e80941Smrg UINT PrimitiveCount, 645b8e80941Smrg const void *pVertexStreamZeroData, 646b8e80941Smrg UINT VertexStreamZeroStride ); 647b8e80941Smrg 648b8e80941SmrgHRESULT NINE_WINAPI 649b8e80941SmrgNineDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This, 650b8e80941Smrg D3DPRIMITIVETYPE PrimitiveType, 651b8e80941Smrg UINT MinVertexIndex, 652b8e80941Smrg UINT NumVertices, 653b8e80941Smrg UINT PrimitiveCount, 654b8e80941Smrg const void *pIndexData, 655b8e80941Smrg D3DFORMAT IndexDataFormat, 656b8e80941Smrg const void *pVertexStreamZeroData, 657b8e80941Smrg UINT VertexStreamZeroStride ); 658b8e80941Smrg 659b8e80941SmrgHRESULT NINE_WINAPI 660b8e80941SmrgNineDevice9_ProcessVertices( struct NineDevice9 *This, 661b8e80941Smrg UINT SrcStartIndex, 662b8e80941Smrg UINT DestIndex, 663b8e80941Smrg UINT VertexCount, 664b8e80941Smrg IDirect3DVertexBuffer9 *pDestBuffer, 665b8e80941Smrg IDirect3DVertexDeclaration9 *pVertexDecl, 666b8e80941Smrg DWORD Flags ); 667b8e80941Smrg 668b8e80941SmrgHRESULT NINE_WINAPI 669b8e80941SmrgNineDevice9_CreateVertexDeclaration( struct NineDevice9 *This, 670b8e80941Smrg const D3DVERTEXELEMENT9 *pVertexElements, 671b8e80941Smrg IDirect3DVertexDeclaration9 **ppDecl ); 672b8e80941Smrg 673b8e80941SmrgHRESULT NINE_WINAPI 674b8e80941SmrgNineDevice9_SetVertexDeclaration( struct NineDevice9 *This, 675b8e80941Smrg IDirect3DVertexDeclaration9 *pDecl ); 676b8e80941Smrg 677b8e80941SmrgHRESULT NINE_WINAPI 678b8e80941SmrgNineDevice9_GetVertexDeclaration( struct NineDevice9 *This, 679b8e80941Smrg IDirect3DVertexDeclaration9 **ppDecl ); 680b8e80941Smrg 681b8e80941SmrgHRESULT NINE_WINAPI 682b8e80941SmrgNineDevice9_SetFVF( struct NineDevice9 *This, 683b8e80941Smrg DWORD FVF ); 684b8e80941Smrg 685b8e80941SmrgHRESULT NINE_WINAPI 686b8e80941SmrgNineDevice9_GetFVF( struct NineDevice9 *This, 687b8e80941Smrg DWORD *pFVF ); 688b8e80941Smrg 689b8e80941SmrgHRESULT NINE_WINAPI 690b8e80941SmrgNineDevice9_CreateVertexShader( struct NineDevice9 *This, 691b8e80941Smrg const DWORD *pFunction, 692b8e80941Smrg IDirect3DVertexShader9 **ppShader ); 693b8e80941Smrg 694b8e80941SmrgHRESULT NINE_WINAPI 695b8e80941SmrgNineDevice9_SetVertexShader( struct NineDevice9 *This, 696b8e80941Smrg IDirect3DVertexShader9 *pShader ); 697b8e80941Smrg 698b8e80941SmrgHRESULT NINE_WINAPI 699b8e80941SmrgNineDevice9_GetVertexShader( struct NineDevice9 *This, 700b8e80941Smrg IDirect3DVertexShader9 **ppShader ); 701b8e80941Smrg 702b8e80941SmrgHRESULT NINE_WINAPI 703b8e80941SmrgNineDevice9_SetVertexShaderConstantF( struct NineDevice9 *This, 704b8e80941Smrg UINT StartRegister, 705b8e80941Smrg const float *pConstantData, 706b8e80941Smrg UINT Vector4fCount ); 707b8e80941Smrg 708b8e80941SmrgHRESULT NINE_WINAPI 709b8e80941SmrgNineDevice9_GetVertexShaderConstantF( struct NineDevice9 *This, 710b8e80941Smrg UINT StartRegister, 711b8e80941Smrg float *pConstantData, 712b8e80941Smrg UINT Vector4fCount ); 713b8e80941Smrg 714b8e80941SmrgHRESULT NINE_WINAPI 715b8e80941SmrgNineDevice9_SetVertexShaderConstantI( struct NineDevice9 *This, 716b8e80941Smrg UINT StartRegister, 717b8e80941Smrg const int *pConstantData, 718b8e80941Smrg UINT Vector4iCount ); 719b8e80941Smrg 720b8e80941SmrgHRESULT NINE_WINAPI 721b8e80941SmrgNineDevice9_GetVertexShaderConstantI( struct NineDevice9 *This, 722b8e80941Smrg UINT StartRegister, 723b8e80941Smrg int *pConstantData, 724b8e80941Smrg UINT Vector4iCount ); 725b8e80941Smrg 726b8e80941SmrgHRESULT NINE_WINAPI 727b8e80941SmrgNineDevice9_SetVertexShaderConstantB( struct NineDevice9 *This, 728b8e80941Smrg UINT StartRegister, 729b8e80941Smrg const BOOL *pConstantData, 730b8e80941Smrg UINT BoolCount ); 731b8e80941Smrg 732b8e80941SmrgHRESULT NINE_WINAPI 733b8e80941SmrgNineDevice9_GetVertexShaderConstantB( struct NineDevice9 *This, 734b8e80941Smrg UINT StartRegister, 735b8e80941Smrg BOOL *pConstantData, 736b8e80941Smrg UINT BoolCount ); 737b8e80941Smrg 738b8e80941SmrgHRESULT NINE_WINAPI 739b8e80941SmrgNineDevice9_SetStreamSource( struct NineDevice9 *This, 740b8e80941Smrg UINT StreamNumber, 741b8e80941Smrg IDirect3DVertexBuffer9 *pStreamData, 742b8e80941Smrg UINT OffsetInBytes, 743b8e80941Smrg UINT Stride ); 744b8e80941Smrg 745b8e80941SmrgHRESULT NINE_WINAPI 746b8e80941SmrgNineDevice9_GetStreamSource( struct NineDevice9 *This, 747b8e80941Smrg UINT StreamNumber, 748b8e80941Smrg IDirect3DVertexBuffer9 **ppStreamData, 749b8e80941Smrg UINT *pOffsetInBytes, 750b8e80941Smrg UINT *pStride ); 751b8e80941Smrg 752b8e80941SmrgHRESULT NINE_WINAPI 753b8e80941SmrgNineDevice9_SetStreamSourceFreq( struct NineDevice9 *This, 754b8e80941Smrg UINT StreamNumber, 755b8e80941Smrg UINT Setting ); 756b8e80941Smrg 757b8e80941SmrgHRESULT NINE_WINAPI 758b8e80941SmrgNineDevice9_GetStreamSourceFreq( struct NineDevice9 *This, 759b8e80941Smrg UINT StreamNumber, 760b8e80941Smrg UINT *pSetting ); 761b8e80941Smrg 762b8e80941SmrgHRESULT NINE_WINAPI 763b8e80941SmrgNineDevice9_SetIndices( struct NineDevice9 *This, 764b8e80941Smrg IDirect3DIndexBuffer9 *pIndexData ); 765b8e80941Smrg 766b8e80941SmrgHRESULT NINE_WINAPI 767b8e80941SmrgNineDevice9_GetIndices( struct NineDevice9 *This, 768b8e80941Smrg IDirect3DIndexBuffer9 **ppIndexData /*, 769b8e80941Smrg UINT *pBaseVertexIndex */ ); 770b8e80941Smrg 771b8e80941SmrgHRESULT NINE_WINAPI 772b8e80941SmrgNineDevice9_CreatePixelShader( struct NineDevice9 *This, 773b8e80941Smrg const DWORD *pFunction, 774b8e80941Smrg IDirect3DPixelShader9 **ppShader ); 775b8e80941Smrg 776b8e80941SmrgHRESULT NINE_WINAPI 777b8e80941SmrgNineDevice9_SetPixelShader( struct NineDevice9 *This, 778b8e80941Smrg IDirect3DPixelShader9 *pShader ); 779b8e80941Smrg 780b8e80941SmrgHRESULT NINE_WINAPI 781b8e80941SmrgNineDevice9_GetPixelShader( struct NineDevice9 *This, 782b8e80941Smrg IDirect3DPixelShader9 **ppShader ); 783b8e80941Smrg 784b8e80941SmrgHRESULT NINE_WINAPI 785b8e80941SmrgNineDevice9_SetPixelShaderConstantF( struct NineDevice9 *This, 786b8e80941Smrg UINT StartRegister, 787b8e80941Smrg const float *pConstantData, 788b8e80941Smrg UINT Vector4fCount ); 789b8e80941Smrg 790b8e80941SmrgHRESULT NINE_WINAPI 791b8e80941SmrgNineDevice9_GetPixelShaderConstantF( struct NineDevice9 *This, 792b8e80941Smrg UINT StartRegister, 793b8e80941Smrg float *pConstantData, 794b8e80941Smrg UINT Vector4fCount ); 795b8e80941Smrg 796b8e80941SmrgHRESULT NINE_WINAPI 797b8e80941SmrgNineDevice9_SetPixelShaderConstantI( struct NineDevice9 *This, 798b8e80941Smrg UINT StartRegister, 799b8e80941Smrg const int *pConstantData, 800b8e80941Smrg UINT Vector4iCount ); 801b8e80941Smrg 802b8e80941SmrgHRESULT NINE_WINAPI 803b8e80941SmrgNineDevice9_GetPixelShaderConstantI( struct NineDevice9 *This, 804b8e80941Smrg UINT StartRegister, 805b8e80941Smrg int *pConstantData, 806b8e80941Smrg UINT Vector4iCount ); 807b8e80941Smrg 808b8e80941SmrgHRESULT NINE_WINAPI 809b8e80941SmrgNineDevice9_SetPixelShaderConstantB( struct NineDevice9 *This, 810b8e80941Smrg UINT StartRegister, 811b8e80941Smrg const BOOL *pConstantData, 812b8e80941Smrg UINT BoolCount ); 813b8e80941Smrg 814b8e80941SmrgHRESULT NINE_WINAPI 815b8e80941SmrgNineDevice9_GetPixelShaderConstantB( struct NineDevice9 *This, 816b8e80941Smrg UINT StartRegister, 817b8e80941Smrg BOOL *pConstantData, 818b8e80941Smrg UINT BoolCount ); 819b8e80941Smrg 820b8e80941SmrgHRESULT NINE_WINAPI 821b8e80941SmrgNineDevice9_DrawRectPatch( struct NineDevice9 *This, 822b8e80941Smrg UINT Handle, 823b8e80941Smrg const float *pNumSegs, 824b8e80941Smrg const D3DRECTPATCH_INFO *pRectPatchInfo ); 825b8e80941Smrg 826b8e80941SmrgHRESULT NINE_WINAPI 827b8e80941SmrgNineDevice9_DrawTriPatch( struct NineDevice9 *This, 828b8e80941Smrg UINT Handle, 829b8e80941Smrg const float *pNumSegs, 830b8e80941Smrg const D3DTRIPATCH_INFO *pTriPatchInfo ); 831b8e80941Smrg 832b8e80941SmrgHRESULT NINE_WINAPI 833b8e80941SmrgNineDevice9_DeletePatch( struct NineDevice9 *This, 834b8e80941Smrg UINT Handle ); 835b8e80941Smrg 836b8e80941SmrgHRESULT NINE_WINAPI 837b8e80941SmrgNineDevice9_CreateQuery( struct NineDevice9 *This, 838b8e80941Smrg D3DQUERYTYPE Type, 839b8e80941Smrg IDirect3DQuery9 **ppQuery ); 840b8e80941Smrg 841b8e80941Smrg#endif /* _NINE_DEVICE9_H_ */ 842