[PATCH 2/5] wined3d: Reduce indentation in the colour blit case in wined3d_surface_blt().

Henri Verbeet hverbeet at codeweavers.com
Tue Apr 4 02:07:44 CDT 2017


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

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 35d540e..09d291c 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -3503,12 +3503,15 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
     struct wined3d_box src_box = {src_rect->left, src_rect->top, src_rect->right, src_rect->bottom, 0, 1};
     unsigned int dst_sub_resource_idx = surface_get_sub_resource_idx(dst_surface);
     unsigned int src_sub_resource_idx = surface_get_sub_resource_idx(src_surface);
+    struct wined3d_texture_sub_resource *src_sub_resource, *dst_sub_resource;
     struct wined3d_texture *dst_texture = dst_surface->container;
     struct wined3d_texture *src_texture = src_surface->container;
     struct wined3d_device *device = dst_texture->resource.device;
     struct wined3d_swapchain *src_swapchain, *dst_swapchain;
+    const struct wined3d_color_key *colour_key = NULL;
     DWORD src_ds_flags, dst_ds_flags;
     struct wined3d_context *context;
+    enum wined3d_blit_op blit_op;
     BOOL scale, convert;
     DWORD dst_location;
 
@@ -3625,110 +3628,104 @@ HRESULT wined3d_surface_blt(struct wined3d_surface *dst_surface, const RECT *dst
 
         return WINED3D_OK;
     }
-    else
-    {
-        struct wined3d_texture_sub_resource *src_sub_resource, *dst_sub_resource;
-        enum wined3d_blit_op blit_op = WINED3D_BLIT_OP_COLOR_BLIT;
-        const struct wined3d_color_key *colour_key = NULL;
 
-        TRACE("Colour blit.\n");
+    TRACE("Colour blit.\n");
 
-        dst_sub_resource = surface_get_sub_resource(dst_surface);
-        src_sub_resource = &src_texture->sub_resources[src_sub_resource_idx];
+    dst_sub_resource = &dst_texture->sub_resources[dst_sub_resource_idx];
+    src_sub_resource = &src_texture->sub_resources[src_sub_resource_idx];
 
-        /* In principle this would apply to depth blits as well, but we don't
-         * implement those in the CPU blitter at the moment. */
-        if ((dst_sub_resource->locations & dst_texture->resource.map_binding)
-                && (src_sub_resource->locations & src_texture->resource.map_binding))
-        {
-            if (scale)
-                TRACE("Not doing sysmem blit because of scaling.\n");
-            else if (convert)
-                TRACE("Not doing sysmem blit because of format conversion.\n");
-            else
-                goto cpu;
-        }
+    /* In principle this would apply to depth blits as well, but we don't
+     * implement those in the CPU blitter at the moment. */
+    if ((dst_sub_resource->locations & dst_texture->resource.map_binding)
+            && (src_sub_resource->locations & src_texture->resource.map_binding))
+    {
+        if (scale)
+            TRACE("Not doing sysmem blit because of scaling.\n");
+        else if (convert)
+            TRACE("Not doing sysmem blit because of format conversion.\n");
+        else
+            goto cpu;
+    }
 
-        if (flags & WINED3D_BLT_SRC_CKEY_OVERRIDE)
-        {
-            colour_key = &fx->src_color_key;
-            blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
-        }
-        else if (flags & WINED3D_BLT_SRC_CKEY)
-        {
-            colour_key = &src_texture->async.src_blt_color_key;
-            blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
-        }
-        else if (flags & WINED3D_BLT_ALPHA_TEST)
-        {
-            blit_op = WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST;
-        }
-        else if ((src_sub_resource->locations & WINED3D_LOCATION_SYSMEM)
-                && !(dst_sub_resource->locations & WINED3D_LOCATION_SYSMEM))
+    blit_op = WINED3D_BLIT_OP_COLOR_BLIT;
+    if (flags & WINED3D_BLT_SRC_CKEY_OVERRIDE)
+    {
+        colour_key = &fx->src_color_key;
+        blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
+    }
+    else if (flags & WINED3D_BLT_SRC_CKEY)
+    {
+        colour_key = &src_texture->async.src_blt_color_key;
+        blit_op = WINED3D_BLIT_OP_COLOR_BLIT_CKEY;
+    }
+    else if (flags & WINED3D_BLT_ALPHA_TEST)
+    {
+        blit_op = WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST;
+    }
+    else if ((src_sub_resource->locations & WINED3D_LOCATION_SYSMEM)
+            && !(dst_sub_resource->locations & WINED3D_LOCATION_SYSMEM))
+    {
+        /* Upload */
+        if (scale)
+            TRACE("Not doing upload because of scaling.\n");
+        else if (convert)
+            TRACE("Not doing upload because of format conversion.\n");
+        else
         {
-            /* Upload */
-            if (scale)
-                TRACE("Not doing upload because of scaling.\n");
-            else if (convert)
-                TRACE("Not doing upload because of format conversion.\n");
-            else
-            {
-                POINT dst_point = {dst_rect->left, dst_rect->top};
+            POINT dst_point = {dst_rect->left, dst_rect->top};
 
-                if (SUCCEEDED(surface_upload_from_surface(dst_surface, &dst_point, src_surface, src_rect)))
+            if (SUCCEEDED(surface_upload_from_surface(dst_surface, &dst_point, src_surface, src_rect)))
+            {
+                if (!wined3d_resource_is_offscreen(&dst_texture->resource))
                 {
-                    if (!wined3d_resource_is_offscreen(&dst_texture->resource))
-                    {
-                        context = context_acquire(device,
-                                dst_texture, dst_sub_resource_idx);
-                        wined3d_texture_load_location(dst_texture, dst_sub_resource_idx,
-                                context, dst_texture->resource.draw_binding);
-                        context_release(context);
-                    }
-                    return WINED3D_OK;
+                    context = context_acquire(device, dst_texture, dst_sub_resource_idx);
+                    wined3d_texture_load_location(dst_texture, dst_sub_resource_idx,
+                            context, dst_texture->resource.draw_binding);
+                    context_release(context);
                 }
+                return WINED3D_OK;
             }
         }
-        else if (dst_swapchain && dst_swapchain->back_buffers
-                && dst_texture == dst_swapchain->front_buffer
-                && src_texture == dst_swapchain->back_buffers[0])
-        {
-            /* Use present for back -> front blits. The idea behind this is
-             * that present is potentially faster than a blit, in particular
-             * when FBO blits aren't available. Some ddraw applications like
-             * Half-Life and Prince of Persia 3D use Blt() from the backbuffer
-             * to the frontbuffer instead of doing a Flip(). D3d8 and d3d9
-             * applications can't blit directly to the frontbuffer. */
-            enum wined3d_swap_effect swap_effect = dst_swapchain->desc.swap_effect;
-
-            TRACE("Using present for backbuffer -> frontbuffer blit.\n");
-
-            /* Set the swap effect to COPY, we don't want the backbuffer to
-             * become undefined. */
-            dst_swapchain->desc.swap_effect = WINED3D_SWAP_EFFECT_COPY;
-            wined3d_swapchain_present(dst_swapchain, NULL, NULL, dst_swapchain->win_handle, 0);
-            dst_swapchain->desc.swap_effect = swap_effect;
-
-            return WINED3D_OK;
-        }
+    }
+    else if (dst_swapchain && dst_swapchain->back_buffers
+            && dst_texture == dst_swapchain->front_buffer
+            && src_texture == dst_swapchain->back_buffers[0])
+    {
+        /* Use present for back -> front blits. The idea behind this is that
+         * present is potentially faster than a blit, in particular when FBO
+         * blits aren't available. Some ddraw applications like Half-Life and
+         * Prince of Persia 3D use Blt() from the backbuffer to the
+         * frontbuffer instead of doing a Flip(). D3d8 and d3d9 applications
+         * can't blit directly to the frontbuffer. */
+        enum wined3d_swap_effect swap_effect = dst_swapchain->desc.swap_effect;
 
-        if (dst_texture->resource.pool == WINED3D_POOL_SYSTEM_MEM)
-            dst_location = dst_texture->resource.map_binding;
-        else
-            dst_location = dst_texture->resource.draw_binding;
+        TRACE("Using present for backbuffer -> frontbuffer blit.\n");
 
-        context = context_acquire(device, dst_texture, dst_sub_resource_idx);
-        device->blitter->ops->blitter_blit(device->blitter, blit_op, context,
-                src_surface, src_texture->resource.draw_binding, src_rect,
-                dst_surface, dst_location, dst_rect, colour_key, filter);
-        context_release(context);
-
-        wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, dst_location);
-        wined3d_texture_invalidate_location(dst_texture, dst_sub_resource_idx, ~dst_location);
+        /* Set the swap effect to COPY, we don't want the backbuffer to become
+         * undefined. */
+        dst_swapchain->desc.swap_effect = WINED3D_SWAP_EFFECT_COPY;
+        wined3d_swapchain_present(dst_swapchain, NULL, NULL, dst_swapchain->win_handle, 0);
+        dst_swapchain->desc.swap_effect = swap_effect;
 
         return WINED3D_OK;
     }
 
+    if (dst_texture->resource.pool == WINED3D_POOL_SYSTEM_MEM)
+        dst_location = dst_texture->resource.map_binding;
+    else
+        dst_location = dst_texture->resource.draw_binding;
+
+    context = context_acquire(device, dst_texture, dst_sub_resource_idx);
+    device->blitter->ops->blitter_blit(device->blitter, blit_op, context,
+            src_surface, src_texture->resource.draw_binding, src_rect,
+            dst_surface, dst_location, dst_rect, colour_key, filter);
+    context_release(context);
+
+    wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, dst_location);
+    wined3d_texture_invalidate_location(dst_texture, dst_sub_resource_idx, ~dst_location);
+
+    return WINED3D_OK;
+
 fallback:
     /* Special cases for render targets. */
     if (SUCCEEDED(surface_blt_special(dst_surface, dst_rect, src_surface, src_rect, flags, fx, filter)))
-- 
2.1.4




More information about the wine-patches mailing list