You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-09-12 18:50:20 -07:00
wined3d-CSMT_Main: Use DISCARD when uploading full buffer.
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
From 7aaa4f9b8ca813f34256e74f7d676c4dbd5e09e0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 20 Feb 2017 01:52:27 +0100
|
||||
Subject: wined3d: Discard buffer during upload when replacing complete
|
||||
content.
|
||||
|
||||
---
|
||||
dlls/wined3d/buffer.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
|
||||
index d7c6b02a830..b320329e62d 100644
|
||||
--- a/dlls/wined3d/buffer.c
|
||||
+++ b/dlls/wined3d/buffer.c
|
||||
@@ -1270,6 +1270,7 @@ HRESULT wined3d_buffer_upload_data(struct wined3d_buffer *buffer,
|
||||
const struct wined3d_box *box, const void *data)
|
||||
{
|
||||
UINT offset, size;
|
||||
+ DWORD flags = 0;
|
||||
HRESULT hr;
|
||||
BYTE *ptr;
|
||||
|
||||
@@ -1284,7 +1285,10 @@ HRESULT wined3d_buffer_upload_data(struct wined3d_buffer *buffer,
|
||||
size = buffer->resource.size;
|
||||
}
|
||||
|
||||
- if (FAILED(hr = wined3d_buffer_map(buffer, offset, size, &ptr, 0)))
|
||||
+ if (offset == 0 && size == buffer->resource.size)
|
||||
+ flags = WINED3D_MAP_DISCARD;
|
||||
+
|
||||
+ if (FAILED(hr = wined3d_buffer_map(buffer, offset, size, &ptr, flags)))
|
||||
return hr;
|
||||
|
||||
memcpy(ptr, data, size);
|
||||
--
|
||||
2.11.0
|
||||
|
||||
@@ -96,6 +96,34 @@ diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader
|
||||
shader_arb_ps_local_constants(compiled, context, state, rt_height);
|
||||
}
|
||||
|
||||
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
|
||||
--- a/dlls/wined3d/buffer.c
|
||||
+++ b/dlls/wined3d/buffer.c
|
||||
@@ -1270,6 +1270,9 @@ HRESULT wined3d_buffer_upload_data(struct wined3d_buffer *buffer,
|
||||
const struct wined3d_box *box, const void *data)
|
||||
{
|
||||
UINT offset, size;
|
||||
+#if defined(STAGING_CSMT)
|
||||
+ DWORD flags = 0;
|
||||
+#endif /* STAGING_CSMT */
|
||||
HRESULT hr;
|
||||
BYTE *ptr;
|
||||
|
||||
@@ -1284,7 +1287,14 @@ HRESULT wined3d_buffer_upload_data(struct wined3d_buffer *buffer,
|
||||
size = buffer->resource.size;
|
||||
}
|
||||
|
||||
+#if !defined(STAGING_CSMT)
|
||||
if (FAILED(hr = wined3d_buffer_map(buffer, offset, size, &ptr, 0)))
|
||||
+#else /* STAGING_CSMT */
|
||||
+ if (offset == 0 && size == buffer->resource.size)
|
||||
+ flags = WINED3D_MAP_DISCARD;
|
||||
+
|
||||
+ if (FAILED(hr = wined3d_buffer_map(buffer, offset, size, &ptr, flags)))
|
||||
+#endif /* STAGING_CSMT */
|
||||
return hr;
|
||||
|
||||
memcpy(ptr, data, size);
|
||||
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
|
||||
--- a/dlls/wined3d/context.c
|
||||
+++ b/dlls/wined3d/context.c
|
||||
|
||||
Reference in New Issue
Block a user