[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