From 3529560cd7a4f752596e80d4084e9527b348eb22 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Thu, 5 Oct 2006 17:56:54 +0200 Subject: [PATCH] wined3d: Add WINED3DUSAGE_OVERLAY. --- dlls/d3d8/device.c | 12 ++++++------ dlls/d3d9/device.c | 2 +- dlls/d3d9/indexbuffer.c | 2 +- dlls/d3d9/texture.c | 2 +- dlls/d3d9/vertexbuffer.c | 2 +- dlls/d3d9/volume.c | 2 +- dlls/d3d9/volumetexture.c | 2 +- dlls/ddraw/ddraw.c | 4 ++++ dlls/wined3d/surface.c | 24 ++++++++++++++++++++++++ dlls/wined3d/surface_gdi.c | 5 +++++ include/wine/wined3d_types.h | 1 + 11 files changed, 46 insertions(+), 12 deletions(-) diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 832e01e139..5adc2db306 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -337,7 +337,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateTexture(LPDIRECT3DDEVICE8 iface object->lpVtbl = &Direct3DTexture8_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateTexture(This->WineD3DDevice, Width, Height, Levels, Usage, + hrc = IWineD3DDevice_CreateTexture(This->WineD3DDevice, Width, Height, Levels, Usage & WINED3DUSAGE_MASK, (WINED3DFORMAT)Format, (WINED3DPOOL) Pool, &object->wineD3DTexture, NULL, (IUnknown *)object, D3D8CB_CreateSurface); if (FAILED(hrc)) { @@ -375,7 +375,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateVolumeTexture(LPDIRECT3DDEVICE8 object->lpVtbl = &Direct3DVolumeTexture8_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateVolumeTexture(This->WineD3DDevice, Width, Height, Depth, Levels, Usage, + hrc = IWineD3DDevice_CreateVolumeTexture(This->WineD3DDevice, Width, Height, Depth, Levels, Usage & WINED3DUSAGE_MASK, (WINED3DFORMAT)Format, (WINED3DPOOL) Pool, &object->wineD3DVolumeTexture, NULL, (IUnknown *)object, D3D8CB_CreateVolume); @@ -414,7 +414,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateCubeTexture(LPDIRECT3DDEVICE8 i object->lpVtbl = &Direct3DCubeTexture8_Vtbl; object->ref = 1; - hr = IWineD3DDevice_CreateCubeTexture(This->WineD3DDevice, EdgeLength, Levels, Usage, + hr = IWineD3DDevice_CreateCubeTexture(This->WineD3DDevice, EdgeLength, Levels, Usage & WINED3DUSAGE_MASK, (WINED3DFORMAT)Format, (WINED3DPOOL) Pool, &object->wineD3DCubeTexture, NULL, (IUnknown*)object, D3D8CB_CreateSurface); @@ -450,7 +450,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 object->lpVtbl = &Direct3DVertexBuffer8_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage, FVF, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), NULL, (IUnknown *)object); + hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage & WINED3DUSAGE_MASK, FVF, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), NULL, (IUnknown *)object); if (D3D_OK != hrc) { @@ -483,7 +483,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateIndexBuffer(LPDIRECT3DDEVICE8 i object->lpVtbl = &Direct3DIndexBuffer8_Vtbl; object->ref = 1; TRACE("Calling wined3d create index buffer\n"); - hrc = IWineD3DDevice_CreateIndexBuffer(This->WineD3DDevice, Length, Usage, Format, (WINED3DPOOL) Pool, &object->wineD3DIndexBuffer, NULL, (IUnknown *)object); + hrc = IWineD3DDevice_CreateIndexBuffer(This->WineD3DDevice, Length, Usage & WINED3DUSAGE_MASK, Format, (WINED3DPOOL) Pool, &object->wineD3DIndexBuffer, NULL, (IUnknown *)object); if (D3D_OK != hrc) { @@ -533,7 +533,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CreateSurface(LPDIRECT3DDEVICE8 iface TRACE("(%p) : w(%d) h(%d) fmt(%d) surf@%p\n", This, Width, Height, Format, *ppSurface); - hrc = IWineD3DDevice_CreateSurface(This->WineD3DDevice, Width, Height, Format, Lockable, Discard, Level, &object->wineD3DSurface, Type, Usage, (WINED3DPOOL) Pool,MultiSample,MultisampleQuality, NULL, SURFACE_OPENGL, (IUnknown *)object); + hrc = IWineD3DDevice_CreateSurface(This->WineD3DDevice, Width, Height, Format, Lockable, Discard, Level, &object->wineD3DSurface, Type, Usage & WINED3DUSAGE_MASK, (WINED3DPOOL) Pool,MultiSample,MultisampleQuality, NULL, SURFACE_OPENGL, (IUnknown *)object); if (hrc != D3D_OK || NULL == object->wineD3DSurface) { /* free up object */ FIXME("(%p) call to IWineD3DDevice_CreateSurface failed\n", This); diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 6eeacebf37..e8033ed532 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -274,7 +274,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_CreateSurface(LPDIRECT3DDEVICE9 ifac TRACE("(%p) : w(%d) h(%d) fmt(%d) surf@%p\n", This, Width, Height, Format, *ppSurface); - hrc = IWineD3DDevice_CreateSurface(This->WineD3DDevice, Width, Height, Format, Lockable, Discard, Level, &object->wineD3DSurface, Type, Usage, (WINED3DPOOL) Pool,MultiSample,MultisampleQuality,pSharedHandle,SURFACE_OPENGL,(IUnknown *)object); + hrc = IWineD3DDevice_CreateSurface(This->WineD3DDevice, Width, Height, Format, Lockable, Discard, Level, &object->wineD3DSurface, Type, Usage & WINED3DUSAGE_MASK, (WINED3DPOOL) Pool,MultiSample,MultisampleQuality,pSharedHandle,SURFACE_OPENGL,(IUnknown *)object); if (hrc != D3D_OK || NULL == object->wineD3DSurface) { diff --git a/dlls/d3d9/indexbuffer.c b/dlls/d3d9/indexbuffer.c index fc853575bf..269552aa7e 100644 --- a/dlls/d3d9/indexbuffer.c +++ b/dlls/d3d9/indexbuffer.c @@ -175,7 +175,7 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateIndexBuffer(LPDIRECT3DDEVICE9 iface, object->lpVtbl = &Direct3DIndexBuffer9_Vtbl; object->ref = 1; TRACE("Calling wined3d create index buffer\n"); - hrc = IWineD3DDevice_CreateIndexBuffer(This->WineD3DDevice, Length, Usage, Format, (WINED3DPOOL) Pool, &object->wineD3DIndexBuffer, pSharedHandle, (IUnknown *)object); + hrc = IWineD3DDevice_CreateIndexBuffer(This->WineD3DDevice, Length, Usage & WINED3DUSAGE_MASK, Format, (WINED3DPOOL) Pool, &object->wineD3DIndexBuffer, pSharedHandle, (IUnknown *)object); if (hrc != D3D_OK) { /* free up object */ diff --git a/dlls/d3d9/texture.c b/dlls/d3d9/texture.c index 900127b521..789cdb6e6e 100644 --- a/dlls/d3d9/texture.c +++ b/dlls/d3d9/texture.c @@ -256,7 +256,7 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateTexture(LPDIRECT3DDEVICE9 iface, UIN object->lpVtbl = &Direct3DTexture9_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateTexture(This->WineD3DDevice, Width, Height, Levels, Usage, + hrc = IWineD3DDevice_CreateTexture(This->WineD3DDevice, Width, Height, Levels, Usage & WINED3DUSAGE_MASK, (WINED3DFORMAT)Format, (WINED3DPOOL) Pool, &object->wineD3DTexture, pSharedHandle, (IUnknown *)object, D3D9CB_CreateSurface); if (FAILED(hrc)) { diff --git a/dlls/d3d9/vertexbuffer.c b/dlls/d3d9/vertexbuffer.c index 262f88ed33..56269206ab 100644 --- a/dlls/d3d9/vertexbuffer.c +++ b/dlls/d3d9/vertexbuffer.c @@ -174,7 +174,7 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateVertexBuffer(LPDIRECT3DDEVICE9 iface, object->lpVtbl = &Direct3DVertexBuffer9_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage, FVF, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), pSharedHandle, (IUnknown *)object); + hrc = IWineD3DDevice_CreateVertexBuffer(This->WineD3DDevice, Size, Usage & WINED3DUSAGE_MASK, FVF, (WINED3DPOOL) Pool, &(object->wineD3DVertexBuffer), pSharedHandle, (IUnknown *)object); if (hrc != D3D_OK) { diff --git a/dlls/d3d9/volume.c b/dlls/d3d9/volume.c index b6e303aa66..dbbdbb33ff 100644 --- a/dlls/d3d9/volume.c +++ b/dlls/d3d9/volume.c @@ -219,7 +219,7 @@ HRESULT WINAPI D3D9CB_CreateVolume(IUnknown *pDevice, UINT Width, UINT Height, object->lpVtbl = &Direct3DVolume9_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateVolume(This->WineD3DDevice, Width, Height, Depth, Usage, Format, + hrc = IWineD3DDevice_CreateVolume(This->WineD3DDevice, Width, Height, Depth, Usage & WINED3DUSAGE_MASK, Format, Pool, &object->wineD3DVolume, pSharedHandle, (IUnknown *)object); if (hrc != D3D_OK) { /* free up object */ diff --git a/dlls/d3d9/volumetexture.c b/dlls/d3d9/volumetexture.c index a0e946ba40..cba0ccb084 100644 --- a/dlls/d3d9/volumetexture.c +++ b/dlls/d3d9/volumetexture.c @@ -258,7 +258,7 @@ HRESULT WINAPI IDirect3DDevice9Impl_CreateVolumeTexture(LPDIRECT3DDEVICE9 ifac object->lpVtbl = &Direct3DVolumeTexture9_Vtbl; object->ref = 1; - hrc = IWineD3DDevice_CreateVolumeTexture(This->WineD3DDevice, Width, Height, Depth, Levels, Usage, + hrc = IWineD3DDevice_CreateVolumeTexture(This->WineD3DDevice, Width, Height, Depth, Levels, Usage & WINED3DUSAGE_MASK, (WINED3DFORMAT)Format, (WINED3DPOOL) Pool, &object->wineD3DVolumeTexture, pSharedHandle, (IUnknown *)object, D3D9CB_CreateVolume); diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 333fcdebb4..594f434c2b 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -1806,6 +1806,10 @@ IDirectDrawImpl_CreateNewSurface(IDirectDrawImpl *This, DDSCAPS_VISIBLE | DDSCAPS_LOCALVIDMEM; } + if (pDDSD->ddsCaps.dwCaps & (DDSCAPS_OVERLAY)) + { + Usage |= WINED3DUSAGE_OVERLAY; + } if(This->depthstencil) { /* The depth stencil creation callback sets this flag. diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 61bad8abbd..dbdfb1000d 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -3076,6 +3076,12 @@ HRESULT WINAPI IWineD3DSurfaceImpl_SetOverlayPosition(IWineD3DSurface *iface, LO FIXME("(%p)->(%d,%d) Stub!\n", This, X, Y); + if(!(This->resource.usage & WINED3DUSAGE_OVERLAY)) + { + TRACE("(%p): Not an overlay surface\n", This); + return DDERR_NOTAOVERLAYSURFACE; + } + return WINED3D_OK; } @@ -3084,6 +3090,12 @@ HRESULT WINAPI IWineD3DSurfaceImpl_GetOverlayPosition(IWineD3DSurface *iface, LO FIXME("(%p)->(%p,%p) Stub!\n", This, X, Y); + if(!(This->resource.usage & WINED3DUSAGE_OVERLAY)) + { + TRACE("(%p): Not an overlay surface\n", This); + return DDERR_NOTAOVERLAYSURFACE; + } + return WINED3D_OK; } @@ -3093,6 +3105,12 @@ HRESULT WINAPI IWineD3DSurfaceImpl_UpdateOverlayZOrder(IWineD3DSurface *iface, D FIXME("(%p)->(%08x,%p) Stub!\n", This, Flags, RefImpl); + if(!(This->resource.usage & WINED3DUSAGE_OVERLAY)) + { + TRACE("(%p): Not an overlay surface\n", This); + return DDERR_NOTAOVERLAYSURFACE; + } + return WINED3D_OK; } @@ -3101,6 +3119,12 @@ HRESULT WINAPI IWineD3DSurfaceImpl_UpdateOverlay(IWineD3DSurface *iface, RECT *S IWineD3DSurfaceImpl *Dst = (IWineD3DSurfaceImpl *) DstSurface; FIXME("(%p)->(%p, %p, %p, %08x, %p)\n", This, SrcRect, Dst, DstRect, Flags, FX); + if(!(This->resource.usage & WINED3DUSAGE_OVERLAY)) + { + TRACE("(%p): Not an overlay surface\n", This); + return DDERR_NOTAOVERLAYSURFACE; + } + return WINED3D_OK; } diff --git a/dlls/wined3d/surface_gdi.c b/dlls/wined3d/surface_gdi.c index 0e605c8f0f..1e797d3ef7 100644 --- a/dlls/wined3d/surface_gdi.c +++ b/dlls/wined3d/surface_gdi.c @@ -1509,6 +1509,11 @@ IWineGDISurfaceImpl_PrivateSetup(IWineD3DSurface *iface) HDC hdc; long oldsize = This->resource.size; + if(This->resource.usage & WINED3DUSAGE_OVERLAY) + { + ERR("(%p) Overlays not yet supported by GDI surfaces\n", This); + return WINED3DERR_INVALIDCALL; + } /* Sysmem textures have memory already allocated - * release it, this avoids an unnecessary memcpy */ diff --git a/include/wine/wined3d_types.h b/include/wine/wined3d_types.h index e70a814f50..278e7d7b0e 100644 --- a/include/wine/wined3d_types.h +++ b/include/wine/wined3d_types.h @@ -1053,6 +1053,7 @@ typedef enum _WINED3DSAMPLER_TEXTURE_TYPE { #define WINED3DUSAGE_AUTOGENMIPMAP 0x00000400L #define WINED3DUSAGE_DMAP 0x00004000L #define WINED3DUSAGE_MASK 0x00004FFFL +#define WINED3DUSAGE_OVERLAY 0x00010000L #define WINED3DUSAGE_QUERY_LEGACYBUMPMAP 0x00008000L #define WINED3DUSAGE_QUERY_FILTER 0x00020000L -- 2.32.0.93.g670b81a890