1 /*
2 * Copyright 2011 Joakim Sindholt <[email protected]>
3 * SPDX-License-Identifier: MIT
4 */
5
6 #include "vertexbuffer9.h"
7 #include "device9.h"
8 #include "nine_helpers.h"
9 #include "nine_pipe.h"
10
11 #include "pipe/p_screen.h"
12 #include "pipe/p_context.h"
13 #include "pipe/p_state.h"
14 #include "pipe/p_defines.h"
15 #include "util/format/u_formats.h"
16 #include "util/box.h"
17
18 #define DBG_CHANNEL DBG_VERTEXBUFFER
19
20 HRESULT
NineVertexBuffer9_ctor(struct NineVertexBuffer9 * This,struct NineUnknownParams * pParams,D3DVERTEXBUFFER_DESC * pDesc)21 NineVertexBuffer9_ctor( struct NineVertexBuffer9 *This,
22 struct NineUnknownParams *pParams,
23 D3DVERTEXBUFFER_DESC *pDesc )
24 {
25 HRESULT hr;
26
27 DBG("This=%p Size=0x%x Usage=%x Pool=%u\n", This,
28 pDesc->Size, pDesc->Usage, pDesc->Pool);
29
30 hr = NineBuffer9_ctor(&This->base, pParams, D3DRTYPE_VERTEXBUFFER,
31 pDesc->Usage, pDesc->Size, pDesc->Pool);
32 if (FAILED(hr))
33 return hr;
34
35 pDesc->Type = D3DRTYPE_VERTEXBUFFER;
36 pDesc->Format = D3DFMT_VERTEXDATA;
37 This->desc = *pDesc;
38
39 return D3D_OK;
40 }
41
42 void
NineVertexBuffer9_dtor(struct NineVertexBuffer9 * This)43 NineVertexBuffer9_dtor( struct NineVertexBuffer9 *This )
44 {
45 NineBuffer9_dtor(&This->base);
46 }
47
48 struct pipe_resource *
NineVertexBuffer9_GetResource(struct NineVertexBuffer9 * This,unsigned * offset)49 NineVertexBuffer9_GetResource( struct NineVertexBuffer9 *This, unsigned *offset )
50 {
51 return NineBuffer9_GetResource(&This->base, offset);
52 }
53
54 HRESULT NINE_WINAPI
NineVertexBuffer9_Lock(struct NineVertexBuffer9 * This,UINT OffsetToLock,UINT SizeToLock,void ** ppbData,DWORD Flags)55 NineVertexBuffer9_Lock( struct NineVertexBuffer9 *This,
56 UINT OffsetToLock,
57 UINT SizeToLock,
58 void **ppbData,
59 DWORD Flags )
60 {
61 return NineBuffer9_Lock(&This->base, OffsetToLock, SizeToLock, ppbData, Flags);
62 }
63
64 HRESULT NINE_WINAPI
NineVertexBuffer9_Unlock(struct NineVertexBuffer9 * This)65 NineVertexBuffer9_Unlock( struct NineVertexBuffer9 *This )
66 {
67 return NineBuffer9_Unlock(&This->base);
68 }
69
70 HRESULT NINE_WINAPI
NineVertexBuffer9_GetDesc(struct NineVertexBuffer9 * This,D3DVERTEXBUFFER_DESC * pDesc)71 NineVertexBuffer9_GetDesc( struct NineVertexBuffer9 *This,
72 D3DVERTEXBUFFER_DESC *pDesc )
73 {
74 user_assert(pDesc, E_POINTER);
75 *pDesc = This->desc;
76 return D3D_OK;
77 }
78
79 IDirect3DVertexBuffer9Vtbl NineVertexBuffer9_vtable = {
80 (void *)NineUnknown_QueryInterface,
81 (void *)NineUnknown_AddRef,
82 (void *)NineUnknown_Release,
83 (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
84 (void *)NineUnknown_SetPrivateData,
85 (void *)NineUnknown_GetPrivateData,
86 (void *)NineUnknown_FreePrivateData,
87 (void *)NineResource9_SetPriority,
88 (void *)NineResource9_GetPriority,
89 (void *)NineResource9_PreLoad,
90 (void *)NineResource9_GetType,
91 (void *)NineVertexBuffer9_Lock,
92 (void *)NineVertexBuffer9_Unlock,
93 (void *)NineVertexBuffer9_GetDesc
94 };
95
96 static const GUID *NineVertexBuffer9_IIDs[] = {
97 &IID_IDirect3DVertexBuffer9,
98 &IID_IDirect3DResource9,
99 &IID_IUnknown,
100 NULL
101 };
102
103 HRESULT
NineVertexBuffer9_new(struct NineDevice9 * pDevice,D3DVERTEXBUFFER_DESC * pDesc,struct NineVertexBuffer9 ** ppOut)104 NineVertexBuffer9_new( struct NineDevice9 *pDevice,
105 D3DVERTEXBUFFER_DESC *pDesc,
106 struct NineVertexBuffer9 **ppOut )
107 {
108 NINE_DEVICE_CHILD_NEW(VertexBuffer9, ppOut, /* args */ pDevice, pDesc);
109 }
110