d3d9: Implement IDirect3DVertexBuffer9 private data handling on top of wined3d_resource.
This commit is contained in:
parent
45a0e95962
commit
469eba24c0
|
@ -23,6 +23,11 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(d3d9);
|
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)
|
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);
|
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,
|
static HRESULT WINAPI d3d9_vertexbuffer_SetPrivateData(IDirect3DVertexBuffer9 *iface,
|
||||||
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
|
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
|
||||||
{
|
{
|
||||||
|
IDirect3DVertexBuffer9Impl *buffer = impl_from_IDirect3DVertexBuffer9(iface);
|
||||||
|
struct wined3d_resource *resource;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("iface %p, guid %s, data %p, data_size %u, flags %#x.\n",
|
TRACE("iface %p, guid %s, data %p, data_size %u, flags %#x.\n",
|
||||||
iface, debugstr_guid(guid), data, data_size, flags);
|
iface, debugstr_guid(guid), data, data_size, flags);
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
hr = wined3d_buffer_set_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
|
resource = wined3d_buffer_get_resource(buffer->wineD3DVertexBuffer);
|
||||||
guid, data, data_size, flags);
|
hr = wined3d_resource_set_private_data(resource, guid, data, data_size, flags);
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -113,14 +120,16 @@ static HRESULT WINAPI d3d9_vertexbuffer_SetPrivateData(IDirect3DVertexBuffer9 *i
|
||||||
static HRESULT WINAPI d3d9_vertexbuffer_GetPrivateData(IDirect3DVertexBuffer9 *iface,
|
static HRESULT WINAPI d3d9_vertexbuffer_GetPrivateData(IDirect3DVertexBuffer9 *iface,
|
||||||
REFGUID guid, void *data, DWORD *data_size)
|
REFGUID guid, void *data, DWORD *data_size)
|
||||||
{
|
{
|
||||||
|
IDirect3DVertexBuffer9Impl *buffer = impl_from_IDirect3DVertexBuffer9(iface);
|
||||||
|
struct wined3d_resource *resource;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("iface %p, guid %s, data %p, data_size %p.\n",
|
TRACE("iface %p, guid %s, data %p, data_size %p.\n",
|
||||||
iface, debugstr_guid(guid), data, data_size);
|
iface, debugstr_guid(guid), data, data_size);
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
hr = wined3d_buffer_get_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
|
resource = wined3d_buffer_get_resource(buffer->wineD3DVertexBuffer);
|
||||||
guid, data, data_size);
|
hr = wined3d_resource_get_private_data(resource, guid, data, data_size);
|
||||||
wined3d_mutex_unlock();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
@ -128,12 +137,15 @@ static HRESULT WINAPI d3d9_vertexbuffer_GetPrivateData(IDirect3DVertexBuffer9 *i
|
||||||
|
|
||||||
static HRESULT WINAPI d3d9_vertexbuffer_FreePrivateData(IDirect3DVertexBuffer9 *iface, REFGUID guid)
|
static HRESULT WINAPI d3d9_vertexbuffer_FreePrivateData(IDirect3DVertexBuffer9 *iface, REFGUID guid)
|
||||||
{
|
{
|
||||||
|
IDirect3DVertexBuffer9Impl *buffer = impl_from_IDirect3DVertexBuffer9(iface);
|
||||||
|
struct wined3d_resource *resource;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
|
TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
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();
|
wined3d_mutex_unlock();
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
|
|
@ -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,
|
HRESULT CDECL wined3d_buffer_set_private_data(struct wined3d_buffer *buffer,
|
||||||
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
|
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,
|
HRESULT CDECL wined3d_buffer_get_private_data(const struct wined3d_buffer *buffer,
|
||||||
REFGUID guid, void *data, DWORD *data_size)
|
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)
|
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)
|
DWORD CDECL wined3d_buffer_set_priority(struct wined3d_buffer *buffer, DWORD priority)
|
||||||
|
|
|
@ -158,7 +158,7 @@ void resource_cleanup(struct wined3d_resource *resource)
|
||||||
LIST_FOR_EACH_SAFE(e1, e2, &resource->privateData)
|
LIST_FOR_EACH_SAFE(e1, e2, &resource->privateData)
|
||||||
{
|
{
|
||||||
data = LIST_ENTRY(e1, struct private_data, entry);
|
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))
|
if (FAILED(hr))
|
||||||
ERR("Failed to free private data when destroying resource %p, hr = %#x.\n", resource, 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;
|
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)
|
const void *data, DWORD data_size, DWORD flags)
|
||||||
{
|
{
|
||||||
struct private_data *d;
|
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",
|
TRACE("resource %p, riid %s, data %p, data_size %u, flags %#x.\n",
|
||||||
resource, debugstr_guid(guid), data, data_size, flags);
|
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));
|
d = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*d));
|
||||||
if (!d) return E_OUTOFMEMORY;
|
if (!d) return E_OUTOFMEMORY;
|
||||||
|
@ -239,7 +239,8 @@ HRESULT resource_set_private_data(struct wined3d_resource *resource, REFGUID gui
|
||||||
return WINED3D_OK;
|
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;
|
const struct private_data *d;
|
||||||
|
|
||||||
|
@ -273,7 +274,7 @@ HRESULT resource_get_private_data(const struct wined3d_resource *resource, REFGU
|
||||||
|
|
||||||
return WINED3D_OK;
|
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;
|
struct private_data *data;
|
||||||
|
|
||||||
|
|
|
@ -2707,18 +2707,18 @@ ULONG CDECL wined3d_surface_decref(struct wined3d_surface *surface)
|
||||||
HRESULT CDECL wined3d_surface_set_private_data(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)
|
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,
|
HRESULT CDECL wined3d_surface_get_private_data(const struct wined3d_surface *surface,
|
||||||
REFGUID guid, void *data, DWORD *data_size)
|
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)
|
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)
|
DWORD CDECL wined3d_surface_set_priority(struct wined3d_surface *surface, DWORD priority)
|
||||||
|
|
|
@ -453,18 +453,18 @@ ULONG CDECL wined3d_texture_decref(struct wined3d_texture *texture)
|
||||||
HRESULT CDECL wined3d_texture_set_private_data(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)
|
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,
|
HRESULT CDECL wined3d_texture_get_private_data(const struct wined3d_texture *texture,
|
||||||
REFGUID guid, void *data, DWORD *data_size)
|
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)
|
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)
|
DWORD CDECL wined3d_texture_set_priority(struct wined3d_texture *texture, DWORD priority)
|
||||||
|
|
|
@ -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,
|
HRESULT CDECL wined3d_volume_set_private_data(struct wined3d_volume *volume,
|
||||||
REFGUID guid, const void *data, DWORD data_size, DWORD flags)
|
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,
|
HRESULT CDECL wined3d_volume_get_private_data(const struct wined3d_volume *volume,
|
||||||
REFGUID guid, void *data, DWORD *data_size)
|
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)
|
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)
|
DWORD CDECL wined3d_volume_set_priority(struct wined3d_volume *volume, DWORD priority)
|
||||||
|
|
|
@ -180,8 +180,11 @@
|
||||||
@ cdecl wined3d_query_incref(ptr)
|
@ cdecl wined3d_query_incref(ptr)
|
||||||
@ cdecl wined3d_query_issue(ptr long)
|
@ 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_desc(ptr ptr)
|
||||||
@ cdecl wined3d_resource_get_parent(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_create(ptr ptr ptr)
|
||||||
@ cdecl wined3d_rendertarget_view_decref(ptr)
|
@ cdecl wined3d_rendertarget_view_decref(ptr)
|
||||||
|
|
|
@ -1850,10 +1850,7 @@ struct wined3d_resource
|
||||||
};
|
};
|
||||||
|
|
||||||
void resource_cleanup(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
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;
|
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,
|
HRESULT resource_init(struct wined3d_resource *resource, struct wined3d_device *device,
|
||||||
WINED3DRESOURCETYPE resource_type, const struct wined3d_format *format,
|
WINED3DRESOURCETYPE resource_type, const struct wined3d_format *format,
|
||||||
WINED3DMULTISAMPLE_TYPE multisample_type, UINT multisample_quality,
|
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,
|
void *parent, const struct wined3d_parent_ops *parent_ops,
|
||||||
const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN;
|
const struct wined3d_resource_ops *resource_ops) DECLSPEC_HIDDEN;
|
||||||
DWORD resource_set_priority(struct wined3d_resource *resource, DWORD priority) 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;
|
void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* Tests show that the start address of resources is 32 byte aligned */
|
/* Tests show that the start address of resources is 32 byte aligned */
|
||||||
|
|
|
@ -2375,9 +2375,14 @@ WINED3DQUERYTYPE __cdecl wined3d_query_get_type(const struct wined3d_query *quer
|
||||||
ULONG __cdecl wined3d_query_incref(struct wined3d_query *query);
|
ULONG __cdecl wined3d_query_incref(struct wined3d_query *query);
|
||||||
HRESULT __cdecl wined3d_query_issue(struct wined3d_query *query, DWORD flags);
|
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,
|
void __cdecl wined3d_resource_get_desc(const struct wined3d_resource *resource,
|
||||||
struct wined3d_resource_desc *desc);
|
struct wined3d_resource_desc *desc);
|
||||||
void * __cdecl wined3d_resource_get_parent(const struct wined3d_resource *resource);
|
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,
|
HRESULT __cdecl wined3d_rendertarget_view_create(struct wined3d_resource *resource,
|
||||||
void *parent, struct wined3d_rendertarget_view **rendertarget_view);
|
void *parent, struct wined3d_rendertarget_view **rendertarget_view);
|
||||||
|
|
Loading…
Reference in New Issue