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