=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: ddraw: Treat D3DTEXTUREMANAGE like TEXTUREMANAGE.

Alexandre Julliard julliard at winehq.org
Wed Oct 23 15:51:04 CDT 2013


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Wed Oct 23 12:05:38 2013 +0200

ddraw: Treat D3DTEXTUREMANAGE like TEXTUREMANAGE.

Sim City 4 uses this flag. The main problem I noticed was with
WINED3D_MAP_DISCARD handling introduced for surfaces in patches that
aren't yet in the tree, but the difference already matters for older
cards because of video memory accounting.

---

 dlls/ddraw/ddraw.c   |    4 ++--
 dlls/ddraw/surface.c |    6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index bdb375b..e01f923 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -2962,7 +2962,7 @@ static HRESULT CreateSurface(struct ddraw *ddraw, DDSURFACEDESC2 *DDSD,
         }
     }
 
-    if (DDSD->ddsCaps.dwCaps2 & DDSCAPS2_TEXTUREMANAGE)
+    if (DDSD->ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE))
     {
         if (!(DDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE))
         {
@@ -3001,7 +3001,7 @@ static HRESULT CreateSurface(struct ddraw *ddraw, DDSURFACEDESC2 *DDSD,
     }
 
     if (!(desc2.ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_SYSTEMMEMORY))
-            && !(desc2.ddsCaps.dwCaps2 & DDSCAPS2_TEXTUREMANAGE))
+            && !(desc2.ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE)))
     {
         enum wined3d_format_id format = wined3dformat_from_ddrawformat(&desc2.u4.ddpfPixelFormat);
         enum wined3d_resource_type rtype;
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 416c13f..e11b633 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -5608,7 +5608,7 @@ HRESULT ddraw_surface_create_texture(struct ddraw_surface *surface, DWORD surfac
     else
         layers = 1;
 
-    if (desc->ddsCaps.dwCaps2 & DDSCAPS2_TEXTUREMANAGE)
+    if (desc->ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE))
     {
         wined3d_desc.usage = WINED3DUSAGE_TEXTURE;
         pool = WINED3D_POOL_MANAGED;
@@ -5730,7 +5730,7 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw,
 
     if (!(desc->ddsCaps.dwCaps & (DDSCAPS_VIDEOMEMORY | DDSCAPS_SYSTEMMEMORY))
             && !((desc->ddsCaps.dwCaps & DDSCAPS_TEXTURE)
-            && (desc->ddsCaps.dwCaps2 & DDSCAPS2_TEXTUREMANAGE)))
+            && (desc->ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE))))
     {
         /* Tests show surfaces without memory flags get these flags added
          * right after creation. */
@@ -5760,7 +5760,7 @@ HRESULT ddraw_surface_init(struct ddraw_surface *surface, struct ddraw *ddraw,
     {
         pool = WINED3D_POOL_SYSTEM_MEM;
     }
-    else if (desc->ddsCaps.dwCaps2 & DDSCAPS2_TEXTUREMANAGE)
+    else if (desc->ddsCaps.dwCaps2 & (DDSCAPS2_TEXTUREMANAGE | DDSCAPS2_D3DTEXTUREMANAGE))
     {
         pool = WINED3D_POOL_MANAGED;
         /* Managed textures have the system memory flag set. */




More information about the wine-cvs mailing list