X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=dll%2Fdirectx%2Fwine%2Fd3d9%2Fpixelshader.c;h=7cb803a7f4cf9055b480ce2c8615ef68f903092f;hp=547dc7464969f5c6b50474af761a14b8abfd4187;hb=e4a060ead45b9dc87a64408b6d791ea4a5fef55e;hpb=2597cfe258b768473a744df30227f4067252d9b7 diff --git a/dll/directx/wine/d3d9/pixelshader.c b/dll/directx/wine/d3d9/pixelshader.c index 547dc746496..7cb803a7f4c 100644 --- a/dll/directx/wine/d3d9/pixelshader.c +++ b/dll/directx/wine/d3d9/pixelshader.c @@ -28,6 +28,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d9); static HRESULT WINAPI IDirect3DPixelShader9Impl_QueryInterface(LPDIRECT3DPIXELSHADER9 iface, REFIID riid, LPVOID* ppobj) { IDirect3DPixelShader9Impl *This = (IDirect3DPixelShader9Impl *)iface; + TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), ppobj); + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3DPixelShader9)) { IDirect3DPixelShader9_AddRef(iface); @@ -44,7 +46,7 @@ static ULONG WINAPI IDirect3DPixelShader9Impl_AddRef(LPDIRECT3DPIXELSHADER9 ifac IDirect3DPixelShader9Impl *This = (IDirect3DPixelShader9Impl *)iface; ULONG ref = InterlockedIncrement(&This->ref); - TRACE("(%p) : AddRef from %d\n", This, ref - 1); + TRACE("%p increasing refcount to %u.\n", iface, ref); if (ref == 1) { @@ -61,38 +63,41 @@ static ULONG WINAPI IDirect3DPixelShader9Impl_Release(LPDIRECT3DPIXELSHADER9 ifa IDirect3DPixelShader9Impl *This = (IDirect3DPixelShader9Impl *)iface; ULONG ref = InterlockedDecrement(&This->ref); - TRACE("(%p) : ReleaseRef to %d\n", This, ref); + TRACE("%p decreasing refcount to %u.\n", iface, ref); if (ref == 0) { - IDirect3DDevice9Ex_Release(This->parentDevice); + IDirect3DDevice9Ex *parentDevice = This->parentDevice; + wined3d_mutex_lock(); IWineD3DPixelShader_Release(This->wineD3DPixelShader); wined3d_mutex_unlock(); + + /* Release the device last, as it may cause the device to be destroyed. */ + IDirect3DDevice9Ex_Release(parentDevice); } return ref; } /* IDirect3DPixelShader9 Interface follow: */ -static HRESULT WINAPI IDirect3DPixelShader9Impl_GetDevice(LPDIRECT3DPIXELSHADER9 iface, IDirect3DDevice9** ppDevice) { +static HRESULT WINAPI IDirect3DPixelShader9Impl_GetDevice(IDirect3DPixelShader9 *iface, IDirect3DDevice9 **device) +{ IDirect3DPixelShader9Impl *This = (IDirect3DPixelShader9Impl *)iface; - IWineD3DDevice *myDevice = NULL; - TRACE("(%p) : Relay\n", This); + TRACE("iface %p, device %p.\n", iface, device); - wined3d_mutex_lock(); - IWineD3DPixelShader_GetDevice(This->wineD3DPixelShader, &myDevice); - IWineD3DDevice_GetParent(myDevice, (IUnknown **)ppDevice); - IWineD3DDevice_Release(myDevice); - wined3d_mutex_unlock(); + *device = (IDirect3DDevice9 *)This->parentDevice; + IDirect3DDevice9_AddRef(*device); + + TRACE("Returning device %p.\n", *device); - TRACE("(%p) returning (%p)\n", This, *ppDevice); return D3D_OK; } static HRESULT WINAPI IDirect3DPixelShader9Impl_GetFunction(LPDIRECT3DPIXELSHADER9 iface, VOID* pData, UINT* pSizeOfData) { IDirect3DPixelShader9Impl *This = (IDirect3DPixelShader9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, data %p, data_size %p.\n", iface, pData, pSizeOfData); wined3d_mutex_lock(); hr = IWineD3DPixelShader_GetFunction(This->wineD3DPixelShader, pData, pSizeOfData); @@ -150,7 +155,8 @@ HRESULT pixelshader_init(IDirect3DPixelShader9Impl *shader, IDirect3DDevice9Impl HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShader(LPDIRECT3DDEVICE9EX iface, IDirect3DPixelShader9* pShader) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; IDirect3DPixelShader9Impl *shader = (IDirect3DPixelShader9Impl *)pShader; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, shader %p.\n", iface, shader); wined3d_mutex_lock(); IWineD3DDevice_SetPixelShader(This->WineD3DDevice, shader == NULL ? NULL :shader->wineD3DPixelShader); @@ -162,9 +168,10 @@ HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShader(LPDIRECT3DDEVICE9EX iface, ID HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShader(LPDIRECT3DDEVICE9EX iface, IDirect3DPixelShader9** ppShader) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; IWineD3DPixelShader *object; + HRESULT hrc; + + TRACE("iface %p, shader %p.\n", iface, ppShader); - HRESULT hrc = D3D_OK; - TRACE("(%p) Relay\n", This); if (ppShader == NULL) { TRACE("(%p) Invalid call\n", This); return D3DERR_INVALIDCALL; @@ -197,7 +204,9 @@ HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShader(LPDIRECT3DDEVICE9EX iface, ID HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShaderConstantF(LPDIRECT3DDEVICE9EX iface, UINT Register, CONST float* pConstantData, UINT Vector4fCount) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, register %u, data %p, count %u.\n", + iface, Register, pConstantData, Vector4fCount); wined3d_mutex_lock(); hr = IWineD3DDevice_SetPixelShaderConstantF(This->WineD3DDevice, Register, pConstantData, Vector4fCount); @@ -210,7 +219,8 @@ HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShaderConstantF(LPDIRECT3DDEVICE9EX IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + TRACE("iface %p, register %u, data %p, count %u.\n", + iface, Register, pConstantData, Vector4fCount); wined3d_mutex_lock(); hr = IWineD3DDevice_GetPixelShaderConstantF(This->WineD3DDevice, Register, pConstantData, Vector4fCount); @@ -222,7 +232,9 @@ HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShaderConstantF(LPDIRECT3DDEVICE9EX HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShaderConstantI(LPDIRECT3DDEVICE9EX iface, UINT Register, CONST int* pConstantData, UINT Vector4iCount) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, register %u, data %p, count %u.\n", + iface, Register, pConstantData, Vector4iCount); wined3d_mutex_lock(); hr = IWineD3DDevice_SetPixelShaderConstantI(This->WineD3DDevice, Register, pConstantData, Vector4iCount); @@ -234,7 +246,9 @@ HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShaderConstantI(LPDIRECT3DDEVICE9EX HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShaderConstantI(LPDIRECT3DDEVICE9EX iface, UINT Register, int* pConstantData, UINT Vector4iCount) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, register %u, data %p, count %u.\n", + iface, Register, pConstantData, Vector4iCount); wined3d_mutex_lock(); hr = IWineD3DDevice_GetPixelShaderConstantI(This->WineD3DDevice, Register, pConstantData, Vector4iCount); @@ -246,7 +260,9 @@ HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShaderConstantI(LPDIRECT3DDEVICE9EX HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShaderConstantB(LPDIRECT3DDEVICE9EX iface, UINT Register, CONST BOOL* pConstantData, UINT BoolCount) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, register %u, data %p, count %u.\n", + iface, Register, pConstantData, BoolCount); wined3d_mutex_lock(); hr = IWineD3DDevice_SetPixelShaderConstantB(This->WineD3DDevice, Register, pConstantData, BoolCount); @@ -258,7 +274,9 @@ HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShaderConstantB(LPDIRECT3DDEVICE9EX HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShaderConstantB(LPDIRECT3DDEVICE9EX iface, UINT Register, BOOL* pConstantData, UINT BoolCount) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; HRESULT hr; - TRACE("(%p) Relay\n", This); + + TRACE("iface %p, register %u, data %p, count %u.\n", + iface, Register, pConstantData, BoolCount); wined3d_mutex_lock(); hr = IWineD3DDevice_GetPixelShaderConstantB(This->WineD3DDevice, Register, pConstantData, BoolCount);