HRESULT d3d10_get_private_data(struct wined3d_private_store *store, REFGUID guid, UINT *data_size, void *data) { const struct wined3d_private_data *stored_data; DWORD size_in; if (!data_size) return E_INVALIDARG; if (!(stored_data = wined3d_private_store_get_private_data(store, guid))) { *data_size = 0; return DXGI_ERROR_NOT_FOUND; } size_in = *data_size; *data_size = stored_data->size; if (!data) return S_OK; if (size_in < stored_data->size) return DXGI_ERROR_MORE_DATA; if (stored_data->flags & WINED3DSPD_IUNKNOWN) IUnknown_AddRef(stored_data->content.object); memcpy(data, stored_data->content.data, stored_data->size); return S_OK; }
HRESULT d3d_set_private_data(struct wined3d_private_store *store, REFGUID guid, UINT data_size, const void *data) { struct wined3d_private_data *entry; HRESULT hr; wined3d_mutex_lock(); if (!data) { if (!(entry = wined3d_private_store_get_private_data(store, guid))) { wined3d_mutex_unlock(); return S_FALSE; } wined3d_private_store_free_private_data(store, entry); wined3d_mutex_unlock(); return S_OK; } hr = wined3d_private_store_set_private_data(store, guid, data, data_size, 0); wined3d_mutex_unlock(); return hr; }
HRESULT d3d10_set_private_data(struct wined3d_private_store *store, REFGUID guid, UINT data_size, const void *data) { struct wined3d_private_data *entry; if (!data) { if (!(entry = wined3d_private_store_get_private_data(store, guid))) return S_FALSE; wined3d_private_store_free_private_data(store, entry); return S_OK; } return wined3d_private_store_set_private_data(store, guid, data, data_size, 0); }
HRESULT d3d9_resource_free_private_data(struct d3d9_resource *resource, const GUID *guid) { struct wined3d_private_data *entry; wined3d_mutex_lock(); entry = wined3d_private_store_get_private_data(&resource->private_store, guid); if (!entry) { wined3d_mutex_unlock(); return D3DERR_NOTFOUND; } wined3d_private_store_free_private_data(&resource->private_store, entry); wined3d_mutex_unlock(); return D3D_OK; }
HRESULT dxgi_get_private_data(struct wined3d_private_store *store, REFGUID guid, UINT *data_size, void *data) { const struct wined3d_private_data *stored_data; DWORD size_in; HRESULT hr; if (!data_size) return E_INVALIDARG; wined3d_mutex_lock(); if (!(stored_data = wined3d_private_store_get_private_data(store, guid))) { hr = DXGI_ERROR_NOT_FOUND; *data_size = 0; goto done; } size_in = *data_size; *data_size = stored_data->size; if (!data) { hr = S_OK; goto done; } if (size_in < stored_data->size) { hr = DXGI_ERROR_MORE_DATA; goto done; } if (stored_data->flags & WINED3DSPD_IUNKNOWN) IUnknown_AddRef(stored_data->content.object); memcpy(data, stored_data->content.data, stored_data->size); hr = S_OK; done: wined3d_mutex_unlock(); return hr; }
HRESULT d3d9_resource_get_private_data(struct d3d9_resource *resource, const GUID *guid, void *data, DWORD *data_size) { const struct wined3d_private_data *stored_data; DWORD size_in; HRESULT hr; wined3d_mutex_lock(); stored_data = wined3d_private_store_get_private_data(&resource->private_store, guid); if (!stored_data) { hr = D3DERR_NOTFOUND; goto done; } size_in = *data_size; *data_size = stored_data->size; if (!data) { hr = D3D_OK; goto done; } if (size_in < stored_data->size) { hr = D3DERR_MOREDATA; goto done; } if (stored_data->flags & WINED3DSPD_IUNKNOWN) IUnknown_AddRef(stored_data->content.object); memcpy(data, stored_data->content.data, stored_data->size); hr = D3D_OK; done: wined3d_mutex_unlock(); return hr; }