[PATCH 5/6] ddraw: Return DDERR_NOTONMIPMAPSUBLEVEL for ddraw_surface7_SetColorKey() on mipmap sub levels.
Henri Verbeet
hverbeet at codeweavers.com
Thu Jan 9 05:17:02 CST 2014
---
dlls/ddraw/surface.c | 121 +++++++++++++++++++++++++++---------------------
dlls/ddraw/tests/d3d.c | 2 +-
2 files changed, 70 insertions(+), 53 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 8ce651c..f569ae8 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -4494,89 +4494,106 @@ static HRESULT WINAPI ddraw_surface1_GetPalette(IDirectDrawSurface *iface, IDire
return ddraw_surface7_GetPalette(&surface->IDirectDrawSurface7_iface, palette);
}
-static HRESULT WINAPI ddraw_surface7_SetColorKey(IDirectDrawSurface7 *iface, DWORD Flags, DDCOLORKEY *CKey)
+static HRESULT ddraw_surface_set_color_key(struct ddraw_surface *surface, DWORD flags, DDCOLORKEY *color_key)
{
- struct ddraw_surface *This = impl_from_IDirectDrawSurface7(iface);
+ DDCOLORKEY fixed_color_key;
HRESULT hr = WINED3D_OK;
- DDCOLORKEY FixedCKey;
-
- TRACE("iface %p, flags %#x, color_key %p.\n", iface, Flags, CKey);
wined3d_mutex_lock();
- if (CKey)
+
+ if (color_key)
{
- FixedCKey = *CKey;
+ fixed_color_key = *color_key;
/* Handle case where dwColorSpaceHighValue < dwColorSpaceLowValue */
- if (FixedCKey.dwColorSpaceHighValue < FixedCKey.dwColorSpaceLowValue)
- FixedCKey.dwColorSpaceHighValue = FixedCKey.dwColorSpaceLowValue;
+ if (fixed_color_key.dwColorSpaceHighValue < fixed_color_key.dwColorSpaceLowValue)
+ fixed_color_key.dwColorSpaceHighValue = fixed_color_key.dwColorSpaceLowValue;
- switch (Flags & ~DDCKEY_COLORSPACE)
+ switch (flags & ~DDCKEY_COLORSPACE)
{
- case DDCKEY_DESTBLT:
- This->surface_desc.ddckCKDestBlt = FixedCKey;
- This->surface_desc.dwFlags |= DDSD_CKDESTBLT;
- break;
+ case DDCKEY_DESTBLT:
+ surface->surface_desc.ddckCKDestBlt = fixed_color_key;
+ surface->surface_desc.dwFlags |= DDSD_CKDESTBLT;
+ break;
- case DDCKEY_DESTOVERLAY:
- This->surface_desc.u3.ddckCKDestOverlay = FixedCKey;
- This->surface_desc.dwFlags |= DDSD_CKDESTOVERLAY;
- break;
+ case DDCKEY_DESTOVERLAY:
+ surface->surface_desc.u3.ddckCKDestOverlay = fixed_color_key;
+ surface->surface_desc.dwFlags |= DDSD_CKDESTOVERLAY;
+ break;
- case DDCKEY_SRCOVERLAY:
- This->surface_desc.ddckCKSrcOverlay = FixedCKey;
- This->surface_desc.dwFlags |= DDSD_CKSRCOVERLAY;
- break;
+ case DDCKEY_SRCOVERLAY:
+ surface->surface_desc.ddckCKSrcOverlay = fixed_color_key;
+ surface->surface_desc.dwFlags |= DDSD_CKSRCOVERLAY;
+ break;
- case DDCKEY_SRCBLT:
- This->surface_desc.ddckCKSrcBlt = FixedCKey;
- This->surface_desc.dwFlags |= DDSD_CKSRCBLT;
- break;
+ case DDCKEY_SRCBLT:
+ surface->surface_desc.ddckCKSrcBlt = fixed_color_key;
+ surface->surface_desc.dwFlags |= DDSD_CKSRCBLT;
+ break;
- default:
- wined3d_mutex_unlock();
- return DDERR_INVALIDPARAMS;
+ default:
+ wined3d_mutex_unlock();
+ return DDERR_INVALIDPARAMS;
}
}
else
{
- switch (Flags & ~DDCKEY_COLORSPACE)
+ switch (flags & ~DDCKEY_COLORSPACE)
{
- case DDCKEY_DESTBLT:
- This->surface_desc.dwFlags &= ~DDSD_CKDESTBLT;
- break;
+ case DDCKEY_DESTBLT:
+ surface->surface_desc.dwFlags &= ~DDSD_CKDESTBLT;
+ break;
- case DDCKEY_DESTOVERLAY:
- This->surface_desc.dwFlags &= ~DDSD_CKDESTOVERLAY;
- break;
+ case DDCKEY_DESTOVERLAY:
+ surface->surface_desc.dwFlags &= ~DDSD_CKDESTOVERLAY;
+ break;
- case DDCKEY_SRCOVERLAY:
- This->surface_desc.dwFlags &= ~DDSD_CKSRCOVERLAY;
- break;
+ case DDCKEY_SRCOVERLAY:
+ surface->surface_desc.dwFlags &= ~DDSD_CKSRCOVERLAY;
+ break;
- case DDCKEY_SRCBLT:
- This->surface_desc.dwFlags &= ~DDSD_CKSRCBLT;
- break;
+ case DDCKEY_SRCBLT:
+ surface->surface_desc.dwFlags &= ~DDSD_CKSRCBLT;
+ break;
- default:
- wined3d_mutex_unlock();
- return DDERR_INVALIDPARAMS;
+ default:
+ wined3d_mutex_unlock();
+ return DDERR_INVALIDPARAMS;
}
}
- if (This->wined3d_texture)
- hr = wined3d_texture_set_color_key(This->wined3d_texture, Flags,
- CKey ? (struct wined3d_color_key *)&FixedCKey : NULL);
+
+ if (surface->wined3d_texture)
+ hr = wined3d_texture_set_color_key(surface->wined3d_texture, flags,
+ color_key ? (struct wined3d_color_key *)&fixed_color_key : NULL);
+
wined3d_mutex_unlock();
return hr_ddraw_from_wined3d(hr);
}
+static HRESULT WINAPI ddraw_surface7_SetColorKey(IDirectDrawSurface7 *iface, DWORD flags, DDCOLORKEY *color_key)
+{
+ struct ddraw_surface *surface = impl_from_IDirectDrawSurface7(iface);
+
+ TRACE("iface %p, flags %#x, color_key %p.\n", iface, flags, color_key);
+
+ wined3d_mutex_lock();
+ if (!surface->wined3d_texture)
+ {
+ wined3d_mutex_unlock();
+ return DDERR_NOTONMIPMAPSUBLEVEL;
+ }
+ wined3d_mutex_unlock();
+
+ return ddraw_surface_set_color_key(surface, flags, color_key);
+}
+
static HRESULT WINAPI ddraw_surface4_SetColorKey(IDirectDrawSurface4 *iface, DWORD flags, DDCOLORKEY *color_key)
{
struct ddraw_surface *surface = impl_from_IDirectDrawSurface4(iface);
TRACE("iface %p, flags %#x, color_key %p.\n", iface, flags, color_key);
- return ddraw_surface7_SetColorKey(&surface->IDirectDrawSurface7_iface, flags, color_key);
+ return ddraw_surface_set_color_key(surface, flags, color_key);
}
static HRESULT WINAPI ddraw_surface3_SetColorKey(IDirectDrawSurface3 *iface, DWORD flags, DDCOLORKEY *color_key)
@@ -4585,7 +4602,7 @@ static HRESULT WINAPI ddraw_surface3_SetColorKey(IDirectDrawSurface3 *iface, DWO
TRACE("iface %p, flags %#x, color_key %p.\n", iface, flags, color_key);
- return ddraw_surface7_SetColorKey(&surface->IDirectDrawSurface7_iface, flags, color_key);
+ return ddraw_surface_set_color_key(surface, flags, color_key);
}
static HRESULT WINAPI ddraw_surface2_SetColorKey(IDirectDrawSurface2 *iface, DWORD flags, DDCOLORKEY *color_key)
@@ -4594,7 +4611,7 @@ static HRESULT WINAPI ddraw_surface2_SetColorKey(IDirectDrawSurface2 *iface, DWO
TRACE("iface %p, flags %#x, color_key %p.\n", iface, flags, color_key);
- return ddraw_surface7_SetColorKey(&surface->IDirectDrawSurface7_iface, flags, color_key);
+ return ddraw_surface_set_color_key(surface, flags, color_key);
}
static HRESULT WINAPI ddraw_surface1_SetColorKey(IDirectDrawSurface *iface, DWORD flags, DDCOLORKEY *color_key)
@@ -4603,7 +4620,7 @@ static HRESULT WINAPI ddraw_surface1_SetColorKey(IDirectDrawSurface *iface, DWOR
TRACE("iface %p, flags %#x, color_key %p.\n", iface, flags, color_key);
- return ddraw_surface7_SetColorKey(&surface->IDirectDrawSurface7_iface, flags, color_key);
+ return ddraw_surface_set_color_key(surface, flags, color_key);
}
static HRESULT WINAPI ddraw_surface7_SetPalette(IDirectDrawSurface7 *iface, IDirectDrawPalette *palette)
diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index 25da038..be87e63 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -2761,7 +2761,7 @@ static void DeviceLoadTest(void)
hr = IDirectDrawSurface7_SetColorKey(texture_levels[0][0], DDCKEY_SRCBLT, &ddckey);
ok(hr==DD_OK, "IDirectDrawSurface7_SetColorKey returned: %x\n", hr);
hr = IDirectDrawSurface7_SetColorKey(texture_levels[0][1], DDCKEY_SRCBLT, &ddckey);
- todo_wine ok(hr==DDERR_NOTONMIPMAPSUBLEVEL, "IDirectDrawSurface7_SetColorKey returned: %x\n", hr);
+ ok(hr == DDERR_NOTONMIPMAPSUBLEVEL, "Got unexpected hr %#x.\n", hr);
hr = IDirectDrawSurface7_GetColorKey(texture_levels[1][0], DDCKEY_SRCBLT, &ddckey);
ok(hr==DDERR_NOCOLORKEY, "IDirectDrawSurface7_GetColorKey returned: %x\n", hr);
--
1.7.10.4
More information about the wine-patches
mailing list