[PATCH 1/6] wined3d/resource: Add flag WINED3D_MAP_WRITEONLY

Patrick Rudolph siro at das-labor.org
Tue Jul 26 12:09:06 CDT 2016


Convert D3D11_MAP_WRITE to WINED3D_MAP_WRITEONLY.
Convert DDLOCK_WRITEONLY to WINED3D_MAP_WRITEONLY.
Translate WINED3D_MAP_WRITEONLY to GL_MAP_WRITE_BIT.

Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
 dlls/d3d11/utils.c        | 3 +++
 dlls/ddraw/vertexbuffer.c | 4 +++-
 dlls/wined3d/resource.c   | 9 ++++++---
 include/wine/wined3d.h    | 1 +
 4 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/dlls/d3d11/utils.c b/dlls/d3d11/utils.c
index 36cad41..4c43f0d 100644
--- a/dlls/d3d11/utils.c
+++ b/dlls/d3d11/utils.c
@@ -606,6 +606,9 @@ DWORD wined3d_map_flags_from_d3d11_map_type(D3D11_MAP map_type)
         case D3D11_MAP_WRITE_NO_OVERWRITE:
             return WINED3D_MAP_NOOVERWRITE;
 
+        case D3D11_MAP_WRITE:
+            return WINED3D_MAP_WRITEONLY;
+
         default:
             FIXME("Unhandled map_type %#x.\n", map_type);
             return 0;
diff --git a/dlls/ddraw/vertexbuffer.c b/dlls/ddraw/vertexbuffer.c
index 84c0e69..abbbffb 100644
--- a/dlls/ddraw/vertexbuffer.c
+++ b/dlls/ddraw/vertexbuffer.c
@@ -232,13 +232,15 @@ static HRESULT WINAPI d3d_vertex_buffer7_Lock(IDirect3DVertexBuffer7 *iface,
 
     TRACE("iface %p, flags %#x, data %p, data_size %p.\n", iface, flags, data, data_size);
 
-    /* Writeonly: Pointless. Event: Unsupported by native according to the sdk
+    /* Event: Unsupported by native according to the sdk
      * nosyslock: Not applicable
      */
     if (!(flags & DDLOCK_WAIT))
         wined3d_flags |= WINED3D_MAP_DONOTWAIT;
     if (flags & DDLOCK_READONLY)
         wined3d_flags |= WINED3D_MAP_READONLY;
+    if (flags & DDLOCK_WRITEONLY)
+        wined3d_flags |= WINED3D_MAP_WRITEONLY;
     if (flags & DDLOCK_NOOVERWRITE)
         wined3d_flags |= WINED3D_MAP_NOOVERWRITE;
     if (flags & DDLOCK_DISCARDCONTENTS)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index a17203d..c483d7c 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -392,11 +392,14 @@ GLbitfield wined3d_resource_gl_map_flags(DWORD d3d_flags)
 {
     GLbitfield ret = 0;
 
-    if (!(d3d_flags & WINED3D_MAP_READONLY))
-        ret |= GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT;
+    if (d3d_flags & WINED3D_MAP_WRITEONLY)
+        return GL_MAP_WRITE_BIT;
+    else if (d3d_flags & WINED3D_MAP_READONLY)
+        return GL_MAP_READ_BIT;
+
+    ret = GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT;
     if (!(d3d_flags & (WINED3D_MAP_DISCARD | WINED3D_MAP_NOOVERWRITE)))
         ret |= GL_MAP_READ_BIT;
-
     if (d3d_flags & WINED3D_MAP_DISCARD)
         ret |= GL_MAP_INVALIDATE_BUFFER_BIT;
     if (d3d_flags & WINED3D_MAP_NOOVERWRITE)
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index a425ac5..773ae47 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -858,6 +858,7 @@ enum wined3d_display_rotation
 #define WINED3DUSAGE_QUERY_MASK                                 0x003f8000
 
 #define WINED3D_MAP_READONLY                                    0x0010
+#define WINED3D_MAP_WRITEONLY                                   0x0020
 #define WINED3D_MAP_NOSYSLOCK                                   0x0800
 #define WINED3D_MAP_NOOVERWRITE                                 0x1000
 #define WINED3D_MAP_DISCARD                                     0x2000
-- 
2.7.4




More information about the wine-patches mailing list