[PATCH 4/5] wined3d: Check rectangle alignment in wined3d_surface_blt().

Henri Verbeet hverbeet at codeweavers.com
Mon Mar 6 03:45:25 CST 2017


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 dlls/wined3d/surface.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 51200d2..12ec0de 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -3183,22 +3183,6 @@ static HRESULT surface_cpu_blt(struct wined3d_texture *dst_texture, unsigned int
             goto release;
         }
 
-        if (!wined3d_texture_check_block_align(src_texture,
-                src_sub_resource_idx % src_texture->level_count, src_box))
-        {
-            WARN("Source rectangle not block-aligned.\n");
-            hr = WINED3DERR_INVALIDCALL;
-            goto release;
-        }
-
-        if (!wined3d_texture_check_block_align(dst_texture,
-                dst_sub_resource_idx % dst_texture->level_count, dst_box))
-        {
-            WARN("Destination rectangle not block-aligned.\n");
-            hr = WINED3DERR_INVALIDCALL;
-            goto release;
-        }
-
         hr = surface_cpu_blt_compressed(sbase, dbuf,
                 src_map.row_pitch, dst_map.row_pitch, dst_width, dst_height,
                 src_format, flags, fx);
@@ -3684,6 +3668,14 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
         return WINEDDERR_INVALIDRECT;
     }
 
+    if ((dst_texture->resource.format_flags & WINED3DFMT_FLAG_BLOCKS)
+            && !wined3d_texture_check_block_align(dst_texture,
+            dst_sub_resource_idx % dst_texture->level_count, &dst_box))
+    {
+        WARN("Destination rectangle not block-aligned.\n");
+        return WINED3DERR_INVALIDCALL;
+    }
+
     if (src_texture)
     {
         src_w = wined3d_texture_get_level_width(src_texture, src_surface->texture_level);
@@ -3696,6 +3688,14 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
             WARN("The application gave us a bad source rectangle.\n");
             return WINEDDERR_INVALIDRECT;
         }
+
+        if ((src_texture->resource.format_flags & WINED3DFMT_FLAG_BLOCKS)
+                && !wined3d_texture_check_block_align(src_texture,
+                src_sub_resource_idx % src_texture->level_count, &src_box))
+        {
+            WARN("Source rectangle not block-aligned.\n");
+            return WINED3DERR_INVALIDCALL;
+        }
     }
 
     if (!fx || !(fx->fx))
-- 
2.1.4




More information about the wine-patches mailing list