xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/nine/indexbuffer9.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2011 Joakim Sindholt <[email protected]>
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #include "indexbuffer9.h"
7*61046927SAndroid Build Coastguard Worker #include "device9.h"
8*61046927SAndroid Build Coastguard Worker #include "nine_helpers.h"
9*61046927SAndroid Build Coastguard Worker #include "nine_pipe.h"
10*61046927SAndroid Build Coastguard Worker #include "nine_dump.h"
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker #include "pipe/p_screen.h"
13*61046927SAndroid Build Coastguard Worker #include "pipe/p_context.h"
14*61046927SAndroid Build Coastguard Worker #include "pipe/p_state.h"
15*61046927SAndroid Build Coastguard Worker #include "pipe/p_defines.h"
16*61046927SAndroid Build Coastguard Worker #include "util/format/u_formats.h"
17*61046927SAndroid Build Coastguard Worker #include "util/box.h"
18*61046927SAndroid Build Coastguard Worker 
19*61046927SAndroid Build Coastguard Worker #define DBG_CHANNEL DBG_INDEXBUFFER
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker HRESULT
NineIndexBuffer9_ctor(struct NineIndexBuffer9 * This,struct NineUnknownParams * pParams,D3DINDEXBUFFER_DESC * pDesc)22*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_ctor( struct NineIndexBuffer9 *This,
23*61046927SAndroid Build Coastguard Worker                        struct NineUnknownParams *pParams,
24*61046927SAndroid Build Coastguard Worker                        D3DINDEXBUFFER_DESC *pDesc )
25*61046927SAndroid Build Coastguard Worker {
26*61046927SAndroid Build Coastguard Worker     HRESULT hr;
27*61046927SAndroid Build Coastguard Worker     DBG("This=%p pParams=%p pDesc=%p Usage=%s\n",
28*61046927SAndroid Build Coastguard Worker          This, pParams, pDesc, nine_D3DUSAGE_to_str(pDesc->Usage));
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker     hr = NineBuffer9_ctor(&This->base, pParams, D3DRTYPE_INDEXBUFFER,
31*61046927SAndroid Build Coastguard Worker                           pDesc->Usage, pDesc->Size, pDesc->Pool);
32*61046927SAndroid Build Coastguard Worker     if (FAILED(hr))
33*61046927SAndroid Build Coastguard Worker         return hr;
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker     switch (pDesc->Format) {
36*61046927SAndroid Build Coastguard Worker     case D3DFMT_INDEX16: This->index_size = 2; break;
37*61046927SAndroid Build Coastguard Worker     case D3DFMT_INDEX32: This->index_size = 4; break;
38*61046927SAndroid Build Coastguard Worker     default:
39*61046927SAndroid Build Coastguard Worker         user_assert(!"Invalid index format.", D3DERR_INVALIDCALL);
40*61046927SAndroid Build Coastguard Worker         break;
41*61046927SAndroid Build Coastguard Worker     }
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker     pDesc->Type = D3DRTYPE_INDEXBUFFER;
44*61046927SAndroid Build Coastguard Worker     This->desc = *pDesc;
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker     return D3D_OK;
47*61046927SAndroid Build Coastguard Worker }
48*61046927SAndroid Build Coastguard Worker 
49*61046927SAndroid Build Coastguard Worker void
NineIndexBuffer9_dtor(struct NineIndexBuffer9 * This)50*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_dtor( struct NineIndexBuffer9 *This )
51*61046927SAndroid Build Coastguard Worker {
52*61046927SAndroid Build Coastguard Worker     NineBuffer9_dtor(&This->base);
53*61046927SAndroid Build Coastguard Worker }
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker struct pipe_resource *
NineIndexBuffer9_GetBuffer(struct NineIndexBuffer9 * This,unsigned * offset)56*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_GetBuffer( struct NineIndexBuffer9 *This, unsigned *offset )
57*61046927SAndroid Build Coastguard Worker {
58*61046927SAndroid Build Coastguard Worker     /* The resource may change */
59*61046927SAndroid Build Coastguard Worker     return NineBuffer9_GetResource(&This->base, offset);
60*61046927SAndroid Build Coastguard Worker }
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineIndexBuffer9_Lock(struct NineIndexBuffer9 * This,UINT OffsetToLock,UINT SizeToLock,void ** ppbData,DWORD Flags)63*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_Lock( struct NineIndexBuffer9 *This,
64*61046927SAndroid Build Coastguard Worker                        UINT OffsetToLock,
65*61046927SAndroid Build Coastguard Worker                        UINT SizeToLock,
66*61046927SAndroid Build Coastguard Worker                        void **ppbData,
67*61046927SAndroid Build Coastguard Worker                        DWORD Flags )
68*61046927SAndroid Build Coastguard Worker {
69*61046927SAndroid Build Coastguard Worker     return NineBuffer9_Lock(&This->base, OffsetToLock, SizeToLock, ppbData, Flags);
70*61046927SAndroid Build Coastguard Worker }
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineIndexBuffer9_Unlock(struct NineIndexBuffer9 * This)73*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_Unlock( struct NineIndexBuffer9 *This )
74*61046927SAndroid Build Coastguard Worker {
75*61046927SAndroid Build Coastguard Worker     return NineBuffer9_Unlock(&This->base);
76*61046927SAndroid Build Coastguard Worker }
77*61046927SAndroid Build Coastguard Worker 
78*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineIndexBuffer9_GetDesc(struct NineIndexBuffer9 * This,D3DINDEXBUFFER_DESC * pDesc)79*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_GetDesc( struct NineIndexBuffer9 *This,
80*61046927SAndroid Build Coastguard Worker                           D3DINDEXBUFFER_DESC *pDesc )
81*61046927SAndroid Build Coastguard Worker {
82*61046927SAndroid Build Coastguard Worker     user_assert(pDesc, E_POINTER);
83*61046927SAndroid Build Coastguard Worker     *pDesc = This->desc;
84*61046927SAndroid Build Coastguard Worker     return D3D_OK;
85*61046927SAndroid Build Coastguard Worker }
86*61046927SAndroid Build Coastguard Worker 
87*61046927SAndroid Build Coastguard Worker IDirect3DIndexBuffer9Vtbl NineIndexBuffer9_vtable = {
88*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_QueryInterface,
89*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_AddRef,
90*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_Release,
91*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
92*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_SetPrivateData,
93*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_GetPrivateData,
94*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_FreePrivateData,
95*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_SetPriority,
96*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_GetPriority,
97*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_PreLoad,
98*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_GetType,
99*61046927SAndroid Build Coastguard Worker     (void *)NineIndexBuffer9_Lock,
100*61046927SAndroid Build Coastguard Worker     (void *)NineIndexBuffer9_Unlock,
101*61046927SAndroid Build Coastguard Worker     (void *)NineIndexBuffer9_GetDesc
102*61046927SAndroid Build Coastguard Worker };
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker static const GUID *NineIndexBuffer9_IIDs[] = {
105*61046927SAndroid Build Coastguard Worker     &IID_IDirect3DIndexBuffer9,
106*61046927SAndroid Build Coastguard Worker     &IID_IDirect3DResource9,
107*61046927SAndroid Build Coastguard Worker     &IID_IUnknown,
108*61046927SAndroid Build Coastguard Worker     NULL
109*61046927SAndroid Build Coastguard Worker };
110*61046927SAndroid Build Coastguard Worker 
111*61046927SAndroid Build Coastguard Worker HRESULT
NineIndexBuffer9_new(struct NineDevice9 * pDevice,D3DINDEXBUFFER_DESC * pDesc,struct NineIndexBuffer9 ** ppOut)112*61046927SAndroid Build Coastguard Worker NineIndexBuffer9_new( struct NineDevice9 *pDevice,
113*61046927SAndroid Build Coastguard Worker                       D3DINDEXBUFFER_DESC *pDesc,
114*61046927SAndroid Build Coastguard Worker                       struct NineIndexBuffer9 **ppOut )
115*61046927SAndroid Build Coastguard Worker {
116*61046927SAndroid Build Coastguard Worker     NINE_DEVICE_CHILD_NEW(IndexBuffer9, ppOut, /* args */ pDevice, pDesc);
117*61046927SAndroid Build Coastguard Worker }
118