xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/nine/vertexbuffer9.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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