Simplified COM interface declarations, removing the need to define
both an xxx_METHODS and an xxx_IMETHODS macro.

diff --git a/include/d3d8.h b/include/d3d8.h
index 85a1970..0a9826a 100644
--- a/include/d3d8.h
+++ b/include/d3d8.h
@@ -104,7 +104,7 @@
  */
 #define INTERFACE IDirect3D8
 #define IDirect3D8_METHODS \
-    /*** IDirect3D8 methods ***/                         \
+    IUnknown_METHODS \
     STDMETHOD(RegisterSoftwareDevice)(THIS_ void * pInitializeFunction) PURE; \
     STDMETHOD_(UINT,GetAdapterCount             )(THIS) PURE; \
     STDMETHOD(GetAdapterIdentifier)(THIS_ UINT  Adapter, DWORD  Flags, D3DADAPTER_IDENTIFIER8 * pIdentifier) PURE; \
@@ -118,11 +118,6 @@
     STDMETHOD(GetDeviceCaps)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType, D3DCAPS8 * pCaps) PURE; \
     STDMETHOD_(HMONITOR,GetAdapterMonitor)(THIS_ UINT  Adapter) PURE; \
     STDMETHOD(CreateDevice)(THIS_ UINT  Adapter, D3DDEVTYPE  DeviceType,HWND  hFocusWindow, DWORD  BehaviorFlags, D3DPRESENT_PARAMETERS * pPresentationParameters, IDirect3DDevice8 ** ppReturnedDeviceInterface) PURE;
-
-    /*** IDirect3D8 methods ***/
-#define IDirect3D8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3D8_METHODS
 ICOM_DEFINE(IDirect3D8,IUnknown)
 #undef INTERFACE
 
@@ -152,7 +147,7 @@
  */
 #define INTERFACE IDirect3DDevice8
 #define IDirect3DDevice8_METHODS \
-    /*** IDirect3DDevice8 methods ***/ \
+    IUnknown_METHODS \
     STDMETHOD(TestCooperativeLevel)(THIS) PURE; \
     STDMETHOD_(UINT,GetAvailableTextureMem)(THIS) PURE; \
     STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD  Bytes) PURE; \
@@ -246,12 +241,7 @@
     STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD  Handle,void * pData,DWORD * pSizeOfData) PURE; \
     STDMETHOD(DrawRectPatch)(THIS_ UINT  Handle,CONST float * pNumSegs,CONST D3DRECTPATCH_INFO * pRectPatchInfo) PURE; \
     STDMETHOD(DrawTriPatch)(THIS_ UINT  Handle,CONST float * pNumSegs,CONST D3DTRIPATCH_INFO * pTriPatchInfo) PURE; \
-    STDMETHOD(DeletePatch)(THIS_ UINT  Handle) PURE; \
-
-    /*** IDirect3DDevice8 methods ***/
-#define IDirect3DDevice8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DDevice8_METHODS
+    STDMETHOD(DeletePatch)(THIS_ UINT  Handle) PURE;
 ICOM_DEFINE(IDirect3DDevice8,IUnknown)
 #undef INTERFACE
 
@@ -362,7 +352,7 @@
  */
 #define INTERFACE IDirect3DVolume8
 #define IDirect3DVolume8_METHODS \
-    /*** IDirect3DVolume8 methods ***/ \
+    IUnknown_METHODS \
     STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8 ** ppDevice) PURE; \
     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid,CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE; \
     STDMETHOD(GetPrivateData)(THIS_ REFGUID   refguid,void * pData, DWORD * pSizeOfData) PURE; \
@@ -370,12 +360,7 @@
     STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE; \
     STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC * pDesc) PURE; \
     STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox, DWORD  Flags) PURE; \
-    STDMETHOD(UnlockBox)(THIS) PURE; \
-
-    /*** IDirect3DVolume8 methods ***/
-#define IDirect3DVolume8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DVolume8_METHODS
+    STDMETHOD(UnlockBox)(THIS) PURE;
 ICOM_DEFINE(IDirect3DVolume8,IUnknown)
 #undef INTERFACE
 
@@ -400,14 +385,9 @@
  */
 #define INTERFACE IDirect3DSwapChain8
 #define IDirect3DSwapChain8_METHODS \
-    /*** IDirect3DSwapChain8 methods ***/ \
+    IUnknown_METHODS \
     STDMETHOD(Present)(THIS_ CONST RECT * pSourceRect, CONST RECT * pDestRect, HWND  hDestWindowOverride,CONST RGNDATA * pDirtyRegion) PURE; \
-    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer, D3DBACKBUFFER_TYPE  Type,IDirect3DSurface8 ** ppBackBuffer) PURE; \
-
-    /*** IDirect3DSwapChain8 methods ***/
-#define IDirect3DSwapChain8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DSwapChain8_METHODS
+    STDMETHOD(GetBackBuffer)(THIS_ UINT  BackBuffer, D3DBACKBUFFER_TYPE  Type,IDirect3DSurface8 ** ppBackBuffer) PURE;
 ICOM_DEFINE(IDirect3DSwapChain8,IUnknown)
 #undef INTERFACE
 
@@ -426,7 +406,7 @@
  */
 #define INTERFACE IDirect3DSurface8
 #define IDirect3DSurface8_METHODS \
-    /*** IDirect3DSurface8 methods ***/ \
+    IUnknown_METHODS \
     STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8 ** ppDevice) PURE; \
     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid,CONST void * pData,DWORD  SizeOfData,DWORD  Flags) PURE; \
     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid,void * pData,DWORD * pSizeOfData) PURE; \
@@ -434,12 +414,7 @@
     STDMETHOD(GetContainer)(THIS_ REFIID  riid, void ** ppContainer) PURE; \
     STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC * pDesc) PURE; \
     STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT * pLockedRect, CONST RECT * pRect,DWORD  Flags) PURE; \
-    STDMETHOD(UnlockRect)(THIS) PURE; \
-
-    /*** IDirect3DSurface8 methods ***/
-#define IDirect3DSurface8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DSurface8_METHODS
+    STDMETHOD(UnlockRect)(THIS) PURE;
 ICOM_DEFINE(IDirect3DSurface8,IUnknown)
 #undef INTERFACE
 
@@ -464,7 +439,7 @@
  */
 #define INTERFACE IDirect3DResource8
 #define IDirect3DResource8_METHODS \
-    /*** IDirect3DResource8 methods ***/ \
+    IUnknown_METHODS \
     STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8 ** ppDevice) PURE; \
     STDMETHOD(SetPrivateData)(THIS_ REFGUID  refguid, CONST void * pData, DWORD  SizeOfData, DWORD  Flags) PURE; \
     STDMETHOD(GetPrivateData)(THIS_ REFGUID  refguid, void * pData, DWORD * pSizeOfData) PURE; \
@@ -473,11 +448,6 @@
     STDMETHOD_(DWORD,GetPriority)(THIS) PURE; \
     STDMETHOD_(void,PreLoad)(THIS) PURE; \
     STDMETHOD_(D3DRESOURCETYPE,GetType)(THIS) PURE;
-
-    /*** IDirect3DResource8 methods ***/
-#define IDirect3DResource8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS
 ICOM_DEFINE(IDirect3DResource8,IUnknown)
 #undef INTERFACE
 
@@ -502,16 +472,10 @@
  */
 #define INTERFACE IDirect3DVertexBuffer8
 #define IDirect3DVertexBuffer8_METHODS \
-    /*** IDirect3DVertexBuffer8 methods ***/ \
+    IDirect3DResource8_METHODS \
     STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE; \
     STDMETHOD(Unlock)(THIS) PURE; \
     STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC  * pDesc) PURE;
-
-    /*** IDirect3DVertexBuffer8 methods ***/
-#define IDirect3DVertexBuffer8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS \
-    IDirect3DVertexBuffer8_METHODS
 ICOM_DEFINE(IDirect3DVertexBuffer8,IDirect3DResource8)
 #undef INTERFACE
 
@@ -540,16 +504,10 @@
  */
 #define INTERFACE IDirect3DIndexBuffer8
 #define IDirect3DIndexBuffer8_METHODS \
-    /*** IDirect3DIndexBuffer8 methods ***/ \
+    IDirect3DResource8_METHODS \
     STDMETHOD(Lock)(THIS_ UINT  OffsetToLock, UINT  SizeToLock, BYTE ** ppbData, DWORD  Flags) PURE; \
     STDMETHOD(Unlock)(THIS) PURE; \
-    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE; \
-
-    /*** IDirect3DIndexBuffer8 methods ***/
-#define IDirect3DIndexBuffer8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS \
-    IDirect3DIndexBuffer8_METHODS
+    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC * pDesc) PURE;
 ICOM_DEFINE(IDirect3DIndexBuffer8,IDirect3DResource8)
 #undef INTERFACE
 
@@ -578,16 +536,10 @@
  */
 #define INTERFACE IDirect3DBaseTexture8
 #define IDirect3DBaseTexture8_METHODS \
-    /*** IDirect3DBaseTexture8 methods ***/ \
+    IDirect3DResource8_METHODS \
     STDMETHOD_(DWORD,SetLOD)(THIS_ DWORD  LODNew) PURE; \
     STDMETHOD_(DWORD,GetLOD)(THIS) PURE; \
     STDMETHOD_(DWORD,GetLevelCount)(THIS) PURE;
-
-    /*** IDirect3DBaseTexture8 methods ***/
-#define IDirect3DBaseTexture8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS \
-    IDirect3DBaseTexture8_METHODS
 ICOM_DEFINE(IDirect3DBaseTexture8,IDirect3DResource8)
 #undef INTERFACE
 
@@ -616,19 +568,12 @@
  */
 #define INTERFACE IDirect3DCubeTexture8
 #define IDirect3DCubeTexture8_METHODS \
-    /*** IDirect3DCubeTexture8 methods ***/ \
+    IDirect3DBaseTexture8_METHODS \
     STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE; \
     STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,IDirect3DSurface8 ** ppCubeMapSurface) PURE; \
     STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD  Flags) PURE; \
     STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES  FaceType,UINT  Level) PURE; \
-    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES  FaceType,CONST RECT * pDirtyRect) PURE; \
-
-    /*** IDirect3DCubeTexture8 methods ***/
-#define IDirect3DCubeTexture8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS \
-    IDirect3DBaseTexture8_METHODS \
-    IDirect3DCubeTexture8_METHODS
+    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES  FaceType,CONST RECT * pDirtyRect) PURE;
 ICOM_DEFINE(IDirect3DCubeTexture8,IDirect3DBaseTexture8)
 #undef INTERFACE
 
@@ -663,19 +608,12 @@
  */
 #define INTERFACE IDirect3DTexture8
 #define IDirect3DTexture8_METHODS \
-    /*** IDirect3DTexture8 methods ***/ \
+    IDirect3DBaseTexture8_METHODS \
     STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DSURFACE_DESC * pDesc) PURE; \
     STDMETHOD(GetSurfaceLevel)(THIS_ UINT  Level,IDirect3DSurface8 ** ppSurfaceLevel) PURE; \
     STDMETHOD(LockRect)(THIS_ UINT  Level,D3DLOCKED_RECT * pLockedRect,CONST RECT * pRect,DWORD  Flags) PURE; \
     STDMETHOD(UnlockRect)(THIS_ UINT  Level) PURE; \
-    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT * pDirtyRect) PURE; \
-
-    /*** IDirect3DTexture8 methods ***/
-#define IDirect3DTexture8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS \
-    IDirect3DBaseTexture8_METHODS \
-    IDirect3DTexture8_METHODS
+    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT * pDirtyRect) PURE;
 ICOM_DEFINE(IDirect3DTexture8,IDirect3DBaseTexture8)
 #undef INTERFACE
 
@@ -710,19 +648,12 @@
  */
 #define INTERFACE IDirect3DVolumeTexture8
 #define IDirect3DVolumeTexture8_METHODS \
-    /*** IDirect3DVolumeTexture8 methods ***/ \
+    IDirect3DBaseTexture8_METHODS \
     STDMETHOD(GetLevelDesc)(THIS_ UINT  Level,D3DVOLUME_DESC * pDesc) PURE; \
     STDMETHOD(GetVolumeLevel)(THIS_ UINT  Level,IDirect3DVolume8 ** ppVolumeLevel) PURE; \
     STDMETHOD(LockBox)(THIS_ UINT  Level,D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX * pBox,DWORD  Flags) PURE; \
     STDMETHOD(UnlockBox)(THIS_ UINT  Level) PURE; \
     STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX * pDirtyBox) PURE;
-
-    /*** IDirect3DVolumeTexture8 methods ***/
-#define IDirect3DVolumeTexture8_IMETHODS \
-    IUnknown_IMETHODS \
-    IDirect3DResource8_METHODS \
-    IDirect3DBaseTexture8_METHODS \
-    IDirect3DVolumeTexture8_METHODS
 ICOM_DEFINE(IDirect3DVolumeTexture8,IDirect3DBaseTexture8)
 #undef INTERFACE