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