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