Henri Verbeet : ddraw: Use the correct height when calculating the linear size in ddraw_surface_init ().

Alexandre Julliard julliard at wine.codeweavers.com
Wed Feb 10 11:11:08 CST 2016


Module: wine
Branch: master
Commit: 1b106fe830debcd9a3e7924aef469d924d2254b0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1b106fe830debcd9a3e7924aef469d924d2254b0

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Feb  9 21:29:55 2016 +0100

ddraw: Use the correct height when calculating the linear size in ddraw_surface_init().

This fixes a regression introduced by commit
7d45318aeac41e2efabb9ddfbf95ecbea103e67d.

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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);
     }




More information about the wine-cvs mailing list