Re: [PATCH 1/5] wined3d: Decouple private data from the resource structure (try 6).
On 8 March 2014 22:53, Stefan Dösinger <stefan(a)codeweavers.com> wrote:
+static inline HRESULT wined3d_private_store_set_private_data(struct wined3d_private_store *store, + const GUID *guid, const void *data, DWORD data_size, DWORD flags) +{ + struct wined3d_private_data *entry; + + entry = wined3d_private_store_get_private_data(store, guid); + if (entry) + wined3d_private_store_free_private_data(store, entry); + + entry = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*entry)); + if (!entry) + return E_OUTOFMEMORY; + + entry->tag = *guid; + entry->flags = flags; + entry->size = data_size; + + if (flags & WINED3DSPD_IUNKNOWN) + { + if (data_size != sizeof(IUnknown *)) + { + HeapFree(GetProcessHeap(), 0, entry); + return WINED3DERR_INVALIDCALL; + } + entry->content.object = (IUnknown *)data; + IUnknown_AddRef(entry->content.object); + } + else + { + entry->content.data = HeapAlloc(GetProcessHeap(), 0, data_size); + if (!entry->content.data) + { + HeapFree(GetProcessHeap(), 0, entry); + return E_OUTOFMEMORY; + } + memcpy(entry->content.data, data, data_size); + } + list_add_tail(&store->content, &entry->entry); + + return WINED3D_OK; +} + I think this has room for improvement as well.
participants (1)
-
Henri Verbeet