Henri Verbeet : wined3d: Add a registry key to disable rendering swapchains onscreen.

Alexandre Julliard julliard at winehq.org
Wed Aug 24 14:05:19 CDT 2011


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Aug 23 20:08:06 2011 +0200

wined3d: Add a registry key to disable rendering swapchains onscreen.

We'll probably want to make this default to TRUE at some point, but at least
for the moment there still seem to be some performance advantages to rendering
onscreen in most cases.

---

 dlls/wined3d/swapchain.c       |    3 ++-
 dlls/wined3d/wined3d_main.c    |    7 +++++++
 dlls/wined3d/wined3d_private.h |    1 +
 3 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 80e1f4c..6edb043 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -824,7 +824,8 @@ void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain)
             swapchain->presentParms.BackBufferHeight,
             client_rect.right, client_rect.bottom);
 
-    if (swapchain->presentParms.BackBufferWidth == client_rect.right
+    if (!wined3d_settings.always_offscreen
+            && swapchain->presentParms.BackBufferWidth == client_rect.right
             && swapchain->presentParms.BackBufferHeight == client_rect.bottom)
     {
         TRACE("Backbuffer dimensions match window dimensions, rendering onscreen.\n");
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index 7a0d4b6..06af5b1 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -86,6 +86,7 @@ struct wined3d_settings wined3d_settings =
     NULL,           /* No wine logo by default */
     FALSE,          /* Disable multisampling for now due to Nvidia driver bugs which happens for some users */
     FALSE,          /* No strict draw ordering. */
+    FALSE,          /* Try to render onscreen by default. */
 };
 
 /* Do not call while under the GL lock. */
@@ -340,6 +341,12 @@ static BOOL wined3d_dll_init(HINSTANCE hInstDLL)
             TRACE("Enforcing strict draw ordering.\n");
             wined3d_settings.strict_draw_ordering = TRUE;
         }
+        if (!get_config_key(hkey, appkey, "AlwaysOffscreen", buffer, size)
+                && !strcmp(buffer,"enabled"))
+        {
+            TRACE("Always rendering backbuffers offscreen.\n");
+            wined3d_settings.always_offscreen = TRUE;
+        }
     }
     if (wined3d_settings.vs_mode == VS_HW)
         TRACE("Allow HW vertex shaders\n");
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 813b1ea..80517e3 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -271,6 +271,7 @@ struct wined3d_settings
     char *logo;
     int allow_multisampling;
     BOOL strict_draw_ordering;
+    BOOL always_offscreen;
 };
 
 extern struct wined3d_settings wined3d_settings DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list