wined3d: Remove COM from the buffer implementation.
diff --git a/dlls/d3d9/buffer.c b/dlls/d3d9/buffer.c
index 231e0c8..77234f8 100644
--- a/dlls/d3d9/buffer.c
+++ b/dlls/d3d9/buffer.c
@@ -53,7 +53,7 @@
     {
         IDirect3DDevice9Ex_AddRef(buffer->parentDevice);
         wined3d_mutex_lock();
-        IWineD3DBuffer_AddRef(buffer->wineD3DVertexBuffer);
+        wined3d_buffer_incref(buffer->wineD3DVertexBuffer);
         wined3d_mutex_unlock();
     }
 
@@ -72,7 +72,7 @@
         IDirect3DDevice9Ex *device = buffer->parentDevice;
 
         wined3d_mutex_lock();
-        IWineD3DBuffer_Release(buffer->wineD3DVertexBuffer);
+        wined3d_buffer_decref(buffer->wineD3DVertexBuffer);
         wined3d_mutex_unlock();
 
         /* Release the device last, as it may cause the device to be destroyed. */
@@ -103,7 +103,7 @@
             iface, debugstr_guid(guid), data, data_size, flags);
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_SetPrivateData(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
+    hr = wined3d_buffer_set_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
             guid, data, data_size, flags);
     wined3d_mutex_unlock();
 
@@ -119,7 +119,7 @@
             iface, debugstr_guid(guid), data, data_size);
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_GetPrivateData(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
+    hr = wined3d_buffer_get_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
             guid, data, data_size);
     wined3d_mutex_unlock();
 
@@ -133,7 +133,7 @@
     TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_FreePrivateData(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer, guid);
+    hr = wined3d_buffer_free_private_data(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer, guid);
     wined3d_mutex_unlock();
 
     return hr;
@@ -146,7 +146,7 @@
     TRACE("iface %p, priority %u.\n", iface, priority);
 
     wined3d_mutex_lock();
-    previous = IWineD3DBuffer_SetPriority(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer, priority);
+    previous = wined3d_buffer_set_priority(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer, priority);
     wined3d_mutex_unlock();
 
     return previous;
@@ -159,7 +159,7 @@
     TRACE("iface %p.\n", iface);
 
     wined3d_mutex_lock();
-    priority = IWineD3DBuffer_GetPriority(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer);
+    priority = wined3d_buffer_get_priority(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer);
     wined3d_mutex_unlock();
 
     return priority;
@@ -170,7 +170,7 @@
     TRACE("iface %p.\n", iface);
 
     wined3d_mutex_lock();
-    IWineD3DBuffer_PreLoad(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer);
+    wined3d_buffer_preload(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer);
     wined3d_mutex_unlock();
 }
 
@@ -190,7 +190,7 @@
             iface, offset, size, data, flags);
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_Map(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
+    hr = wined3d_buffer_map(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer,
             offset, size, (BYTE **)data, flags);
     wined3d_mutex_unlock();
 
@@ -202,7 +202,7 @@
     TRACE("iface %p.\n", iface);
 
     wined3d_mutex_lock();
-    IWineD3DBuffer_Unmap(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer);
+    wined3d_buffer_unmap(((IDirect3DVertexBuffer9Impl *)iface)->wineD3DVertexBuffer);
     wined3d_mutex_unlock();
 
     return D3D_OK;
@@ -216,7 +216,7 @@
     TRACE("iface %p, desc %p.\n", iface, desc);
 
     wined3d_mutex_lock();
-    IWineD3DBuffer_GetDesc(buffer->wineD3DVertexBuffer, &wined3d_desc);
+    wined3d_buffer_get_desc(buffer->wineD3DVertexBuffer, &wined3d_desc);
     wined3d_mutex_unlock();
 
     desc->Format = D3DFMT_VERTEXDATA;
@@ -315,7 +315,7 @@
     {
         IDirect3DDevice9Ex_AddRef(buffer->parentDevice);
         wined3d_mutex_lock();
-        IWineD3DBuffer_AddRef(buffer->wineD3DIndexBuffer);
+        wined3d_buffer_incref(buffer->wineD3DIndexBuffer);
         wined3d_mutex_unlock();
     }
 
@@ -334,7 +334,7 @@
         IDirect3DDevice9Ex *device = buffer->parentDevice;
 
         wined3d_mutex_lock();
-        IWineD3DBuffer_Release(buffer->wineD3DIndexBuffer);
+        wined3d_buffer_decref(buffer->wineD3DIndexBuffer);
         wined3d_mutex_unlock();
 
         /* Release the device last, as it may cause the device to be destroyed. */
@@ -365,7 +365,7 @@
             iface, debugstr_guid(guid), data, data_size, flags);
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_SetPrivateData(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer,
+    hr = wined3d_buffer_set_private_data(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer,
             guid, data, data_size, flags);
     wined3d_mutex_unlock();
 
@@ -381,7 +381,7 @@
             iface, debugstr_guid(guid), data, data_size);
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_GetPrivateData(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer,
+    hr = wined3d_buffer_get_private_data(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer,
             guid, data, data_size);
     wined3d_mutex_unlock();
 
@@ -395,7 +395,7 @@
     TRACE("iface %p, guid %s.\n", iface, debugstr_guid(guid));
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_FreePrivateData(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer, guid);
+    hr = wined3d_buffer_free_private_data(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer, guid);
     wined3d_mutex_unlock();
 
     return hr;
@@ -408,7 +408,7 @@
     TRACE("iface %p, priority %u.\n", iface, priority);
 
     wined3d_mutex_lock();
-    previous = IWineD3DBuffer_SetPriority(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer, priority);
+    previous = wined3d_buffer_set_priority(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer, priority);
     wined3d_mutex_unlock();
 
     return previous;
@@ -421,7 +421,7 @@
     TRACE("iface %p.\n", iface);
 
     wined3d_mutex_lock();
-    priority = IWineD3DBuffer_GetPriority(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer);
+    priority = wined3d_buffer_get_priority(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer);
     wined3d_mutex_unlock();
 
     return priority;
@@ -432,7 +432,7 @@
     TRACE("iface %p.\n", iface);
 
     wined3d_mutex_lock();
-    IWineD3DBuffer_PreLoad(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer);
+    wined3d_buffer_preload(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer);
     wined3d_mutex_unlock();
 }
 
@@ -452,7 +452,7 @@
             iface, offset, size, data, flags);
 
     wined3d_mutex_lock();
-    hr = IWineD3DBuffer_Map(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer,
+    hr = wined3d_buffer_map(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer,
             offset, size, (BYTE **)data, flags);
     wined3d_mutex_unlock();
 
@@ -464,7 +464,7 @@
     TRACE("iface %p.\n", iface);
 
     wined3d_mutex_lock();
-    IWineD3DBuffer_Unmap(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer);
+    wined3d_buffer_unmap(((IDirect3DIndexBuffer9Impl *)iface)->wineD3DIndexBuffer);
     wined3d_mutex_unlock();
 
     return D3D_OK;
@@ -478,7 +478,7 @@
     TRACE("iface %p, desc %p.\n", iface, desc);
 
     wined3d_mutex_lock();
-    IWineD3DBuffer_GetDesc(buffer->wineD3DIndexBuffer, &wined3d_desc);
+    wined3d_buffer_get_desc(buffer->wineD3DIndexBuffer, &wined3d_desc);
     wined3d_mutex_unlock();
 
     desc->Format = d3dformat_from_wined3dformat(buffer->format);
diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h
index df3f2fa..9851a4e 100644
--- a/dlls/d3d9/d3d9_private.h
+++ b/dlls/d3d9/d3d9_private.h
@@ -275,12 +275,8 @@
     const IDirect3DVertexBuffer9Vtbl *lpVtbl;
     LONG                    ref;
 
-    /* IDirect3DResource9 fields */
-    IWineD3DBuffer *wineD3DVertexBuffer;
-
-    /* Parent reference */
-    LPDIRECT3DDEVICE9EX       parentDevice;
-
+    struct wined3d_buffer *wineD3DVertexBuffer;
+    IDirect3DDevice9Ex *parentDevice;
     DWORD fvf;
 } IDirect3DVertexBuffer9Impl;
 
@@ -300,11 +296,8 @@
     const IDirect3DIndexBuffer9Vtbl *lpVtbl;
     LONG                    ref;
 
-    /* IDirect3DResource9 fields */
-    IWineD3DBuffer         *wineD3DIndexBuffer;
-
-    /* Parent reference */
-    LPDIRECT3DDEVICE9EX       parentDevice;
+    struct wined3d_buffer *wineD3DIndexBuffer;
+    IDirect3DDevice9Ex *parentDevice;
     enum wined3d_format_id format;
 } IDirect3DIndexBuffer9Impl;
 
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index c6efc48..1ae2281 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -2381,7 +2381,7 @@
         UINT StreamNumber, IDirect3DVertexBuffer9 **pStream, UINT* OffsetInBytes, UINT* pStride)
 {
     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
-    IWineD3DBuffer *retStream = NULL;
+    struct wined3d_buffer *retStream = NULL;
     HRESULT hr;
 
     TRACE("iface %p, stream_idx %u, buffer %p, offset %p, stride %p.\n",
@@ -2395,9 +2395,9 @@
     hr = IWineD3DDevice_GetStreamSource(This->WineD3DDevice, StreamNumber, &retStream, OffsetInBytes, pStride);
     if (SUCCEEDED(hr) && retStream)
     {
-        *pStream = IWineD3DBuffer_GetParent(retStream);
+        *pStream = wined3d_buffer_get_parent(retStream);
         IDirect3DVertexBuffer9_AddRef(*pStream);
-        IWineD3DBuffer_Release(retStream);
+        wined3d_buffer_decref(retStream);
     }
     else
     {
@@ -2459,7 +2459,7 @@
 static HRESULT WINAPI IDirect3DDevice9Impl_GetIndices(IDirect3DDevice9Ex *iface, IDirect3DIndexBuffer9 **ppIndexData)
 {
     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
-    IWineD3DBuffer *retIndexData = NULL;
+    struct wined3d_buffer *retIndexData = NULL;
     HRESULT hr;
 
     TRACE("iface %p, buffer %p.\n", iface, ppIndexData);
@@ -2472,9 +2472,9 @@
     hr = IWineD3DDevice_GetIndexBuffer(This->WineD3DDevice, &retIndexData);
     if (SUCCEEDED(hr) && retIndexData)
     {
-        *ppIndexData = IWineD3DBuffer_GetParent(retIndexData);
+        *ppIndexData = wined3d_buffer_get_parent(retIndexData);
         IDirect3DIndexBuffer9_AddRef(*ppIndexData);
-        IWineD3DBuffer_Release(retIndexData);
+        wined3d_buffer_decref(retIndexData);
     }
     else
     {