diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h index f119d7027cb..fa65f21fc74 100644 --- a/dlls/d3d8/d3d8_private.h +++ b/dlls/d3d8/d3d8_private.h @@ -102,6 +102,65 @@ extern int ps_mode; #define PIXEL_SHADER(Handle) \ ((Handle <= VS_HIGHESTFIXEDFXF) ? ((Handle >= sizeof(PixelShaders) / sizeof(IDirect3DPixelShaderImpl*)) ? NULL : PixelShaders[Handle]) : PixelShaders[Handle - VS_HIGHESTFIXEDFXF]) +/* =========================================================================== + Macros + =========================================================================== */ +/* Not nice, but it lets wined3d support different versions of directx */ +#define D3D8CAPSTOWINECAPS(_pD3D8Caps, _pWineCaps) \ + _pWineCaps->DeviceType = &_pD3D8Caps->DeviceType; \ + _pWineCaps->AdapterOrdinal = &_pD3D8Caps->AdapterOrdinal; \ + _pWineCaps->Caps = &_pD3D8Caps->Caps; \ + _pWineCaps->Caps2 = &_pD3D8Caps->Caps2; \ + _pWineCaps->Caps3 = &_pD3D8Caps->Caps3; \ + _pWineCaps->PresentationIntervals = &_pD3D8Caps->PresentationIntervals; \ + _pWineCaps->CursorCaps = &_pD3D8Caps->CursorCaps; \ + _pWineCaps->DevCaps = &_pD3D8Caps->DevCaps; \ + _pWineCaps->PrimitiveMiscCaps = &_pD3D8Caps->PrimitiveMiscCaps; \ + _pWineCaps->RasterCaps = &_pD3D8Caps->RasterCaps; \ + _pWineCaps->ZCmpCaps = &_pD3D8Caps->ZCmpCaps; \ + _pWineCaps->SrcBlendCaps = &_pD3D8Caps->SrcBlendCaps; \ + _pWineCaps->DestBlendCaps = &_pD3D8Caps->DestBlendCaps; \ + _pWineCaps->AlphaCmpCaps = &_pD3D8Caps->AlphaCmpCaps; \ + _pWineCaps->ShadeCaps = &_pD3D8Caps->ShadeCaps; \ + _pWineCaps->TextureCaps = &_pD3D8Caps->TextureCaps; \ + _pWineCaps->TextureFilterCaps = &_pD3D8Caps->TextureFilterCaps; \ + _pWineCaps->CubeTextureFilterCaps = &_pD3D8Caps->CubeTextureFilterCaps; \ + _pWineCaps->VolumeTextureFilterCaps = &_pD3D8Caps->VolumeTextureFilterCaps; \ + _pWineCaps->TextureAddressCaps = &_pD3D8Caps->TextureAddressCaps; \ + _pWineCaps->VolumeTextureAddressCaps = &_pD3D8Caps->VolumeTextureAddressCaps; \ + _pWineCaps->LineCaps = &_pD3D8Caps->LineCaps; \ + _pWineCaps->MaxTextureWidth = &_pD3D8Caps->MaxTextureWidth; \ + _pWineCaps->MaxTextureHeight = &_pD3D8Caps->MaxTextureHeight; \ + _pWineCaps->MaxVolumeExtent = &_pD3D8Caps->MaxVolumeExtent; \ + _pWineCaps->MaxTextureRepeat = &_pD3D8Caps->MaxTextureRepeat; \ + _pWineCaps->MaxTextureAspectRatio = &_pD3D8Caps->MaxTextureAspectRatio; \ + _pWineCaps->MaxAnisotropy = &_pD3D8Caps->MaxAnisotropy; \ + _pWineCaps->MaxVertexW = &_pD3D8Caps->MaxVertexW; \ + _pWineCaps->GuardBandLeft = &_pD3D8Caps->GuardBandLeft; \ + _pWineCaps->GuardBandTop = &_pD3D8Caps->GuardBandTop; \ + _pWineCaps->GuardBandRight = &_pD3D8Caps->GuardBandRight; \ + _pWineCaps->GuardBandBottom = &_pD3D8Caps->GuardBandBottom; \ + _pWineCaps->ExtentsAdjust = &_pD3D8Caps->ExtentsAdjust; \ + _pWineCaps->StencilCaps = &_pD3D8Caps->StencilCaps; \ + _pWineCaps->FVFCaps = &_pD3D8Caps->FVFCaps; \ + _pWineCaps->TextureOpCaps = &_pD3D8Caps->TextureOpCaps; \ + _pWineCaps->MaxTextureBlendStages = &_pD3D8Caps->MaxTextureBlendStages; \ + _pWineCaps->MaxSimultaneousTextures = &_pD3D8Caps->MaxSimultaneousTextures; \ + _pWineCaps->VertexProcessingCaps = &_pD3D8Caps->VertexProcessingCaps; \ + _pWineCaps->MaxActiveLights = &_pD3D8Caps->MaxActiveLights; \ + _pWineCaps->MaxUserClipPlanes = &_pD3D8Caps->MaxUserClipPlanes; \ + _pWineCaps->MaxVertexBlendMatrices = &_pD3D8Caps->MaxVertexBlendMatrices; \ + _pWineCaps->MaxVertexBlendMatrixIndex = &_pD3D8Caps->MaxVertexBlendMatrixIndex; \ + _pWineCaps->MaxPointSize = &_pD3D8Caps->MaxPointSize; \ + _pWineCaps->MaxPrimitiveCount = &_pD3D8Caps->MaxPrimitiveCount; \ + _pWineCaps->MaxVertexIndex = &_pD3D8Caps->MaxVertexIndex; \ + _pWineCaps->MaxStreams = &_pD3D8Caps->MaxStreams; \ + _pWineCaps->MaxStreamStride = &_pD3D8Caps->MaxStreamStride; \ + _pWineCaps->VertexShaderVersion = &_pD3D8Caps->VertexShaderVersion; \ + _pWineCaps->MaxVertexShaderConst = &_pD3D8Caps->MaxVertexShaderConst; \ + _pWineCaps->PixelShaderVersion = &_pD3D8Caps->PixelShaderVersion; \ + _pWineCaps->PixelShader1xMaxValue = &_pD3D8Caps->MaxPixelShaderValue; + /* Direct3D8 Interfaces: */ typedef struct IDirect3DBaseTexture8Impl IDirect3DBaseTexture8Impl; typedef struct IDirect3DVolumeTexture8Impl IDirect3DVolumeTexture8Impl; diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c index 52ed4218538..ae3996a9592 100644 --- a/dlls/d3d8/directx.c +++ b/dlls/d3d8/directx.c @@ -192,7 +192,23 @@ HRESULT WINAPI IDirect3D8Impl_CheckDepthStencilMatch(LPDIRECT3D8 iface, HRESULT WINAPI IDirect3D8Impl_GetDeviceCaps(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8* pCaps) { IDirect3D8Impl *This = (IDirect3D8Impl *)iface; - return IWineD3D_GetDeviceCaps(This->WineD3D, Adapter, DeviceType, (void *)pCaps); + HRESULT hrc = D3D_OK; + WINED3DCAPS *pWineCaps; + + TRACE("(%p) Relay %d %u %p \n", This, Adapter, DeviceType, pCaps); + + if(NULL == pCaps){ + return D3DERR_INVALIDCALL; + } + pWineCaps = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINED3DCAPS)); + if(pWineCaps == NULL){ + return D3DERR_INVALIDCALL; /*well this is what MSDN says to return*/ + } + D3D8CAPSTOWINECAPS(pCaps, pWineCaps) + hrc = IWineD3D_GetDeviceCaps(This->WineD3D, Adapter, DeviceType, pWineCaps); + HeapFree(GetProcessHeap(), 0, pWineCaps); + TRACE("(%p) returning %p\n", This, pCaps); + return hrc; } HMONITOR WINAPI IDirect3D8Impl_GetAdapterMonitor(LPDIRECT3D8 iface, UINT Adapter) { diff --git a/dlls/d3d9/d3d9_private.h b/dlls/d3d9/d3d9_private.h index 87640d1e633..b0aedf5709e 100644 --- a/dlls/d3d9/d3d9_private.h +++ b/dlls/d3d9/d3d9_private.h @@ -92,6 +92,88 @@ extern void (*wine_tsx11_unlock_ptr)(void); #define D3D_VSHADER_MAX_CONSTANTS 96 #define D3D_PSHADER_MAX_CONSTANTS 32 +/* =========================================================================== + Macros + =========================================================================== */ +/* Not nice, but it lets wined3d support different versions of directx */ +#define D3D9CAPSTOWINECAPS(_pD3D9Caps, _pWineCaps) \ + _pWineCaps->DeviceType = &_pD3D9Caps->DeviceType; \ + _pWineCaps->AdapterOrdinal = &_pD3D9Caps->AdapterOrdinal; \ + _pWineCaps->Caps = &_pD3D9Caps->Caps; \ + _pWineCaps->Caps2 = &_pD3D9Caps->Caps2; \ + _pWineCaps->Caps3 = &_pD3D9Caps->Caps3; \ + _pWineCaps->PresentationIntervals = &_pD3D9Caps->PresentationIntervals; \ + _pWineCaps->CursorCaps = &_pD3D9Caps->CursorCaps; \ + _pWineCaps->DevCaps = &_pD3D9Caps->DevCaps; \ + _pWineCaps->PrimitiveMiscCaps = &_pD3D9Caps->PrimitiveMiscCaps; \ + _pWineCaps->RasterCaps = &_pD3D9Caps->RasterCaps; \ + _pWineCaps->ZCmpCaps = &_pD3D9Caps->ZCmpCaps; \ + _pWineCaps->SrcBlendCaps = &_pD3D9Caps->SrcBlendCaps; \ + _pWineCaps->DestBlendCaps = &_pD3D9Caps->DestBlendCaps; \ + _pWineCaps->AlphaCmpCaps = &_pD3D9Caps->AlphaCmpCaps; \ + _pWineCaps->ShadeCaps = &_pD3D9Caps->ShadeCaps; \ + _pWineCaps->TextureCaps = &_pD3D9Caps->TextureCaps; \ + _pWineCaps->TextureFilterCaps = &_pD3D9Caps->TextureFilterCaps; \ + _pWineCaps->CubeTextureFilterCaps = &_pD3D9Caps->CubeTextureFilterCaps; \ + _pWineCaps->VolumeTextureFilterCaps = &_pD3D9Caps->VolumeTextureFilterCaps; \ + _pWineCaps->TextureAddressCaps = &_pD3D9Caps->TextureAddressCaps; \ + _pWineCaps->VolumeTextureAddressCaps = &_pD3D9Caps->VolumeTextureAddressCaps; \ + _pWineCaps->LineCaps = &_pD3D9Caps->LineCaps; \ + _pWineCaps->MaxTextureWidth = &_pD3D9Caps->MaxTextureWidth; \ + _pWineCaps->MaxTextureHeight = &_pD3D9Caps->MaxTextureHeight; \ + _pWineCaps->MaxVolumeExtent = &_pD3D9Caps->MaxVolumeExtent; \ + _pWineCaps->MaxTextureRepeat = &_pD3D9Caps->MaxTextureRepeat; \ + _pWineCaps->MaxTextureAspectRatio = &_pD3D9Caps->MaxTextureAspectRatio; \ + _pWineCaps->MaxAnisotropy = &_pD3D9Caps->MaxAnisotropy; \ + _pWineCaps->MaxVertexW = &_pD3D9Caps->MaxVertexW; \ + _pWineCaps->GuardBandLeft = &_pD3D9Caps->GuardBandLeft; \ + _pWineCaps->GuardBandTop = &_pD3D9Caps->GuardBandTop; \ + _pWineCaps->GuardBandRight = &_pD3D9Caps->GuardBandRight; \ + _pWineCaps->GuardBandBottom = &_pD3D9Caps->GuardBandBottom; \ + _pWineCaps->ExtentsAdjust = &_pD3D9Caps->ExtentsAdjust; \ + _pWineCaps->StencilCaps = &_pD3D9Caps->StencilCaps; \ + _pWineCaps->FVFCaps = &_pD3D9Caps->FVFCaps; \ + _pWineCaps->TextureOpCaps = &_pD3D9Caps->TextureOpCaps; \ + _pWineCaps->MaxTextureBlendStages = &_pD3D9Caps->MaxTextureBlendStages; \ + _pWineCaps->MaxSimultaneousTextures = &_pD3D9Caps->MaxSimultaneousTextures; \ + _pWineCaps->VertexProcessingCaps = &_pD3D9Caps->VertexProcessingCaps; \ + _pWineCaps->MaxActiveLights = &_pD3D9Caps->MaxActiveLights; \ + _pWineCaps->MaxUserClipPlanes = &_pD3D9Caps->MaxUserClipPlanes; \ + _pWineCaps->MaxVertexBlendMatrices = &_pD3D9Caps->MaxVertexBlendMatrices; \ + _pWineCaps->MaxVertexBlendMatrixIndex = &_pD3D9Caps->MaxVertexBlendMatrixIndex; \ + _pWineCaps->MaxPointSize = &_pD3D9Caps->MaxPointSize; \ + _pWineCaps->MaxPrimitiveCount = &_pD3D9Caps->MaxPrimitiveCount; \ + _pWineCaps->MaxVertexIndex = &_pD3D9Caps->MaxVertexIndex; \ + _pWineCaps->MaxStreams = &_pD3D9Caps->MaxStreams; \ + _pWineCaps->MaxStreamStride = &_pD3D9Caps->MaxStreamStride; \ + _pWineCaps->VertexShaderVersion = &_pD3D9Caps->VertexShaderVersion; \ + _pWineCaps->MaxVertexShaderConst = &_pD3D9Caps->MaxVertexShaderConst; \ + _pWineCaps->PixelShaderVersion = &_pD3D9Caps->PixelShaderVersion; \ + _pWineCaps->PixelShader1xMaxValue = &_pD3D9Caps->PixelShader1xMaxValue; \ + _pWineCaps->DevCaps2 = &_pD3D9Caps->DevCaps2; \ + _pWineCaps->MaxNpatchTessellationLevel = &_pD3D9Caps->MaxNpatchTessellationLevel; \ + _pWineCaps->MasterAdapterOrdinal = &_pD3D9Caps->MasterAdapterOrdinal; \ + _pWineCaps->AdapterOrdinalInGroup = &_pD3D9Caps->AdapterOrdinalInGroup; \ + _pWineCaps->NumberOfAdaptersInGroup = &_pD3D9Caps->NumberOfAdaptersInGroup; \ + _pWineCaps->DeclTypes = &_pD3D9Caps->DeclTypes; \ + _pWineCaps->NumSimultaneousRTs = &_pD3D9Caps->NumSimultaneousRTs; \ + _pWineCaps->StretchRectFilterCaps = &_pD3D9Caps->StretchRectFilterCaps; \ + _pWineCaps->VS20Caps.Caps = &_pD3D9Caps->VS20Caps.Caps; \ + _pWineCaps->VS20Caps.DynamicFlowControlDepth = &_pD3D9Caps->VS20Caps.DynamicFlowControlDepth; \ + _pWineCaps->VS20Caps.NumTemps = &_pD3D9Caps->VS20Caps.NumTemps; \ + _pWineCaps->VS20Caps.NumTemps = &_pD3D9Caps->VS20Caps.NumTemps; \ + _pWineCaps->VS20Caps.StaticFlowControlDepth = &_pD3D9Caps->VS20Caps.StaticFlowControlDepth; \ + _pWineCaps->PS20Caps.Caps = &_pD3D9Caps->PS20Caps.Caps; \ + _pWineCaps->PS20Caps.DynamicFlowControlDepth = &_pD3D9Caps->PS20Caps.DynamicFlowControlDepth; \ + _pWineCaps->PS20Caps.NumTemps = &_pD3D9Caps->PS20Caps.NumTemps; \ + _pWineCaps->PS20Caps.StaticFlowControlDepth = &_pD3D9Caps->PS20Caps.StaticFlowControlDepth; \ + _pWineCaps->PS20Caps.NumInstructionSlots = &_pD3D9Caps->PS20Caps.NumInstructionSlots; \ + _pWineCaps->VertexTextureFilterCaps = &_pD3D9Caps->VertexTextureFilterCaps; \ + _pWineCaps->MaxVShaderInstructionsExecuted = &_pD3D9Caps->MaxVShaderInstructionsExecuted; \ + _pWineCaps->MaxPShaderInstructionsExecuted = &_pD3D9Caps->MaxPShaderInstructionsExecuted; \ + _pWineCaps->MaxVertexShader30InstructionSlots = &_pD3D9Caps->MaxVertexShader30InstructionSlots; \ + _pWineCaps->MaxPixelShader30InstructionSlots = &_pD3D9Caps->MaxPixelShader30InstructionSlots; + /* Direct3D9 Interfaces: */ typedef struct IDirect3D9Impl IDirect3D9Impl; typedef struct IDirect3DDevice9Impl IDirect3DDevice9Impl; diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 5907e00956d..ef46eeecbfa 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -97,7 +97,23 @@ HRESULT WINAPI IDirect3DDevice9Impl_GetDirect3D(LPDIRECT3DDEVICE9 iface, IDire HRESULT WINAPI IDirect3DDevice9Impl_GetDeviceCaps(LPDIRECT3DDEVICE9 iface, D3DCAPS9* pCaps) { IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface; - return IWineD3DDevice_GetDeviceCaps(This->WineD3DDevice, pCaps); + HRESULT hrc = D3D_OK; + WINED3DCAPS *pWineCaps; + + TRACE("(%p) : Relay pCaps %p \n", This, pCaps); + if(NULL == pCaps){ + return D3DERR_INVALIDCALL; + } + pWineCaps = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINED3DCAPS)); + if(pWineCaps == NULL){ + return D3DERR_INVALIDCALL; /* well this is what MSDN says to return */ + } + + D3D9CAPSTOWINECAPS(pCaps, pWineCaps) + hrc = IWineD3DDevice_GetDeviceCaps(This->WineD3DDevice, pWineCaps); + HeapFree(GetProcessHeap(), 0, pWineCaps); + TRACE("Returning %p %p\n", This, pCaps); + return hrc; } HRESULT WINAPI IDirect3DDevice9Impl_GetDisplayMode(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, D3DDISPLAYMODE* pMode) { diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index 80d3994dc1b..5ce74f69066 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -2,6 +2,7 @@ * IDirect3D9 implementation * * Copyright 2002 Jason Edmeades + * Copyright 2005 Oliver Stieber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -149,7 +150,23 @@ HRESULT WINAPI IDirect3D9Impl_CheckDeviceFormatConversion(LPDIRECT3D9 iface, U HRESULT WINAPI IDirect3D9Impl_GetDeviceCaps(LPDIRECT3D9 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) { IDirect3D9Impl *This = (IDirect3D9Impl *)iface; - return IWineD3D_GetDeviceCaps(This->WineD3D, Adapter, DeviceType, (WINED3DCAPS *)pCaps); + HRESULT hrc = D3D_OK; + WINED3DCAPS *pWineCaps; + + TRACE("(%p) Relay %d %u %p \n", This, Adapter, DeviceType, pCaps); + + if(NULL == pCaps){ + return D3DERR_INVALIDCALL; + } + pWineCaps = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINED3DCAPS)); + if(pWineCaps == NULL){ + return D3DERR_INVALIDCALL; /*well this is what MSDN says to return*/ + } + D3D9CAPSTOWINECAPS(pCaps, pWineCaps) + hrc = IWineD3D_GetDeviceCaps(This->WineD3D, Adapter, DeviceType, pWineCaps); + HeapFree(GetProcessHeap(), 0, pWineCaps); + TRACE("(%p) returning %p\n", This, pCaps); + return hrc; } HMONITOR WINAPI IDirect3D9Impl_GetAdapterMonitor(LPDIRECT3D9 iface, UINT Adapter) { diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 7634b19113a..7e596702592 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3626,11 +3626,10 @@ HRESULT WINAPI IWineD3DDeviceImpl_GetBackBuffer(IWineD3DDevice *iface, UINT iSwa return D3D_OK; } -HRESULT WINAPI IWineD3DDeviceImpl_GetDeviceCaps(IWineD3DDevice *iface, D3DCAPS9* pCaps) { +HRESULT WINAPI IWineD3DDeviceImpl_GetDeviceCaps(IWineD3DDevice *iface, WINED3DCAPS* pCaps) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; WARN("(%p) : stub, calling idirect3d for now\n", This); - IWineD3D_GetDeviceCaps(This->wineD3D, This->adapterNo, This->devType, pCaps); - return D3D_OK; + return IWineD3D_GetDeviceCaps(This->wineD3D, This->adapterNo, This->devType, pCaps); } /** TODO: move to swapchains **/ diff --git a/include/wine/wined3d_interface.h b/include/wine/wined3d_interface.h index ccd331910bf..3ea951766a4 100644 --- a/include/wine/wined3d_interface.h +++ b/include/wine/wined3d_interface.h @@ -126,8 +126,6 @@ DEFINE_GUID(IID_IWineD3DQuery, # define WINED3DMATERIAL D3DMATERIAL8 # define WINED3DVIEWPORT D3DVIEWPORT8 - /* Subset: */ -# define WINED3DCAPS D3DCAPS8 #else /* Identical: */ # define WINED3DLIGHT D3DLIGHT9 @@ -135,8 +133,6 @@ DEFINE_GUID(IID_IWineD3DQuery, # define WINED3DMATERIAL D3DMATERIAL9 # define WINED3DVIEWPORT D3DVIEWPORT9 - /* Subsets: */ -# define WINED3DCAPS D3DCAPS9 #endif typedef struct IWineD3D IWineD3D; diff --git a/include/wine/wined3d_types.h b/include/wine/wined3d_types.h index 0bbf4d286f9..64beb329be6 100644 --- a/include/wine/wined3d_types.h +++ b/include/wine/wined3d_types.h @@ -4,6 +4,7 @@ * Copyright 2002-2003 The wine-d3d team * Copyright 2002-2003 Jason Edmeades * Raphael Junqueira + * Copyright 2005 Oliver Stieber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -536,6 +537,118 @@ typedef struct WINED3DDEVINFO_VCACHE { DWORD MagicNumber; } WINED3DDEVINFO_VCACHE; +/* + * The wined3dcaps structure + */ + +typedef struct _WINED3DVSHADERCAPS2_0 { + DWORD *Caps; + INT *DynamicFlowControlDepth; + INT *NumTemps; + INT *StaticFlowControlDepth; +} WINED3DVSHADERCAPS2_0; + +typedef struct _WINED3DPSHADERCAPS2_0 { + DWORD *Caps; + INT *DynamicFlowControlDepth; + INT *NumTemps; + INT *StaticFlowControlDepth; + INT *NumInstructionSlots; +} WINED3DPSHADERCAPS2_0; + +typedef struct _WINED3DCAPS { + D3DDEVTYPE *DeviceType; + UINT *AdapterOrdinal; + + DWORD *Caps; + DWORD *Caps2; + DWORD *Caps3; + DWORD *PresentationIntervals; + + DWORD *CursorCaps; + + DWORD *DevCaps; + + DWORD *PrimitiveMiscCaps; + DWORD *RasterCaps; + DWORD *ZCmpCaps; + DWORD *SrcBlendCaps; + DWORD *DestBlendCaps; + DWORD *AlphaCmpCaps; + DWORD *ShadeCaps; + DWORD *TextureCaps; + DWORD *TextureFilterCaps; + DWORD *CubeTextureFilterCaps; + DWORD *VolumeTextureFilterCaps; + DWORD *TextureAddressCaps; + DWORD *VolumeTextureAddressCaps; + + DWORD *LineCaps; + + DWORD *MaxTextureWidth; + DWORD *MaxTextureHeight; + DWORD *MaxVolumeExtent; + + DWORD *MaxTextureRepeat; + DWORD *MaxTextureAspectRatio; + DWORD *MaxAnisotropy; + float *MaxVertexW; + + float *GuardBandLeft; + float *GuardBandTop; + float *GuardBandRight; + float *GuardBandBottom; + + float *ExtentsAdjust; + DWORD *StencilCaps; + + DWORD *FVFCaps; + DWORD *TextureOpCaps; + DWORD *MaxTextureBlendStages; + DWORD *MaxSimultaneousTextures; + + DWORD *VertexProcessingCaps; + DWORD *MaxActiveLights; + DWORD *MaxUserClipPlanes; + DWORD *MaxVertexBlendMatrices; + DWORD *MaxVertexBlendMatrixIndex; + + float *MaxPointSize; + + DWORD *MaxPrimitiveCount; + DWORD *MaxVertexIndex; + DWORD *MaxStreams; + DWORD *MaxStreamStride; + + DWORD *VertexShaderVersion; + DWORD *MaxVertexShaderConst; + + DWORD *PixelShaderVersion; + float *PixelShader1xMaxValue; + + /* DX 9 */ + DWORD *DevCaps2; + + float *MaxNpatchTessellationLevel; + DWORD *Reserved5; /*undocumented*/ + + UINT *MasterAdapterOrdinal; + UINT *AdapterOrdinalInGroup; + UINT *NumberOfAdaptersInGroup; + DWORD *DeclTypes; + DWORD *NumSimultaneousRTs; + DWORD *StretchRectFilterCaps; + WINED3DVSHADERCAPS2_0 VS20Caps; + WINED3DPSHADERCAPS2_0 PS20Caps; + DWORD *VertexTextureFilterCaps; + DWORD *MaxVShaderInstructionsExecuted; + DWORD *MaxPShaderInstructionsExecuted; + DWORD *MaxVertexShader30InstructionSlots; + DWORD *MaxPixelShader30InstructionSlots; + DWORD *Reserved2;/* Not in the microsoft headers but documented */ + DWORD *Reserved3; + +} WINED3DCAPS; #endif