Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 2011 Joakim Sindholt <opensource@zhasha.com>
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * on the rights to use, copy, modify, merge, publish, distribute, sub
  8.  * license, and/or sell copies of the Software, and to permit persons to whom
  9.  * the Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  18.  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  21.  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
  22.  
  23. #ifndef _NINE_DEVICE9_H_
  24. #define _NINE_DEVICE9_H_
  25.  
  26. #include "d3dadapter/d3dadapter9.h"
  27.  
  28. #include "iunknown.h"
  29. #include "adapter9.h"
  30.  
  31. #include "nine_helpers.h"
  32. #include "nine_state.h"
  33.  
  34. struct gen_mipmap_state;
  35. struct util_hash_table;
  36. struct pipe_screen;
  37. struct pipe_context;
  38. struct cso_context;
  39. struct hud_context;
  40. struct u_upload_mgr;
  41.  
  42. struct NineSwapChain9;
  43. struct NineStateBlock9;
  44.  
  45. #include "util/list.h"
  46.  
  47. struct NineDevice9
  48. {
  49.     struct NineUnknown base;
  50.     boolean ex;
  51.  
  52.     /* G3D context */
  53.     struct pipe_screen *screen;
  54.     struct pipe_context *pipe;
  55.     struct cso_context *cso;
  56.  
  57.     /* creation parameters */
  58.     D3DCAPS9 caps;
  59.     D3DDEVICE_CREATION_PARAMETERS params;
  60.     IDirect3D9 *d3d9;
  61.  
  62.     /* swapchain stuff */
  63.     ID3DPresentGroup *present;
  64.     struct NineSwapChain9 **swapchains;
  65.     unsigned nswapchains;
  66.  
  67.     struct NineStateBlock9 *record;
  68.     struct nine_state *update; /* state to update (&state / &record->state) */
  69.     struct nine_state state;   /* device state */
  70.  
  71.     struct list_head update_textures;
  72.  
  73.     boolean is_recording;
  74.     boolean in_scene;
  75.  
  76.     boolean prefer_user_constbuf;
  77.  
  78.     struct pipe_resource *constbuf_vs;
  79.     struct pipe_resource *constbuf_ps;
  80.     uint16_t vs_const_size;
  81.     uint16_t ps_const_size;
  82.     uint16_t max_vs_const_f;
  83.     uint16_t max_ps_const_f;
  84.  
  85.     struct pipe_resource *dummy_texture;
  86.     struct pipe_sampler_view *dummy_sampler;
  87.  
  88.     struct gen_mipmap_state *gen_mipmap;
  89.  
  90.     struct {
  91.         struct util_hash_table *ht_vs;
  92.         struct util_hash_table *ht_ps;
  93.         struct NineVertexShader9 *vs;
  94.         struct NinePixelShader9 *ps;
  95.         unsigned num_vs;
  96.         unsigned num_ps;
  97.         float *vs_const;
  98.         float *ps_const;
  99.  
  100.         struct util_hash_table *ht_fvf;
  101.     } ff;
  102.  
  103.     struct {
  104.         struct pipe_resource *image;
  105.         unsigned w;
  106.         unsigned h;
  107.         POINT hotspot; /* -1, -1 if no cursor image set */
  108.         POINT pos;
  109.         BOOL visible;
  110.         boolean software;
  111.     } cursor;
  112.  
  113.     struct {
  114.         boolean user_vbufs;
  115.         boolean user_ibufs;
  116.         boolean window_space_position_support;
  117.         boolean vs_integer;
  118.         boolean ps_integer;
  119.     } driver_caps;
  120.  
  121.     struct {
  122.         boolean buggy_barycentrics;
  123.     } driver_bugs;
  124.  
  125.     struct u_upload_mgr *upload;
  126.  
  127.     struct nine_range_pool range_pool;
  128.  
  129.     struct hud_context *hud; /* NULL if hud is disabled */
  130.  
  131.     /* dummy vbo (containing 0 0 0 0) to bind if vertex shader input
  132.      * is not bound to anything by the vertex declaration */
  133.     struct pipe_resource *dummy_vbo;
  134. };
  135. static INLINE struct NineDevice9 *
  136. NineDevice9( void *data )
  137. {
  138.     return (struct NineDevice9 *)data;
  139. }
  140.  
  141. HRESULT
  142. NineDevice9_new( struct pipe_screen *pScreen,
  143.                  D3DDEVICE_CREATION_PARAMETERS *pCreationParameters,
  144.                  D3DCAPS9 *pCaps,
  145.                  D3DPRESENT_PARAMETERS *pPresentationParameters,
  146.                  IDirect3D9 *pD3D9,
  147.                  ID3DPresentGroup *pPresentationGroup,
  148.                  struct d3dadapter9_context *pCTX,
  149.                  boolean ex,
  150.                  D3DDISPLAYMODEEX *pFullscreenDisplayMode,
  151.                  struct NineDevice9 **ppOut );
  152.  
  153. HRESULT
  154. NineDevice9_ctor( struct NineDevice9 *This,
  155.                   struct NineUnknownParams *pParams,
  156.                   struct pipe_screen *pScreen,
  157.                   D3DDEVICE_CREATION_PARAMETERS *pCreationParameters,
  158.                   D3DCAPS9 *pCaps,
  159.                   D3DPRESENT_PARAMETERS *pPresentationParameters,
  160.                   IDirect3D9 *pD3D9,
  161.                   ID3DPresentGroup *pPresentationGroup,
  162.                   struct d3dadapter9_context *pCTX,
  163.                   boolean ex,
  164.                   D3DDISPLAYMODEEX *pFullscreenDisplayMode );
  165.  
  166. void
  167. NineDevice9_dtor( struct NineDevice9 *This );
  168.  
  169. /*** Nine private ***/
  170.  
  171. struct pipe_screen *
  172. NineDevice9_GetScreen( struct NineDevice9 *This );
  173.  
  174. struct pipe_context *
  175. NineDevice9_GetPipe( struct NineDevice9 *This );
  176.  
  177. struct cso_context *
  178. NineDevice9_GetCSO( struct NineDevice9 *This );
  179.  
  180. const D3DCAPS9 *
  181. NineDevice9_GetCaps( struct NineDevice9 *This );
  182.  
  183. /* Mask: 0x1 = constant buffers, 0x2 = stipple */
  184. void
  185. NineDevice9_RestoreNonCSOState( struct NineDevice9 *This, unsigned mask );
  186.  
  187. /*** Direct3D public ***/
  188.  
  189. HRESULT WINAPI
  190. NineDevice9_TestCooperativeLevel( struct NineDevice9 *This );
  191.  
  192. UINT WINAPI
  193. NineDevice9_GetAvailableTextureMem( struct NineDevice9 *This );
  194.  
  195. HRESULT WINAPI
  196. NineDevice9_EvictManagedResources( struct NineDevice9 *This );
  197.  
  198. HRESULT WINAPI
  199. NineDevice9_GetDirect3D( struct NineDevice9 *This,
  200.                          IDirect3D9 **ppD3D9 );
  201.  
  202. HRESULT WINAPI
  203. NineDevice9_GetDeviceCaps( struct NineDevice9 *This,
  204.                            D3DCAPS9 *pCaps );
  205.  
  206. HRESULT WINAPI
  207. NineDevice9_GetDisplayMode( struct NineDevice9 *This,
  208.                             UINT iSwapChain,
  209.                             D3DDISPLAYMODE *pMode );
  210.  
  211. HRESULT WINAPI
  212. NineDevice9_GetCreationParameters( struct NineDevice9 *This,
  213.                                    D3DDEVICE_CREATION_PARAMETERS *pParameters );
  214.  
  215. HRESULT WINAPI
  216. NineDevice9_SetCursorProperties( struct NineDevice9 *This,
  217.                                  UINT XHotSpot,
  218.                                  UINT YHotSpot,
  219.                                  IDirect3DSurface9 *pCursorBitmap );
  220.  
  221. void WINAPI
  222. NineDevice9_SetCursorPosition( struct NineDevice9 *This,
  223.                                int X,
  224.                                int Y,
  225.                                DWORD Flags );
  226.  
  227. BOOL WINAPI
  228. NineDevice9_ShowCursor( struct NineDevice9 *This,
  229.                         BOOL bShow );
  230.  
  231. HRESULT WINAPI
  232. NineDevice9_CreateAdditionalSwapChain( struct NineDevice9 *This,
  233.                                        D3DPRESENT_PARAMETERS *pPresentationParameters,
  234.                                        IDirect3DSwapChain9 **pSwapChain );
  235.  
  236. HRESULT WINAPI
  237. NineDevice9_GetSwapChain( struct NineDevice9 *This,
  238.                           UINT iSwapChain,
  239.                           IDirect3DSwapChain9 **pSwapChain );
  240.  
  241. UINT WINAPI
  242. NineDevice9_GetNumberOfSwapChains( struct NineDevice9 *This );
  243.  
  244. HRESULT WINAPI
  245. NineDevice9_Reset( struct NineDevice9 *This,
  246.                    D3DPRESENT_PARAMETERS *pPresentationParameters );
  247.  
  248. HRESULT WINAPI
  249. NineDevice9_Present( struct NineDevice9 *This,
  250.                      const RECT *pSourceRect,
  251.                      const RECT *pDestRect,
  252.                      HWND hDestWindowOverride,
  253.                      const RGNDATA *pDirtyRegion );
  254.  
  255. HRESULT WINAPI
  256. NineDevice9_GetBackBuffer( struct NineDevice9 *This,
  257.                            UINT iSwapChain,
  258.                            UINT iBackBuffer,
  259.                            D3DBACKBUFFER_TYPE Type,
  260.                            IDirect3DSurface9 **ppBackBuffer );
  261.  
  262. HRESULT WINAPI
  263. NineDevice9_GetRasterStatus( struct NineDevice9 *This,
  264.                              UINT iSwapChain,
  265.                              D3DRASTER_STATUS *pRasterStatus );
  266.  
  267. HRESULT WINAPI
  268. NineDevice9_SetDialogBoxMode( struct NineDevice9 *This,
  269.                               BOOL bEnableDialogs );
  270.  
  271. void WINAPI
  272. NineDevice9_SetGammaRamp( struct NineDevice9 *This,
  273.                           UINT iSwapChain,
  274.                           DWORD Flags,
  275.                           const D3DGAMMARAMP *pRamp );
  276.  
  277. void WINAPI
  278. NineDevice9_GetGammaRamp( struct NineDevice9 *This,
  279.                           UINT iSwapChain,
  280.                           D3DGAMMARAMP *pRamp );
  281.  
  282. HRESULT WINAPI
  283. NineDevice9_CreateTexture( struct NineDevice9 *This,
  284.                            UINT Width,
  285.                            UINT Height,
  286.                            UINT Levels,
  287.                            DWORD Usage,
  288.                            D3DFORMAT Format,
  289.                            D3DPOOL Pool,
  290.                            IDirect3DTexture9 **ppTexture,
  291.                            HANDLE *pSharedHandle );
  292.  
  293. HRESULT WINAPI
  294. NineDevice9_CreateVolumeTexture( struct NineDevice9 *This,
  295.                                  UINT Width,
  296.                                  UINT Height,
  297.                                  UINT Depth,
  298.                                  UINT Levels,
  299.                                  DWORD Usage,
  300.                                  D3DFORMAT Format,
  301.                                  D3DPOOL Pool,
  302.                                  IDirect3DVolumeTexture9 **ppVolumeTexture,
  303.                                  HANDLE *pSharedHandle );
  304.  
  305. HRESULT WINAPI
  306. NineDevice9_CreateCubeTexture( struct NineDevice9 *This,
  307.                                UINT EdgeLength,
  308.                                UINT Levels,
  309.                                DWORD Usage,
  310.                                D3DFORMAT Format,
  311.                                D3DPOOL Pool,
  312.                                IDirect3DCubeTexture9 **ppCubeTexture,
  313.                                HANDLE *pSharedHandle );
  314.  
  315. HRESULT WINAPI
  316. NineDevice9_CreateVertexBuffer( struct NineDevice9 *This,
  317.                                 UINT Length,
  318.                                 DWORD Usage,
  319.                                 DWORD FVF,
  320.                                 D3DPOOL Pool,
  321.                                 IDirect3DVertexBuffer9 **ppVertexBuffer,
  322.                                 HANDLE *pSharedHandle );
  323.  
  324. HRESULT WINAPI
  325. NineDevice9_CreateIndexBuffer( struct NineDevice9 *This,
  326.                                UINT Length,
  327.                                DWORD Usage,
  328.                                D3DFORMAT Format,
  329.                                D3DPOOL Pool,
  330.                                IDirect3DIndexBuffer9 **ppIndexBuffer,
  331.                                HANDLE *pSharedHandle );
  332.  
  333. HRESULT WINAPI
  334. NineDevice9_CreateRenderTarget( struct NineDevice9 *This,
  335.                                 UINT Width,
  336.                                 UINT Height,
  337.                                 D3DFORMAT Format,
  338.                                 D3DMULTISAMPLE_TYPE MultiSample,
  339.                                 DWORD MultisampleQuality,
  340.                                 BOOL Lockable,
  341.                                 IDirect3DSurface9 **ppSurface,
  342.                                 HANDLE *pSharedHandle );
  343.  
  344. HRESULT WINAPI
  345. NineDevice9_CreateDepthStencilSurface( struct NineDevice9 *This,
  346.                                        UINT Width,
  347.                                        UINT Height,
  348.                                        D3DFORMAT Format,
  349.                                        D3DMULTISAMPLE_TYPE MultiSample,
  350.                                        DWORD MultisampleQuality,
  351.                                        BOOL Discard,
  352.                                        IDirect3DSurface9 **ppSurface,
  353.                                        HANDLE *pSharedHandle );
  354.  
  355. HRESULT WINAPI
  356. NineDevice9_UpdateSurface( struct NineDevice9 *This,
  357.                            IDirect3DSurface9 *pSourceSurface,
  358.                            const RECT *pSourceRect,
  359.                            IDirect3DSurface9 *pDestinationSurface,
  360.                            const POINT *pDestPoint );
  361.  
  362. HRESULT WINAPI
  363. NineDevice9_UpdateTexture( struct NineDevice9 *This,
  364.                            IDirect3DBaseTexture9 *pSourceTexture,
  365.                            IDirect3DBaseTexture9 *pDestinationTexture );
  366.  
  367. HRESULT WINAPI
  368. NineDevice9_GetRenderTargetData( struct NineDevice9 *This,
  369.                                  IDirect3DSurface9 *pRenderTarget,
  370.                                  IDirect3DSurface9 *pDestSurface );
  371.  
  372. HRESULT WINAPI
  373. NineDevice9_GetFrontBufferData( struct NineDevice9 *This,
  374.                                 UINT iSwapChain,
  375.                                 IDirect3DSurface9 *pDestSurface );
  376.  
  377. HRESULT WINAPI
  378. NineDevice9_StretchRect( struct NineDevice9 *This,
  379.                          IDirect3DSurface9 *pSourceSurface,
  380.                          const RECT *pSourceRect,
  381.                          IDirect3DSurface9 *pDestSurface,
  382.                          const RECT *pDestRect,
  383.                          D3DTEXTUREFILTERTYPE Filter );
  384.  
  385. HRESULT WINAPI
  386. NineDevice9_ColorFill( struct NineDevice9 *This,
  387.                        IDirect3DSurface9 *pSurface,
  388.                        const RECT *pRect,
  389.                        D3DCOLOR color );
  390.  
  391. HRESULT WINAPI
  392. NineDevice9_CreateOffscreenPlainSurface( struct NineDevice9 *This,
  393.                                          UINT Width,
  394.                                          UINT Height,
  395.                                          D3DFORMAT Format,
  396.                                          D3DPOOL Pool,
  397.                                          IDirect3DSurface9 **ppSurface,
  398.                                          HANDLE *pSharedHandle );
  399.  
  400. HRESULT WINAPI
  401. NineDevice9_SetRenderTarget( struct NineDevice9 *This,
  402.                              DWORD RenderTargetIndex,
  403.                              IDirect3DSurface9 *pRenderTarget );
  404.  
  405. HRESULT WINAPI
  406. NineDevice9_GetRenderTarget( struct NineDevice9 *This,
  407.                              DWORD RenderTargetIndex,
  408.                              IDirect3DSurface9 **ppRenderTarget );
  409.  
  410. HRESULT WINAPI
  411. NineDevice9_SetDepthStencilSurface( struct NineDevice9 *This,
  412.                                     IDirect3DSurface9 *pNewZStencil );
  413.  
  414. HRESULT WINAPI
  415. NineDevice9_GetDepthStencilSurface( struct NineDevice9 *This,
  416.                                     IDirect3DSurface9 **ppZStencilSurface );
  417.  
  418. HRESULT WINAPI
  419. NineDevice9_BeginScene( struct NineDevice9 *This );
  420.  
  421. HRESULT WINAPI
  422. NineDevice9_EndScene( struct NineDevice9 *This );
  423.  
  424. HRESULT WINAPI
  425. NineDevice9_Clear( struct NineDevice9 *This,
  426.                    DWORD Count,
  427.                    const D3DRECT *pRects,
  428.                    DWORD Flags,
  429.                    D3DCOLOR Color,
  430.                    float Z,
  431.                    DWORD Stencil );
  432.  
  433. HRESULT WINAPI
  434. NineDevice9_SetTransform( struct NineDevice9 *This,
  435.                           D3DTRANSFORMSTATETYPE State,
  436.                           const D3DMATRIX *pMatrix );
  437.  
  438. HRESULT WINAPI
  439. NineDevice9_GetTransform( struct NineDevice9 *This,
  440.                           D3DTRANSFORMSTATETYPE State,
  441.                           D3DMATRIX *pMatrix );
  442.  
  443. HRESULT WINAPI
  444. NineDevice9_MultiplyTransform( struct NineDevice9 *This,
  445.                                D3DTRANSFORMSTATETYPE State,
  446.                                const D3DMATRIX *pMatrix );
  447.  
  448. HRESULT WINAPI
  449. NineDevice9_SetViewport( struct NineDevice9 *This,
  450.                          const D3DVIEWPORT9 *pViewport );
  451.  
  452. HRESULT WINAPI
  453. NineDevice9_GetViewport( struct NineDevice9 *This,
  454.                          D3DVIEWPORT9 *pViewport );
  455.  
  456. HRESULT WINAPI
  457. NineDevice9_SetMaterial( struct NineDevice9 *This,
  458.                          const D3DMATERIAL9 *pMaterial );
  459.  
  460. HRESULT WINAPI
  461. NineDevice9_GetMaterial( struct NineDevice9 *This,
  462.                          D3DMATERIAL9 *pMaterial );
  463.  
  464. HRESULT WINAPI
  465. NineDevice9_SetLight( struct NineDevice9 *This,
  466.                       DWORD Index,
  467.                       const D3DLIGHT9 *pLight );
  468.  
  469. HRESULT WINAPI
  470. NineDevice9_GetLight( struct NineDevice9 *This,
  471.                       DWORD Index,
  472.                       D3DLIGHT9 *pLight );
  473.  
  474. HRESULT WINAPI
  475. NineDevice9_LightEnable( struct NineDevice9 *This,
  476.                          DWORD Index,
  477.                          BOOL Enable );
  478.  
  479. HRESULT WINAPI
  480. NineDevice9_GetLightEnable( struct NineDevice9 *This,
  481.                             DWORD Index,
  482.                             BOOL *pEnable );
  483.  
  484. HRESULT WINAPI
  485. NineDevice9_SetClipPlane( struct NineDevice9 *This,
  486.                           DWORD Index,
  487.                           const float *pPlane );
  488.  
  489. HRESULT WINAPI
  490. NineDevice9_GetClipPlane( struct NineDevice9 *This,
  491.                           DWORD Index,
  492.                           float *pPlane );
  493.  
  494. HRESULT WINAPI
  495. NineDevice9_SetRenderState( struct NineDevice9 *This,
  496.                             D3DRENDERSTATETYPE State,
  497.                             DWORD Value );
  498.  
  499. HRESULT WINAPI
  500. NineDevice9_GetRenderState( struct NineDevice9 *This,
  501.                             D3DRENDERSTATETYPE State,
  502.                             DWORD *pValue );
  503.  
  504. HRESULT WINAPI
  505. NineDevice9_CreateStateBlock( struct NineDevice9 *This,
  506.                               D3DSTATEBLOCKTYPE Type,
  507.                               IDirect3DStateBlock9 **ppSB );
  508.  
  509. HRESULT WINAPI
  510. NineDevice9_BeginStateBlock( struct NineDevice9 *This );
  511.  
  512. HRESULT WINAPI
  513. NineDevice9_EndStateBlock( struct NineDevice9 *This,
  514.                            IDirect3DStateBlock9 **ppSB );
  515.  
  516. HRESULT WINAPI
  517. NineDevice9_SetClipStatus( struct NineDevice9 *This,
  518.                            const D3DCLIPSTATUS9 *pClipStatus );
  519.  
  520. HRESULT WINAPI
  521. NineDevice9_GetClipStatus( struct NineDevice9 *This,
  522.                            D3DCLIPSTATUS9 *pClipStatus );
  523.  
  524. HRESULT WINAPI
  525. NineDevice9_GetTexture( struct NineDevice9 *This,
  526.                         DWORD Stage,
  527.                         IDirect3DBaseTexture9 **ppTexture );
  528.  
  529. HRESULT WINAPI
  530. NineDevice9_SetTexture( struct NineDevice9 *This,
  531.                         DWORD Stage,
  532.                         IDirect3DBaseTexture9 *pTexture );
  533.  
  534. HRESULT WINAPI
  535. NineDevice9_GetTextureStageState( struct NineDevice9 *This,
  536.                                   DWORD Stage,
  537.                                   D3DTEXTURESTAGESTATETYPE Type,
  538.                                   DWORD *pValue );
  539.  
  540. HRESULT WINAPI
  541. NineDevice9_SetTextureStageState( struct NineDevice9 *This,
  542.                                   DWORD Stage,
  543.                                   D3DTEXTURESTAGESTATETYPE Type,
  544.                                   DWORD Value );
  545.  
  546. HRESULT WINAPI
  547. NineDevice9_GetSamplerState( struct NineDevice9 *This,
  548.                              DWORD Sampler,
  549.                              D3DSAMPLERSTATETYPE Type,
  550.                              DWORD *pValue );
  551.  
  552. HRESULT WINAPI
  553. NineDevice9_SetSamplerState( struct NineDevice9 *This,
  554.                              DWORD Sampler,
  555.                              D3DSAMPLERSTATETYPE Type,
  556.                              DWORD Value );
  557.  
  558. HRESULT WINAPI
  559. NineDevice9_ValidateDevice( struct NineDevice9 *This,
  560.                             DWORD *pNumPasses );
  561.  
  562. HRESULT WINAPI
  563. NineDevice9_SetPaletteEntries( struct NineDevice9 *This,
  564.                                UINT PaletteNumber,
  565.                                const PALETTEENTRY *pEntries );
  566.  
  567. HRESULT WINAPI
  568. NineDevice9_GetPaletteEntries( struct NineDevice9 *This,
  569.                                UINT PaletteNumber,
  570.                                PALETTEENTRY *pEntries );
  571.  
  572. HRESULT WINAPI
  573. NineDevice9_SetCurrentTexturePalette( struct NineDevice9 *This,
  574.                                       UINT PaletteNumber );
  575.  
  576. HRESULT WINAPI
  577. NineDevice9_GetCurrentTexturePalette( struct NineDevice9 *This,
  578.                                       UINT *PaletteNumber );
  579.  
  580. HRESULT WINAPI
  581. NineDevice9_SetScissorRect( struct NineDevice9 *This,
  582.                             const RECT *pRect );
  583.  
  584. HRESULT WINAPI
  585. NineDevice9_GetScissorRect( struct NineDevice9 *This,
  586.                             RECT *pRect );
  587.  
  588. HRESULT WINAPI
  589. NineDevice9_SetSoftwareVertexProcessing( struct NineDevice9 *This,
  590.                                          BOOL bSoftware );
  591.  
  592. BOOL WINAPI
  593. NineDevice9_GetSoftwareVertexProcessing( struct NineDevice9 *This );
  594.  
  595. HRESULT WINAPI
  596. NineDevice9_SetNPatchMode( struct NineDevice9 *This,
  597.                            float nSegments );
  598.  
  599. float WINAPI
  600. NineDevice9_GetNPatchMode( struct NineDevice9 *This );
  601.  
  602. HRESULT WINAPI
  603. NineDevice9_DrawPrimitive( struct NineDevice9 *This,
  604.                            D3DPRIMITIVETYPE PrimitiveType,
  605.                            UINT StartVertex,
  606.                            UINT PrimitiveCount );
  607.  
  608. HRESULT WINAPI
  609. NineDevice9_DrawIndexedPrimitive( struct NineDevice9 *This,
  610.                                   D3DPRIMITIVETYPE PrimitiveType,
  611.                                   INT BaseVertexIndex,
  612.                                   UINT MinVertexIndex,
  613.                                   UINT NumVertices,
  614.                                   UINT startIndex,
  615.                                   UINT primCount );
  616.  
  617. HRESULT WINAPI
  618. NineDevice9_DrawPrimitiveUP( struct NineDevice9 *This,
  619.                              D3DPRIMITIVETYPE PrimitiveType,
  620.                              UINT PrimitiveCount,
  621.                              const void *pVertexStreamZeroData,
  622.                              UINT VertexStreamZeroStride );
  623.  
  624. HRESULT WINAPI
  625. NineDevice9_DrawIndexedPrimitiveUP( struct NineDevice9 *This,
  626.                                     D3DPRIMITIVETYPE PrimitiveType,
  627.                                     UINT MinVertexIndex,
  628.                                     UINT NumVertices,
  629.                                     UINT PrimitiveCount,
  630.                                     const void *pIndexData,
  631.                                     D3DFORMAT IndexDataFormat,
  632.                                     const void *pVertexStreamZeroData,
  633.                                     UINT VertexStreamZeroStride );
  634.  
  635. HRESULT WINAPI
  636. NineDevice9_ProcessVertices( struct NineDevice9 *This,
  637.                              UINT SrcStartIndex,
  638.                              UINT DestIndex,
  639.                              UINT VertexCount,
  640.                              IDirect3DVertexBuffer9 *pDestBuffer,
  641.                              IDirect3DVertexDeclaration9 *pVertexDecl,
  642.                              DWORD Flags );
  643.  
  644. HRESULT WINAPI
  645. NineDevice9_CreateVertexDeclaration( struct NineDevice9 *This,
  646.                                      const D3DVERTEXELEMENT9 *pVertexElements,
  647.                                      IDirect3DVertexDeclaration9 **ppDecl );
  648.  
  649. HRESULT WINAPI
  650. NineDevice9_SetVertexDeclaration( struct NineDevice9 *This,
  651.                                   IDirect3DVertexDeclaration9 *pDecl );
  652.  
  653. HRESULT WINAPI
  654. NineDevice9_GetVertexDeclaration( struct NineDevice9 *This,
  655.                                   IDirect3DVertexDeclaration9 **ppDecl );
  656.  
  657. HRESULT WINAPI
  658. NineDevice9_SetFVF( struct NineDevice9 *This,
  659.                     DWORD FVF );
  660.  
  661. HRESULT WINAPI
  662. NineDevice9_GetFVF( struct NineDevice9 *This,
  663.                     DWORD *pFVF );
  664.  
  665. HRESULT WINAPI
  666. NineDevice9_CreateVertexShader( struct NineDevice9 *This,
  667.                                 const DWORD *pFunction,
  668.                                 IDirect3DVertexShader9 **ppShader );
  669.  
  670. HRESULT WINAPI
  671. NineDevice9_SetVertexShader( struct NineDevice9 *This,
  672.                              IDirect3DVertexShader9 *pShader );
  673.  
  674. HRESULT WINAPI
  675. NineDevice9_GetVertexShader( struct NineDevice9 *This,
  676.                              IDirect3DVertexShader9 **ppShader );
  677.  
  678. HRESULT WINAPI
  679. NineDevice9_SetVertexShaderConstantF( struct NineDevice9 *This,
  680.                                       UINT StartRegister,
  681.                                       const float *pConstantData,
  682.                                       UINT Vector4fCount );
  683.  
  684. HRESULT WINAPI
  685. NineDevice9_GetVertexShaderConstantF( struct NineDevice9 *This,
  686.                                       UINT StartRegister,
  687.                                       float *pConstantData,
  688.                                       UINT Vector4fCount );
  689.  
  690. HRESULT WINAPI
  691. NineDevice9_SetVertexShaderConstantI( struct NineDevice9 *This,
  692.                                       UINT StartRegister,
  693.                                       const int *pConstantData,
  694.                                       UINT Vector4iCount );
  695.  
  696. HRESULT WINAPI
  697. NineDevice9_GetVertexShaderConstantI( struct NineDevice9 *This,
  698.                                       UINT StartRegister,
  699.                                       int *pConstantData,
  700.                                       UINT Vector4iCount );
  701.  
  702. HRESULT WINAPI
  703. NineDevice9_SetVertexShaderConstantB( struct NineDevice9 *This,
  704.                                       UINT StartRegister,
  705.                                       const BOOL *pConstantData,
  706.                                       UINT BoolCount );
  707.  
  708. HRESULT WINAPI
  709. NineDevice9_GetVertexShaderConstantB( struct NineDevice9 *This,
  710.                                       UINT StartRegister,
  711.                                       BOOL *pConstantData,
  712.                                       UINT BoolCount );
  713.  
  714. HRESULT WINAPI
  715. NineDevice9_SetStreamSource( struct NineDevice9 *This,
  716.                              UINT StreamNumber,
  717.                              IDirect3DVertexBuffer9 *pStreamData,
  718.                              UINT OffsetInBytes,
  719.                              UINT Stride );
  720.  
  721. HRESULT WINAPI
  722. NineDevice9_GetStreamSource( struct NineDevice9 *This,
  723.                              UINT StreamNumber,
  724.                              IDirect3DVertexBuffer9 **ppStreamData,
  725.                              UINT *pOffsetInBytes,
  726.                              UINT *pStride );
  727.  
  728. HRESULT WINAPI
  729. NineDevice9_SetStreamSourceFreq( struct NineDevice9 *This,
  730.                                  UINT StreamNumber,
  731.                                  UINT Setting );
  732.  
  733. HRESULT WINAPI
  734. NineDevice9_GetStreamSourceFreq( struct NineDevice9 *This,
  735.                                  UINT StreamNumber,
  736.                                  UINT *pSetting );
  737.  
  738. HRESULT WINAPI
  739. NineDevice9_SetIndices( struct NineDevice9 *This,
  740.                         IDirect3DIndexBuffer9 *pIndexData );
  741.  
  742. HRESULT WINAPI
  743. NineDevice9_GetIndices( struct NineDevice9 *This,
  744.                         IDirect3DIndexBuffer9 **ppIndexData /*,
  745.                         UINT *pBaseVertexIndex */ );
  746.  
  747. HRESULT WINAPI
  748. NineDevice9_CreatePixelShader( struct NineDevice9 *This,
  749.                                const DWORD *pFunction,
  750.                                IDirect3DPixelShader9 **ppShader );
  751.  
  752. HRESULT WINAPI
  753. NineDevice9_SetPixelShader( struct NineDevice9 *This,
  754.                             IDirect3DPixelShader9 *pShader );
  755.  
  756. HRESULT WINAPI
  757. NineDevice9_GetPixelShader( struct NineDevice9 *This,
  758.                             IDirect3DPixelShader9 **ppShader );
  759.  
  760. HRESULT WINAPI
  761. NineDevice9_SetPixelShaderConstantF( struct NineDevice9 *This,
  762.                                      UINT StartRegister,
  763.                                      const float *pConstantData,
  764.                                      UINT Vector4fCount );
  765.  
  766. HRESULT WINAPI
  767. NineDevice9_GetPixelShaderConstantF( struct NineDevice9 *This,
  768.                                      UINT StartRegister,
  769.                                      float *pConstantData,
  770.                                      UINT Vector4fCount );
  771.  
  772. HRESULT WINAPI
  773. NineDevice9_SetPixelShaderConstantI( struct NineDevice9 *This,
  774.                                      UINT StartRegister,
  775.                                      const int *pConstantData,
  776.                                      UINT Vector4iCount );
  777.  
  778. HRESULT WINAPI
  779. NineDevice9_GetPixelShaderConstantI( struct NineDevice9 *This,
  780.                                      UINT StartRegister,
  781.                                      int *pConstantData,
  782.                                      UINT Vector4iCount );
  783.  
  784. HRESULT WINAPI
  785. NineDevice9_SetPixelShaderConstantB( struct NineDevice9 *This,
  786.                                      UINT StartRegister,
  787.                                      const BOOL *pConstantData,
  788.                                      UINT BoolCount );
  789.  
  790. HRESULT WINAPI
  791. NineDevice9_GetPixelShaderConstantB( struct NineDevice9 *This,
  792.                                      UINT StartRegister,
  793.                                      BOOL *pConstantData,
  794.                                      UINT BoolCount );
  795.  
  796. HRESULT WINAPI
  797. NineDevice9_DrawRectPatch( struct NineDevice9 *This,
  798.                            UINT Handle,
  799.                            const float *pNumSegs,
  800.                            const D3DRECTPATCH_INFO *pRectPatchInfo );
  801.  
  802. HRESULT WINAPI
  803. NineDevice9_DrawTriPatch( struct NineDevice9 *This,
  804.                           UINT Handle,
  805.                           const float *pNumSegs,
  806.                           const D3DTRIPATCH_INFO *pTriPatchInfo );
  807.  
  808. HRESULT WINAPI
  809. NineDevice9_DeletePatch( struct NineDevice9 *This,
  810.                          UINT Handle );
  811.  
  812. HRESULT WINAPI
  813. NineDevice9_CreateQuery( struct NineDevice9 *This,
  814.                          D3DQUERYTYPE Type,
  815.                          IDirect3DQuery9 **ppQuery );
  816.  
  817. #endif /* _NINE_DEVICE9_H_ */
  818.