xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/nine/volumetexture9.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 "device9.h"
7*61046927SAndroid Build Coastguard Worker #include "volumetexture9.h"
8*61046927SAndroid Build Coastguard Worker #include "nine_helpers.h"
9*61046927SAndroid Build Coastguard Worker #include "nine_pipe.h"
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #define DBG_CHANNEL DBG_VOLUMETEXTURE
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker static HRESULT
NineVolumeTexture9_ctor(struct NineVolumeTexture9 * This,struct NineUnknownParams * pParams,UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,HANDLE * pSharedHandle)14*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_ctor( struct NineVolumeTexture9 *This,
15*61046927SAndroid Build Coastguard Worker                          struct NineUnknownParams *pParams,
16*61046927SAndroid Build Coastguard Worker                          UINT Width, UINT Height, UINT Depth, UINT Levels,
17*61046927SAndroid Build Coastguard Worker                          DWORD Usage,
18*61046927SAndroid Build Coastguard Worker                          D3DFORMAT Format,
19*61046927SAndroid Build Coastguard Worker                          D3DPOOL Pool,
20*61046927SAndroid Build Coastguard Worker                          HANDLE *pSharedHandle )
21*61046927SAndroid Build Coastguard Worker {
22*61046927SAndroid Build Coastguard Worker     struct pipe_resource *info = &This->base.base.info;
23*61046927SAndroid Build Coastguard Worker     struct pipe_screen *screen = pParams->device->screen;
24*61046927SAndroid Build Coastguard Worker     enum pipe_format pf;
25*61046927SAndroid Build Coastguard Worker     unsigned l;
26*61046927SAndroid Build Coastguard Worker     D3DVOLUME_DESC voldesc;
27*61046927SAndroid Build Coastguard Worker     HRESULT hr;
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker     DBG("This=%p pParams=%p Width=%u Height=%u Depth=%u Levels=%u "
30*61046927SAndroid Build Coastguard Worker         "Usage=%d Format=%d Pool=%d pSharedHandle=%p\n",
31*61046927SAndroid Build Coastguard Worker         This, pParams, Width, Height, Depth, Levels,
32*61046927SAndroid Build Coastguard Worker         Usage, Format, Pool, pSharedHandle);
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker     user_assert(Width && Height && Depth, D3DERR_INVALIDCALL);
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker     /* user_assert(!pSharedHandle || Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL); */
37*61046927SAndroid Build Coastguard Worker     user_assert(!pSharedHandle, D3DERR_INVALIDCALL); /* TODO */
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker     /* An IDirect3DVolume9 cannot be bound as a render target can it ? */
40*61046927SAndroid Build Coastguard Worker     user_assert(!(Usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)),
41*61046927SAndroid Build Coastguard Worker                 D3DERR_INVALIDCALL);
42*61046927SAndroid Build Coastguard Worker     user_assert(!(Usage & D3DUSAGE_AUTOGENMIPMAP), D3DERR_INVALIDCALL);
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker     pf = d3d9_to_pipe_format_checked(screen, Format, PIPE_TEXTURE_3D, 0,
45*61046927SAndroid Build Coastguard Worker                                      PIPE_BIND_SAMPLER_VIEW, false,
46*61046927SAndroid Build Coastguard Worker                                      Pool == D3DPOOL_SCRATCH);
47*61046927SAndroid Build Coastguard Worker 
48*61046927SAndroid Build Coastguard Worker     if (pf == PIPE_FORMAT_NONE)
49*61046927SAndroid Build Coastguard Worker         return D3DERR_INVALIDCALL;
50*61046927SAndroid Build Coastguard Worker 
51*61046927SAndroid Build Coastguard Worker     /* We support ATI1 and ATI2 hacks only for 2D and Cube textures */
52*61046927SAndroid Build Coastguard Worker     if (Format == D3DFMT_ATI1 || Format == D3DFMT_ATI2)
53*61046927SAndroid Build Coastguard Worker         return D3DERR_INVALIDCALL;
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker     if (compressed_format(Format)) {
56*61046927SAndroid Build Coastguard Worker         const unsigned w = util_format_get_blockwidth(pf);
57*61046927SAndroid Build Coastguard Worker         const unsigned h = util_format_get_blockheight(pf);
58*61046927SAndroid Build Coastguard Worker         /* Compressed formats are not compressed on depth component */
59*61046927SAndroid Build Coastguard Worker         user_assert(!(Width % w) && !(Height % h), D3DERR_INVALIDCALL);
60*61046927SAndroid Build Coastguard Worker     }
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker     info->screen = pParams->device->screen;
63*61046927SAndroid Build Coastguard Worker     info->target = PIPE_TEXTURE_3D;
64*61046927SAndroid Build Coastguard Worker     info->format = pf;
65*61046927SAndroid Build Coastguard Worker     info->width0 = Width;
66*61046927SAndroid Build Coastguard Worker     info->height0 = Height;
67*61046927SAndroid Build Coastguard Worker     info->depth0 = Depth;
68*61046927SAndroid Build Coastguard Worker     if (Levels)
69*61046927SAndroid Build Coastguard Worker         info->last_level = Levels - 1;
70*61046927SAndroid Build Coastguard Worker     else
71*61046927SAndroid Build Coastguard Worker         info->last_level = util_logbase2(MAX2(MAX2(Width, Height), Depth));
72*61046927SAndroid Build Coastguard Worker     info->array_size = 1;
73*61046927SAndroid Build Coastguard Worker     info->nr_samples = 0;
74*61046927SAndroid Build Coastguard Worker     info->nr_storage_samples = 0;
75*61046927SAndroid Build Coastguard Worker     info->bind = PIPE_BIND_SAMPLER_VIEW;
76*61046927SAndroid Build Coastguard Worker     info->usage = PIPE_USAGE_DEFAULT;
77*61046927SAndroid Build Coastguard Worker     info->flags = 0;
78*61046927SAndroid Build Coastguard Worker 
79*61046927SAndroid Build Coastguard Worker     if (Usage & D3DUSAGE_DYNAMIC) {
80*61046927SAndroid Build Coastguard Worker         info->usage = PIPE_USAGE_DYNAMIC;
81*61046927SAndroid Build Coastguard Worker     }
82*61046927SAndroid Build Coastguard Worker     if (Usage & D3DUSAGE_SOFTWAREPROCESSING)
83*61046927SAndroid Build Coastguard Worker         DBG("Application asked for Software Vertex Processing, "
84*61046927SAndroid Build Coastguard Worker             "but this is unimplemented\n");
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker     This->base.pstype = 3;
87*61046927SAndroid Build Coastguard Worker 
88*61046927SAndroid Build Coastguard Worker     hr = NineBaseTexture9_ctor(&This->base, pParams, NULL,
89*61046927SAndroid Build Coastguard Worker                                D3DRTYPE_VOLUMETEXTURE, Format, Pool, Usage);
90*61046927SAndroid Build Coastguard Worker     if (FAILED(hr))
91*61046927SAndroid Build Coastguard Worker         return hr;
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker     This->volumes = CALLOC(This->base.level_count, sizeof(*This->volumes));
94*61046927SAndroid Build Coastguard Worker     if (!This->volumes)
95*61046927SAndroid Build Coastguard Worker         return E_OUTOFMEMORY;
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker     voldesc.Format = Format;
98*61046927SAndroid Build Coastguard Worker     voldesc.Type = D3DRTYPE_VOLUME;
99*61046927SAndroid Build Coastguard Worker     voldesc.Usage = Usage;
100*61046927SAndroid Build Coastguard Worker     voldesc.Pool = Pool;
101*61046927SAndroid Build Coastguard Worker     for (l = 0; l < This->base.level_count; ++l) {
102*61046927SAndroid Build Coastguard Worker         voldesc.Width = u_minify(Width, l);
103*61046927SAndroid Build Coastguard Worker         voldesc.Height = u_minify(Height, l);
104*61046927SAndroid Build Coastguard Worker         voldesc.Depth = u_minify(Depth, l);
105*61046927SAndroid Build Coastguard Worker 
106*61046927SAndroid Build Coastguard Worker         hr = NineVolume9_new(This->base.base.base.device, NineUnknown(This),
107*61046927SAndroid Build Coastguard Worker                              This->base.base.resource, l,
108*61046927SAndroid Build Coastguard Worker                              &voldesc, &This->volumes[l]);
109*61046927SAndroid Build Coastguard Worker         if (FAILED(hr))
110*61046927SAndroid Build Coastguard Worker             return hr;
111*61046927SAndroid Build Coastguard Worker     }
112*61046927SAndroid Build Coastguard Worker 
113*61046927SAndroid Build Coastguard Worker     /* Textures start initially dirty */
114*61046927SAndroid Build Coastguard Worker     NineVolumeTexture9_AddDirtyBox(This, NULL);
115*61046927SAndroid Build Coastguard Worker 
116*61046927SAndroid Build Coastguard Worker     return D3D_OK;
117*61046927SAndroid Build Coastguard Worker }
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker static void
NineVolumeTexture9_dtor(struct NineVolumeTexture9 * This)120*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_dtor( struct NineVolumeTexture9 *This )
121*61046927SAndroid Build Coastguard Worker {
122*61046927SAndroid Build Coastguard Worker     unsigned l;
123*61046927SAndroid Build Coastguard Worker 
124*61046927SAndroid Build Coastguard Worker     DBG("This=%p\n", This);
125*61046927SAndroid Build Coastguard Worker 
126*61046927SAndroid Build Coastguard Worker     if (This->volumes) {
127*61046927SAndroid Build Coastguard Worker         for (l = 0; l < This->base.level_count; ++l)
128*61046927SAndroid Build Coastguard Worker             if (This->volumes[l])
129*61046927SAndroid Build Coastguard Worker                 NineUnknown_Destroy(&This->volumes[l]->base);
130*61046927SAndroid Build Coastguard Worker         FREE(This->volumes);
131*61046927SAndroid Build Coastguard Worker     }
132*61046927SAndroid Build Coastguard Worker 
133*61046927SAndroid Build Coastguard Worker     NineBaseTexture9_dtor(&This->base);
134*61046927SAndroid Build Coastguard Worker }
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineVolumeTexture9_GetLevelDesc(struct NineVolumeTexture9 * This,UINT Level,D3DVOLUME_DESC * pDesc)137*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_GetLevelDesc( struct NineVolumeTexture9 *This,
138*61046927SAndroid Build Coastguard Worker                                  UINT Level,
139*61046927SAndroid Build Coastguard Worker                                  D3DVOLUME_DESC *pDesc )
140*61046927SAndroid Build Coastguard Worker {
141*61046927SAndroid Build Coastguard Worker     user_assert(Level < This->base.level_count, D3DERR_INVALIDCALL);
142*61046927SAndroid Build Coastguard Worker 
143*61046927SAndroid Build Coastguard Worker     *pDesc = This->volumes[Level]->desc;
144*61046927SAndroid Build Coastguard Worker 
145*61046927SAndroid Build Coastguard Worker     return D3D_OK;
146*61046927SAndroid Build Coastguard Worker }
147*61046927SAndroid Build Coastguard Worker 
148*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineVolumeTexture9_GetVolumeLevel(struct NineVolumeTexture9 * This,UINT Level,IDirect3DVolume9 ** ppVolumeLevel)149*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_GetVolumeLevel( struct NineVolumeTexture9 *This,
150*61046927SAndroid Build Coastguard Worker                                    UINT Level,
151*61046927SAndroid Build Coastguard Worker                                    IDirect3DVolume9 **ppVolumeLevel )
152*61046927SAndroid Build Coastguard Worker {
153*61046927SAndroid Build Coastguard Worker     user_assert(Level < This->base.level_count, D3DERR_INVALIDCALL);
154*61046927SAndroid Build Coastguard Worker 
155*61046927SAndroid Build Coastguard Worker     NineUnknown_AddRef(NineUnknown(This->volumes[Level]));
156*61046927SAndroid Build Coastguard Worker     *ppVolumeLevel = (IDirect3DVolume9 *)This->volumes[Level];
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker     return D3D_OK;
159*61046927SAndroid Build Coastguard Worker }
160*61046927SAndroid Build Coastguard Worker 
161*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineVolumeTexture9_LockBox(struct NineVolumeTexture9 * This,UINT Level,D3DLOCKED_BOX * pLockedVolume,const D3DBOX * pBox,DWORD Flags)162*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_LockBox( struct NineVolumeTexture9 *This,
163*61046927SAndroid Build Coastguard Worker                             UINT Level,
164*61046927SAndroid Build Coastguard Worker                             D3DLOCKED_BOX *pLockedVolume,
165*61046927SAndroid Build Coastguard Worker                             const D3DBOX *pBox,
166*61046927SAndroid Build Coastguard Worker                             DWORD Flags )
167*61046927SAndroid Build Coastguard Worker {
168*61046927SAndroid Build Coastguard Worker     DBG("This=%p Level=%u pLockedVolume=%p pBox=%p Flags=%d\n",
169*61046927SAndroid Build Coastguard Worker         This, Level, pLockedVolume, pBox, Flags);
170*61046927SAndroid Build Coastguard Worker 
171*61046927SAndroid Build Coastguard Worker     user_assert(Level < This->base.level_count, D3DERR_INVALIDCALL);
172*61046927SAndroid Build Coastguard Worker 
173*61046927SAndroid Build Coastguard Worker     return NineVolume9_LockBox(This->volumes[Level], pLockedVolume, pBox,
174*61046927SAndroid Build Coastguard Worker                                Flags);
175*61046927SAndroid Build Coastguard Worker }
176*61046927SAndroid Build Coastguard Worker 
177*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineVolumeTexture9_UnlockBox(struct NineVolumeTexture9 * This,UINT Level)178*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_UnlockBox( struct NineVolumeTexture9 *This,
179*61046927SAndroid Build Coastguard Worker                               UINT Level )
180*61046927SAndroid Build Coastguard Worker {
181*61046927SAndroid Build Coastguard Worker     DBG("This=%p Level=%u\n", This, Level);
182*61046927SAndroid Build Coastguard Worker 
183*61046927SAndroid Build Coastguard Worker     user_assert(Level < This->base.level_count, D3DERR_INVALIDCALL);
184*61046927SAndroid Build Coastguard Worker 
185*61046927SAndroid Build Coastguard Worker     return NineVolume9_UnlockBox(This->volumes[Level]);
186*61046927SAndroid Build Coastguard Worker }
187*61046927SAndroid Build Coastguard Worker 
188*61046927SAndroid Build Coastguard Worker HRESULT NINE_WINAPI
NineVolumeTexture9_AddDirtyBox(struct NineVolumeTexture9 * This,const D3DBOX * pDirtyBox)189*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_AddDirtyBox( struct NineVolumeTexture9 *This,
190*61046927SAndroid Build Coastguard Worker                                 const D3DBOX *pDirtyBox )
191*61046927SAndroid Build Coastguard Worker {
192*61046927SAndroid Build Coastguard Worker     DBG("This=%p pDirtybox=%p\n", This, pDirtyBox);
193*61046927SAndroid Build Coastguard Worker 
194*61046927SAndroid Build Coastguard Worker     if (This->base.base.pool == D3DPOOL_DEFAULT) {
195*61046927SAndroid Build Coastguard Worker         return D3D_OK;
196*61046927SAndroid Build Coastguard Worker     }
197*61046927SAndroid Build Coastguard Worker 
198*61046927SAndroid Build Coastguard Worker     if (This->base.base.pool == D3DPOOL_MANAGED) {
199*61046927SAndroid Build Coastguard Worker         This->base.managed.dirty = true;
200*61046927SAndroid Build Coastguard Worker         BASETEX_REGISTER_UPDATE(&This->base);
201*61046927SAndroid Build Coastguard Worker     }
202*61046927SAndroid Build Coastguard Worker 
203*61046927SAndroid Build Coastguard Worker     if (!pDirtyBox) {
204*61046927SAndroid Build Coastguard Worker         This->dirty_box.x = 0;
205*61046927SAndroid Build Coastguard Worker         This->dirty_box.y = 0;
206*61046927SAndroid Build Coastguard Worker         This->dirty_box.z = 0;
207*61046927SAndroid Build Coastguard Worker         This->dirty_box.width = This->base.base.info.width0;
208*61046927SAndroid Build Coastguard Worker         This->dirty_box.height = This->base.base.info.height0;
209*61046927SAndroid Build Coastguard Worker         This->dirty_box.depth = This->base.base.info.depth0;
210*61046927SAndroid Build Coastguard Worker     } else {
211*61046927SAndroid Build Coastguard Worker         if (This->dirty_box.width == 0) {
212*61046927SAndroid Build Coastguard Worker             d3dbox_to_pipe_box(&This->dirty_box, pDirtyBox);
213*61046927SAndroid Build Coastguard Worker         } else {
214*61046927SAndroid Build Coastguard Worker             struct pipe_box box;
215*61046927SAndroid Build Coastguard Worker             d3dbox_to_pipe_box(&box, pDirtyBox);
216*61046927SAndroid Build Coastguard Worker             u_box_union_3d(&This->dirty_box, &This->dirty_box, &box);
217*61046927SAndroid Build Coastguard Worker         }
218*61046927SAndroid Build Coastguard Worker         This->dirty_box.x = MAX2(This->dirty_box.x, 0);
219*61046927SAndroid Build Coastguard Worker         This->dirty_box.y = MAX2(This->dirty_box.y, 0);
220*61046927SAndroid Build Coastguard Worker         This->dirty_box.z = MAX2(This->dirty_box.z, 0);
221*61046927SAndroid Build Coastguard Worker         This->dirty_box.width = MIN2(This->dirty_box.width,
222*61046927SAndroid Build Coastguard Worker                                      This->base.base.info.width0 - This->dirty_box.x);
223*61046927SAndroid Build Coastguard Worker         This->dirty_box.height = MIN2(This->dirty_box.height,
224*61046927SAndroid Build Coastguard Worker                                      This->base.base.info.height0 - This->dirty_box.y);
225*61046927SAndroid Build Coastguard Worker         This->dirty_box.depth = MIN2(This->dirty_box.depth,
226*61046927SAndroid Build Coastguard Worker                                      This->base.base.info.depth0 - This->dirty_box.z);
227*61046927SAndroid Build Coastguard Worker     }
228*61046927SAndroid Build Coastguard Worker     return D3D_OK;
229*61046927SAndroid Build Coastguard Worker }
230*61046927SAndroid Build Coastguard Worker 
231*61046927SAndroid Build Coastguard Worker IDirect3DVolumeTexture9Vtbl NineVolumeTexture9_vtable = {
232*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_QueryInterface,
233*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_AddRef,
234*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_Release,
235*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_GetDevice, /* actually part of Resource9 iface */
236*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_SetPrivateData,
237*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_GetPrivateData,
238*61046927SAndroid Build Coastguard Worker     (void *)NineUnknown_FreePrivateData,
239*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_SetPriority,
240*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_GetPriority,
241*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_PreLoad,
242*61046927SAndroid Build Coastguard Worker     (void *)NineResource9_GetType,
243*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_SetLOD,
244*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_GetLOD,
245*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_GetLevelCount,
246*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_SetAutoGenFilterType,
247*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_GetAutoGenFilterType,
248*61046927SAndroid Build Coastguard Worker     (void *)NineBaseTexture9_GenerateMipSubLevels,
249*61046927SAndroid Build Coastguard Worker     (void *)NineVolumeTexture9_GetLevelDesc,
250*61046927SAndroid Build Coastguard Worker     (void *)NineVolumeTexture9_GetVolumeLevel,
251*61046927SAndroid Build Coastguard Worker     (void *)NineVolumeTexture9_LockBox,
252*61046927SAndroid Build Coastguard Worker     (void *)NineVolumeTexture9_UnlockBox,
253*61046927SAndroid Build Coastguard Worker     (void *)NineVolumeTexture9_AddDirtyBox
254*61046927SAndroid Build Coastguard Worker };
255*61046927SAndroid Build Coastguard Worker 
256*61046927SAndroid Build Coastguard Worker static const GUID *NineVolumeTexture9_IIDs[] = {
257*61046927SAndroid Build Coastguard Worker     &IID_IDirect3DVolumeTexture9,
258*61046927SAndroid Build Coastguard Worker     &IID_IDirect3DBaseTexture9,
259*61046927SAndroid Build Coastguard Worker     &IID_IDirect3DResource9,
260*61046927SAndroid Build Coastguard Worker     &IID_IUnknown,
261*61046927SAndroid Build Coastguard Worker     NULL
262*61046927SAndroid Build Coastguard Worker };
263*61046927SAndroid Build Coastguard Worker 
264*61046927SAndroid Build Coastguard Worker HRESULT
NineVolumeTexture9_new(struct NineDevice9 * pDevice,UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,struct NineVolumeTexture9 ** ppOut,HANDLE * pSharedHandle)265*61046927SAndroid Build Coastguard Worker NineVolumeTexture9_new( struct NineDevice9 *pDevice,
266*61046927SAndroid Build Coastguard Worker                         UINT Width, UINT Height, UINT Depth, UINT Levels,
267*61046927SAndroid Build Coastguard Worker                         DWORD Usage,
268*61046927SAndroid Build Coastguard Worker                         D3DFORMAT Format,
269*61046927SAndroid Build Coastguard Worker                         D3DPOOL Pool,
270*61046927SAndroid Build Coastguard Worker                         struct NineVolumeTexture9 **ppOut,
271*61046927SAndroid Build Coastguard Worker                         HANDLE *pSharedHandle )
272*61046927SAndroid Build Coastguard Worker {
273*61046927SAndroid Build Coastguard Worker     NINE_DEVICE_CHILD_NEW(VolumeTexture9, ppOut, pDevice,
274*61046927SAndroid Build Coastguard Worker                           Width, Height, Depth, Levels,
275*61046927SAndroid Build Coastguard Worker                           Usage, Format, Pool, pSharedHandle);
276*61046927SAndroid Build Coastguard Worker }
277*61046927SAndroid Build Coastguard Worker 
278