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