[1/3] d3d8: IDirect3DDevice8Impl_GetPixelShaderFunction gets passed
a handle instead of a pointer
H. Verbeet
hverbeet at gmail.com
Sat Jan 6 11:03:49 CST 2007
In the past, d3d8 shader handles were simply the pointer cast to a
DWORD. IDirect3DDevice8Impl_GetPixelShaderFunction still assumes this
is true. Also improve the TRACE. This should fix bug 7091.
Changelog:
- IDirect3DDevice8Impl_GetPixelShaderFunction gets passed a handle
instead of a pointer
-------------- next part --------------
---
dlls/d3d8/device.c | 14 +++++++++++---
1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index b9aea7f..9aeb987 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -1450,10 +1450,18 @@ static HRESULT WINAPI IDirect3DDevice8Im
}
static HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD pPixelShader, void* pData, DWORD* pSizeOfData) {
- IDirect3DPixelShader8Impl *This = (IDirect3DPixelShader8Impl *)pPixelShader;
+ IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
+ IDirect3DPixelShader8Impl *shader = NULL;
- TRACE("(%p) : Relay\n", This);
- return IWineD3DPixelShader_GetFunction(This->wineD3DPixelShader, pData, (UINT *)pSizeOfData);
+ TRACE("(%p) : pPixelShader %#x, pData %p, pSizeOfData %p\n", This, pPixelShader, pData, pSizeOfData);
+
+ if (pPixelShader <= VS_HIGHESTFIXEDFXF || This->allocated_shader_handles <= pPixelShader - (VS_HIGHESTFIXEDFXF + 1)) {
+ ERR("Passed an invalid shader handle.\n");
+ return D3DERR_INVALIDCALL;
+ }
+
+ shader = This->shader_handles[pPixelShader - (VS_HIGHESTFIXEDFXF + 1)];
+ return IWineD3DPixelShader_GetFunction(shader->wineD3DPixelShader, pData, (UINT *)pSizeOfData);
}
static HRESULT WINAPI IDirect3DDevice8Impl_DrawRectPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) {
More information about the wine-patches
mailing list