[PATCH 1/5] wined3d: Correctly handle the size parameter in get_private_data.
Stefan Dösinger
stefan at codeweavers.com
Wed Mar 12 08:08:23 CDT 2014
This behavior matches d3d8/9. Ddraw behaves slightly differently, a test
and fix will follow after replacing the wined3d_resource functions with
inline helpers.
---
dlls/wined3d/resource.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 04c3af4..8813af7 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -250,18 +250,21 @@ HRESULT CDECL wined3d_resource_get_private_data(const struct wined3d_resource *r
void *data, DWORD *data_size)
{
const struct private_data *d;
+ DWORD size_in;
TRACE("resource %p, guid %s, data %p, data_size %p.\n",
resource, debugstr_guid(guid), data, data_size);
d = resource_find_private_data(resource, guid);
- if (!d) return WINED3DERR_NOTFOUND;
-
- if (*data_size < d->size)
- {
- *data_size = d->size;
+ if (!d)
+ return WINED3DERR_NOTFOUND;
+
+ size_in = *data_size;
+ *data_size = d->size;
+ if (!data)
+ return WINED3D_OK;
+ if (size_in < d->size)
return WINED3DERR_MOREDATA;
- }
if (d->flags & WINED3DSPD_IUNKNOWN)
{
--
1.8.3.2
More information about the wine-patches
mailing list