[PATCH 3/6] d3d9: Implement IDirect3DVertexBuffer9 private data handling on top of wined3d_resource.
Henri Verbeet
hverbeet at codeweavers.com
Thu Jun 16 15:38:26 CDT 2011
---
dlls/d3d9/buffer.c | 22 +++++++++++++++++-----
dlls/wined3d/buffer.c | 6 +++---
dlls/wined3d/resource.c | 11 ++++++-----
dlls/wined3d/surface.c | 6 +++---
dlls/wined3d/texture.c | 6 +++---
dlls/wined3d/volume.c | 6 +++---
dlls/wined3d/wined3d.spec | 3 +++
dlls/wined3d/wined3d_private.h | 5 -----
include/wine/wined3d.h | 5 +++++
9 files changed, 43 insertions(+), 27 deletions(-)
diff --git a/dlls/d3d9/buffer.c b/dlls/d3d9/buffer.c
index d9a5564..2179e80 100644
--- a/dlls/d3d9/buffer.c
+++ b/dlls/d3d9/buffer.c
@@ -23,6 +23,11 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
+static inline IDirect3DVertexBuffer9Impl *impl_from_IDirect3DVertexBuffer9(IDirect3DVertexBuffer9 *iface)
+{
+ return CONTAINING_RECORD(iface, IDirect3DVertexBuffer9Impl, lpVtbl);
+}
+
static HRESULT WINAPI d3d9_vertexbuffer_QueryInterface(IDirect3DVertexBuffer9 *iface, REFIID riid, void **object)
{
TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), object);
@@ -97,14 +102,16 @@ static HRESULT WINAPI d3d9_vertexbuffer_GetDevice(IDirect3DVertexBuffer9 *iface,
static HRESULT WINAPI d3d9_vertexbuffer_SetPrivateData(IDirect3DVertexBuffer9 *iface,
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
{
+ IDirect3DVertexBuffer9Impl *buffer = impl_from_IDirect3DVertexBuffer9(iface);
+ struct wined3d_resource *resource;
HRESULT hr;
TRACE("iface %p, guid %s, data %p, data_size %u, flags %#x.\n",
iface, debugstr_guid(guid), data, data_size, flags);
wined3d_mutex_lock();
- hr = wined3d_buffer_set_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
- guid, data, data_size, flags);
+ resource = wined3d_buffer_get_resource(buffer->wineD3DVertexBuffer);
+ hr = wined3d_resource_set_private_data(resource, guid, data, data_size, flags);
wined3d_mutex_unlock();
return hr;
@@ -113,14 +120,16 @@ static HRESULT WINAPI d3d9_vertexbuffer_SetPrivateData(IDirect3DVertexBuffer9 *i
static HRESULT WINAPI d3d9_vertexbuffer_GetPrivateData(IDirect3DVertexBuffer9 *iface,
REFGUID guid, void *data, DWORD *data_size)
{
+ IDirect3DVertexBuffer9Impl *buffer = impl_from_IDirect3DVertexBuffer9(iface);
+ struct wined3d_resource *resource;
HRESULT hr;
TRACE("iface %p, guid %s, data %p, data_size %p.\n",
iface, debugstr_guid(guid), data, data_size);
wined3d_mutex_lock();
- hr = wined3d_buffer_get_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
- guid, data, data_size);
+ resource = wined3d_buffer_get_resource(buffer->wineD3DVertexBuffer);
+ hr = wined3d_resource_get_private_data(resource, guid, data, data_size);
wined3d_mutex_unlock();
return hr;
@@ -128,12 +137,15 @@ static HRESULT WINAPI d3d9_vertexbuffer_GetPrivateData(IDirect3DVertexBuffer9 *i
static HRESULT WINAPI d3d9_vertexbuffer_FreePrivateData(IDirect3DVertexBuffer9 *iface, REFGUID guid)
{
+ IDirect3DVertexBuffer9Impl *buffer = impl_from_IDirect3DVertexBuffer9(iface);
+ struct wined3d_resource *resource;
HRESULT hr;
TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
wined3d_mutex_lock();
- hr = wined3d_buffer_free_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer, guid);
+ resource = wined3d_buffer_get_resource(buffer->wineD3DVertexBuffer);
+ hr = wined3d_resource_free_private_data(resource, guid);
wined3d_mutex_unlock();
return hr;
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 1e402a1..306849a 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -588,18 +588,18 @@ void * CDECL wined3d_buffer_get_parent(const struct wined3d_buffer *buffer)
HRESULT CDECL wined3d_buffer_set_private_data(struct wined3d_buffer *buffer,
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
{
- return resource_set_private_data(&buffer->resource, guid, data, data_size, flags);
+ return wined3d_resource_set_private_data(&buffer->resource, guid, data, data_size, flags);
}
HRESULT CDECL wined3d_buffer_get_private_data(const struct wined3d_buffer *buffer,
REFGUID guid, void *data, DWORD *data_size)
{
- return resource_get_private_data(&buffer->resource, guid, data, data_size);
+ return wined3d_resource_get_private_data(&buffer->resource, guid, data, data_size);
}
HRESULT CDECL wined3d_buffer_free_private_data(struct wined3d_buffer *buffer, REFGUID guid)
{
- return resource_free_private_data(&buffer->resource, guid);
+ return wined3d_resource_free_private_data(&buffer->resource, guid);
}
DWORD CDECL wined3d_buffer_set_priority(struct wined3d_buffer *buffer, DWORD priority)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 4060bc6..699a61b 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -158,7 +158,7 @@ void resource_cleanup(struct wined3d_resource *resource)
LIST_FOR_EACH_SAFE(e1, e2, &resource->privateData)
{
data = LIST_ENTRY(e1, struct private_data, entry);
- hr = resource_free_private_data(resource, &data->tag);
+ hr = wined3d_resource_free_private_data(resource, &data->tag);
if (FAILED(hr))
ERR("Failed to free private data when destroying resource %p, hr = %#x.\n", resource, hr);
}
@@ -195,7 +195,7 @@ static struct private_data *resource_find_private_data(const struct wined3d_reso
return NULL;
}
-HRESULT resource_set_private_data(struct wined3d_resource *resource, REFGUID guid,
+HRESULT CDECL wined3d_resource_set_private_data(struct wined3d_resource *resource, REFGUID guid,
const void *data, DWORD data_size, DWORD flags)
{
struct private_data *d;
@@ -203,7 +203,7 @@ HRESULT resource_set_private_data(struct wined3d_resource *resource, REFGUID gui
TRACE("resource %p, riid %s, data %p, data_size %u, flags %#x.\n",
resource, debugstr_guid(guid), data, data_size, flags);
- resource_free_private_data(resource, guid);
+ wined3d_resource_free_private_data(resource, guid);
d = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*d));
if (!d) return E_OUTOFMEMORY;
@@ -239,7 +239,8 @@ HRESULT resource_set_private_data(struct wined3d_resource *resource, REFGUID gui
return WINED3D_OK;
}
-HRESULT resource_get_private_data(const struct wined3d_resource *resource, REFGUID guid, void *data, DWORD *data_size)
+HRESULT CDECL wined3d_resource_get_private_data(const struct wined3d_resource *resource, REFGUID guid,
+ void *data, DWORD *data_size)
{
const struct private_data *d;
@@ -273,7 +274,7 @@ HRESULT resource_get_private_data(const struct wined3d_resource *resource, REFGU
return WINED3D_OK;
}
-HRESULT resource_free_private_data(struct wined3d_resource *resource, REFGUID guid)
+HRESULT CDECL wined3d_resource_free_private_data(struct wined3d_resource *resource, REFGUID guid)
{
struct private_data *data;
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 2bf1436..d3b54c0 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -2707,18 +2707,18 @@ ULONG CDECL wined3d_surface_decref(struct wined3d_surface *surface)
HRESULT CDECL wined3d_surface_set_private_data(struct wined3d_surface *surface,
REFGUID riid, const void *data, DWORD data_size, DWORD flags)
{
- return resource_set_private_data(&surface->resource, riid, data, data_size, flags);
+ return wined3d_resource_set_private_data(&surface->resource, riid, data, data_size, flags);
}
HRESULT CDECL wined3d_surface_get_private_data(const struct wined3d_surface *surface,
REFGUID guid, void *data, DWORD *data_size)
{
- return resource_get_private_data(&surface->resource, guid, data, data_size);
+ return wined3d_resource_get_private_data(&surface->resource, guid, data, data_size);
}
HRESULT CDECL wined3d_surface_free_private_data(struct wined3d_surface *surface, REFGUID refguid)
{
- return resource_free_private_data(&surface->resource, refguid);
+ return wined3d_resource_free_private_data(&surface->resource, refguid);
}
DWORD CDECL wined3d_surface_set_priority(struct wined3d_surface *surface, DWORD priority)
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index c138d01..72d0d4a 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -453,18 +453,18 @@ ULONG CDECL wined3d_texture_decref(struct wined3d_texture *texture)
HRESULT CDECL wined3d_texture_set_private_data(struct wined3d_texture *texture,
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
{
- return resource_set_private_data(&texture->resource, guid, data, data_size, flags);
+ return wined3d_resource_set_private_data(&texture->resource, guid, data, data_size, flags);
}
HRESULT CDECL wined3d_texture_get_private_data(const struct wined3d_texture *texture,
REFGUID guid, void *data, DWORD *data_size)
{
- return resource_get_private_data(&texture->resource, guid, data, data_size);
+ return wined3d_resource_get_private_data(&texture->resource, guid, data, data_size);
}
HRESULT CDECL wined3d_texture_free_private_data(struct wined3d_texture *texture, REFGUID guid)
{
- return resource_free_private_data(&texture->resource, guid);
+ return wined3d_resource_free_private_data(&texture->resource, guid);
}
DWORD CDECL wined3d_texture_set_priority(struct wined3d_texture *texture, DWORD priority)
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 24623b5..ec10d43 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -176,18 +176,18 @@ void * CDECL wined3d_volume_get_parent(const struct wined3d_volume *volume)
HRESULT CDECL wined3d_volume_set_private_data(struct wined3d_volume *volume,
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
{
- return resource_set_private_data(&volume->resource, guid, data, data_size, flags);
+ return wined3d_resource_set_private_data(&volume->resource, guid, data, data_size, flags);
}
HRESULT CDECL wined3d_volume_get_private_data(const struct wined3d_volume *volume,
REFGUID guid, void *data, DWORD *data_size)
{
- return resource_get_private_data(&volume->resource, guid, data, data_size);
+ return wined3d_resource_get_private_data(&volume->resource, guid, data, data_size);
}
HRESULT CDECL wined3d_volume_free_private_data(struct wined3d_volume *volume, REFGUID guid)
{
- return resource_free_private_data(&volume->resource, guid);
+ return wined3d_resource_free_private_data(&volume->resource, guid);
}
DWORD CDECL wined3d_volume_set_priority(struct wined3d_volume *volume, DWORD priority)
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index cfdd236..8956774 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -180,8 +180,11 @@
@ cdecl wined3d_query_incref(ptr)
@ cdecl wined3d_query_issue(ptr long)
+@ cdecl wined3d_resource_free_private_data(ptr ptr)
@ cdecl wined3d_resource_get_desc(ptr ptr)
@ cdecl wined3d_resource_get_parent(ptr)
+@ cdecl wined3d_resource_get_private_data(ptr ptr ptr ptr)
+@ cdecl wined3d_resource_set_private_data(ptr ptr ptr long long)
@ cdecl wined3d_rendertarget_view_create(ptr ptr ptr)
@ cdecl wined3d_rendertarget_view_decref(ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 52af441..9a2a383 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1850,10 +1850,7 @@ struct wined3d_resource
};
void resource_cleanup(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
-HRESULT resource_free_private_data(struct wined3d_resource *resource, REFGUID guid) DECLSPEC_HIDDEN;
DWORD resource_get_priority(const struct wined3d_resource *resource) DECLSPEC_HIDDEN;
-HRESULT resource_get_private_data(const struct wined3d_resource *resource, REFGUID guid,
- void *data, DWORD *data_size) DECLSPEC_HIDDEN;
HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *device,
WINED3DRESOURCETYPE resource_type, const struct wined3d_format *format,
WINED3DMULTISAMPLE_TYPE multisample_type, UINT multisample_quality,
@@ -1861,8 +1858,6 @@ HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *
void *parent, const struct wined3d_parent_ops *parent_ops,
const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN;
DWORD resource_set_priority(struct wined3d_resource *resource, DWORD priority) DECLSPEC_HIDDEN;
-HRESULT resource_set_private_data(struct wined3d_resource *resource, REFGUID guid,
- const void *data, DWORD data_size, DWORD flags) DECLSPEC_HIDDEN;
void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
/* Tests show that the start address of resources is 32 byte aligned */
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index b88d201..87d219b 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2375,9 +2375,14 @@ WINED3DQUERYTYPE __cdecl wined3d_query_get_type(const struct wined3d_query *quer
ULONG __cdecl wined3d_query_incref(struct wined3d_query *query);
HRESULT __cdecl wined3d_query_issue(struct wined3d_query *query, DWORD flags);
+HRESULT __cdecl wined3d_resource_free_private_data(struct wined3d_resource *resource, REFGUID guid);
void __cdecl wined3d_resource_get_desc(const struct wined3d_resource *resource,
struct wined3d_resource_desc *desc);
void * __cdecl wined3d_resource_get_parent(const struct wined3d_resource *resource);
+HRESULT __cdecl wined3d_resource_get_private_data(const struct wined3d_resource *resource,
+ REFGUID guid, void *data, DWORD *data_size);
+HRESULT __cdecl wined3d_resource_set_private_data(struct wined3d_resource *resource,
+ REFGUID guid, const void *data, DWORD data_size, DWORD flags);
HRESULT __cdecl wined3d_rendertarget_view_create(struct wined3d_resource *resource,
void *parent, struct wined3d_rendertarget_view **rendertarget_view);
--
1.7.3.4
More information about the wine-patches
mailing list