af062818b47340eef15700d2f0211576ba3506eevboxsync/*
af062818b47340eef15700d2f0211576ba3506eevboxsync * IDirect3DVolumeTexture9 implementation
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright 2002-2005 Jason Edmeades
af062818b47340eef15700d2f0211576ba3506eevboxsync * Raphael Junqueira
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is free software; you can redistribute it and/or
af062818b47340eef15700d2f0211576ba3506eevboxsync * modify it under the terms of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License as published by the Free Software Foundation; either
af062818b47340eef15700d2f0211576ba3506eevboxsync * version 2.1 of the License, or (at your option) any later version.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is distributed in the hope that it will be useful,
af062818b47340eef15700d2f0211576ba3506eevboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
af062818b47340eef15700d2f0211576ba3506eevboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * Lesser General Public License for more details.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * You should have received a copy of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License along with this library; if not, write to the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
af062818b47340eef15700d2f0211576ba3506eevboxsync */
af062818b47340eef15700d2f0211576ba3506eevboxsync
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync/*
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * a choice of LGPL license versions is made available with the language indicating
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * that LGPLv2 or any later version may be used, or where a choice of which version
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * of the LGPL is applied is otherwise unspecified.
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync */
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#include "config.h"
af062818b47340eef15700d2f0211576ba3506eevboxsync#include "d3d9_private.h"
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncWINE_DEFAULT_DEBUG_CHANNEL(d3d9);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DVolumeTexture9 IUnknown parts follow: */
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_QueryInterface(LPDIRECT3DVOLUMETEXTURE9 iface, REFIID riid, LPVOID* ppobj) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), ppobj);
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync if (IsEqualGUID(riid, &IID_IUnknown)
af062818b47340eef15700d2f0211576ba3506eevboxsync || IsEqualGUID(riid, &IID_IDirect3DResource9)
af062818b47340eef15700d2f0211576ba3506eevboxsync || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9)
af062818b47340eef15700d2f0211576ba3506eevboxsync || IsEqualGUID(riid, &IID_IDirect3DVolumeTexture9)) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9_AddRef(iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync *ppobj = This;
af062818b47340eef15700d2f0211576ba3506eevboxsync return S_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
af062818b47340eef15700d2f0211576ba3506eevboxsync *ppobj = NULL;
af062818b47340eef15700d2f0211576ba3506eevboxsync return E_NOINTERFACE;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic ULONG WINAPI IDirect3DVolumeTexture9Impl_AddRef(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync ULONG ref = InterlockedIncrement(&This->ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("%p increasing refcount to %u.\n", iface, ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync if (ref == 1)
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync {
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IDirect3DDevice9Ex_AddRef(This->parentDevice);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IWineD3DVolumeTexture_AddRef(This->wineD3DVolumeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync }
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return ref;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic ULONG WINAPI IDirect3DVolumeTexture9Impl_Release(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync ULONG ref = InterlockedDecrement(&This->ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("%p decreasing refcount to %u.\n", iface, ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync if (ref == 0) {
5112e32d7072e280613921c982a6672f2c859cf3vboxsync IDirect3DDevice9Ex *parentDevice = This->parentDevice;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IWineD3DVolumeTexture_Release(This->wineD3DVolumeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync /* Release the device last, as it may cause the device to be destroyed. */
5112e32d7072e280613921c982a6672f2c859cf3vboxsync IDirect3DDevice9Ex_Release(parentDevice);
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync return ref;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DVolumeTexture9 IDirect3DResource9 Interface follow: */
5112e32d7072e280613921c982a6672f2c859cf3vboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_GetDevice(IDirect3DVolumeTexture9 *iface, IDirect3DDevice9 **device)
5112e32d7072e280613921c982a6672f2c859cf3vboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, device %p.\n", iface, device);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync *device = (IDirect3DDevice9 *)This->parentDevice;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync IDirect3DDevice9_AddRef(*device);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("Returning device %p.\n", *device);
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync return D3D_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_SetPrivateData(LPDIRECT3DVOLUMETEXTURE9 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, guid %s, data %p, data_size %u, flags %#x.\n",
5112e32d7072e280613921c982a6672f2c859cf3vboxsync iface, debugstr_guid(refguid), pData, SizeOfData, Flags);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_SetPrivateData(This->wineD3DVolumeTexture, refguid, pData, SizeOfData, Flags);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_GetPrivateData(LPDIRECT3DVOLUMETEXTURE9 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, guid %s, data %p, data_size %p.\n",
5112e32d7072e280613921c982a6672f2c859cf3vboxsync iface, debugstr_guid(refguid), pData, pSizeOfData);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_GetPrivateData(This->wineD3DVolumeTexture, refguid, pData, pSizeOfData);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_FreePrivateData(LPDIRECT3DVOLUMETEXTURE9 iface, REFGUID refguid) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, guid %s.\n", iface, debugstr_guid(refguid));
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_FreePrivateData(This->wineD3DVolumeTexture, refguid);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DVolumeTexture9Impl_SetPriority(LPDIRECT3DVOLUMETEXTURE9 iface, DWORD PriorityNew) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync DWORD priority;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, priority %u.\n", iface, PriorityNew);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync priority = IWineD3DVolumeTexture_SetPriority(This->wineD3DVolumeTexture, PriorityNew);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return priority;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DVolumeTexture9Impl_GetPriority(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync DWORD priority;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync priority = IWineD3DVolumeTexture_GetPriority(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return priority;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic void WINAPI IDirect3DVolumeTexture9Impl_PreLoad(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DVolumeTexture_PreLoad(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic D3DRESOURCETYPE WINAPI IDirect3DVolumeTexture9Impl_GetType(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync D3DRESOURCETYPE type;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync type = IWineD3DVolumeTexture_GetType(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return type;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DVolumeTexture9 IDirect3DBaseTexture9 Interface follow: */
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DVolumeTexture9Impl_SetLOD(LPDIRECT3DVOLUMETEXTURE9 iface, DWORD LODNew) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync DWORD lod;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, lod %u.\n", iface, LODNew);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync lod = IWineD3DVolumeTexture_SetLOD(This->wineD3DVolumeTexture, LODNew);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return lod;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DVolumeTexture9Impl_GetLOD(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync DWORD lod;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync lod = IWineD3DVolumeTexture_GetLOD(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return lod;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DVolumeTexture9Impl_GetLevelCount(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync DWORD level_count;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync level_count = IWineD3DVolumeTexture_GetLevelCount(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return level_count;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_SetAutoGenFilterType(LPDIRECT3DVOLUMETEXTURE9 iface, D3DTEXTUREFILTERTYPE FilterType) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, filter_type %#x.\n", iface, FilterType);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_SetAutoGenFilterType(This->wineD3DVolumeTexture, (WINED3DTEXTUREFILTERTYPE) FilterType);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic D3DTEXTUREFILTERTYPE WINAPI IDirect3DVolumeTexture9Impl_GetAutoGenFilterType(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync D3DTEXTUREFILTERTYPE filter_type;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync filter_type = (D3DTEXTUREFILTERTYPE)IWineD3DVolumeTexture_GetAutoGenFilterType(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return filter_type;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic void WINAPI IDirect3DVolumeTexture9Impl_GenerateMipSubLevels(LPDIRECT3DVOLUMETEXTURE9 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DVolumeTexture_GenerateMipSubLevels(This->wineD3DVolumeTexture);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DVolumeTexture9 Interface follow: */
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_GetLevelDesc(LPDIRECT3DVOLUMETEXTURE9 iface, UINT Level, D3DVOLUME_DESC* pDesc) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync WINED3DVOLUME_DESC wined3ddesc;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, level %u, desc %p.\n", iface, Level, pDesc);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_GetLevelDesc(This->wineD3DVolumeTexture, Level, &wined3ddesc);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
040b4a09341f574825386333398110f4db3e1e51vboxsync if (SUCCEEDED(hr))
040b4a09341f574825386333398110f4db3e1e51vboxsync {
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Format = d3dformat_from_wined3dformat(wined3ddesc.Format);
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Type = wined3ddesc.Type;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Usage = wined3ddesc.Usage;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Pool = wined3ddesc.Pool;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Width = wined3ddesc.Width;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Height = wined3ddesc.Height;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Depth = wined3ddesc.Depth;
040b4a09341f574825386333398110f4db3e1e51vboxsync }
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_GetVolumeLevel(LPDIRECT3DVOLUMETEXTURE9 iface, UINT Level, IDirect3DVolume9** ppVolumeLevel) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hrc = D3D_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DVolume *myVolume = NULL;
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, level %u, volume %p.\n", iface, Level, ppVolumeLevel);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync hrc = IWineD3DVolumeTexture_GetVolumeLevel(This->wineD3DVolumeTexture, Level, &myVolume);
af062818b47340eef15700d2f0211576ba3506eevboxsync if (hrc == D3D_OK && NULL != ppVolumeLevel) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DVolumeTexture_GetParent(myVolume, (IUnknown **)ppVolumeLevel);
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DVolumeTexture_Release(myVolume);
af062818b47340eef15700d2f0211576ba3506eevboxsync }
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hrc;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_LockBox(LPDIRECT3DVOLUMETEXTURE9 iface, UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, level %u, locked_box %p, box %p, flags %#x.\n",
5112e32d7072e280613921c982a6672f2c859cf3vboxsync iface, Level, pLockedVolume, pBox, Flags);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_LockBox(This->wineD3DVolumeTexture, Level, (WINED3DLOCKED_BOX *)pLockedVolume,
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync (const WINED3DBOX *)pBox, Flags);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_UnlockBox(LPDIRECT3DVOLUMETEXTURE9 iface, UINT Level) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, level %u.\n", iface, Level);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_UnlockBox(This->wineD3DVolumeTexture, Level);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DVolumeTexture9Impl_AddDirtyBox(LPDIRECT3DVOLUMETEXTURE9 iface, CONST D3DBOX* pDirtyBox) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl *This = (IDirect3DVolumeTexture9Impl *)iface;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync HRESULT hr;
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, dirty_box %p.\n", iface, pDirtyBox);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync hr = IWineD3DVolumeTexture_AddDirtyBox(This->wineD3DVolumeTexture, (CONST WINED3DBOX *)pDirtyBox);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic const IDirect3DVolumeTexture9Vtbl Direct3DVolumeTexture9_Vtbl =
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IUnknown */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_QueryInterface,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_AddRef,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_Release,
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IDirect3DResource9 */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetDevice,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_SetPrivateData,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetPrivateData,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_FreePrivateData,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_SetPriority,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetPriority,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_PreLoad,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetType,
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IDirect3DBaseTexture9 */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_SetLOD,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetLOD,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetLevelCount,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_SetAutoGenFilterType,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetAutoGenFilterType,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GenerateMipSubLevels,
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IDirect3DVolumeTexture9 */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetLevelDesc,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_GetVolumeLevel,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_LockBox,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_UnlockBox,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DVolumeTexture9Impl_AddDirtyBox
af062818b47340eef15700d2f0211576ba3506eevboxsync};
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncstatic void STDMETHODCALLTYPE volumetexture_wined3d_object_destroyed(void *parent)
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync{
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync HeapFree(GetProcessHeap(), 0, parent);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncstatic const struct wined3d_parent_ops d3d9_volumetexture_wined3d_parent_ops =
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync{
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync volumetexture_wined3d_object_destroyed,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync};
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncHRESULT volumetexture_init(IDirect3DVolumeTexture9Impl *texture, IDirect3DDevice9Impl *device,
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync UINT width, UINT height, UINT depth, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync#ifdef VBOX_WITH_WDDM
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync , HANDLE *shared_handle
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync , void **pavClientMem
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync#endif
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync )
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync{
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync HRESULT hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync texture->lpVtbl = &Direct3DVolumeTexture9_Vtbl;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync texture->ref = 1;
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync#ifdef VBOX_WITH_WDDM
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync hr = IWineD3DDevice_CreateVolumeTexture(device->WineD3DDevice, width, height, depth, levels,
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync usage & WINED3DUSAGE_MASK, wined3dformat_from_d3dformat(format), pool,
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync &texture->wineD3DVolumeTexture, (IUnknown *)texture, &d3d9_volumetexture_wined3d_parent_ops
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync , shared_handle, pavClientMem);
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync#else
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync hr = IWineD3DDevice_CreateVolumeTexture(device->WineD3DDevice, width, height, depth, levels,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync usage & WINED3DUSAGE_MASK, wined3dformat_from_d3dformat(format), pool,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync &texture->wineD3DVolumeTexture, (IUnknown *)texture, &d3d9_volumetexture_wined3d_parent_ops);
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync#endif
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync if (FAILED(hr))
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync {
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync WARN("Failed to create wined3d volume texture, hr %#x.\n", hr);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync texture->parentDevice = (IDirect3DDevice9Ex *)device;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IDirect3DDevice9Ex_AddRef(texture->parentDevice);
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync return D3D_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync}