From: Henri Verbeet Subject: [PATCH 1/6] ddraw: Use the correct height when calculating the linear size in ddraw_surface_init(). Message-Id: <1455049800-5130-1-git-send-email-hverbeet@codeweavers.com> Date: Tue, 9 Feb 2016 21:29:55 +0100 This fixes a regression introduced by commit 7d45318aeac41e2efabb9ddfbf95ecbea103e67d. Signed-off-by: Henri Verbeet --- dlls/ddraw/surface.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 3286b97..ff2c85b 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -6292,10 +6292,15 @@ void ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw, if (format_is_compressed(&desc->u4.ddpfPixelFormat)) { + unsigned int texture_level, row_pitch; + + texture_level = desc->ddsCaps.dwCaps & DDSCAPS_MIPMAP ? sub_resource_idx % desc->u2.dwMipMapCount : 0; + row_pitch = wined3d_surface_get_pitch(wined3d_surface); + if (desc->dwFlags & DDSD_LPSURFACE) desc->u1.dwLinearSize = ~0u; else - desc->u1.dwLinearSize = wined3d_surface_get_pitch(wined3d_surface) * ((desc->dwHeight + 3) / 4); + desc->u1.dwLinearSize = row_pitch * ((max(1, desc->dwHeight >> texture_level) + 3) / 4); desc->dwFlags |= DDSD_LINEARSIZE; desc->dwFlags &= ~(DDSD_LPSURFACE | DDSD_PITCH); } -- 2.1.4