Module: wine Branch: master Commit: 69a40127c64ddce1908d72556bc0d6dcec86b396 URL: http://source.winehq.org/git/wine.git/?a=commit;h=69a40127c64ddce1908d72556b...
Author: Roderick Colenbrander thunderbird2k@gmx.net Date: Sat Mar 22 21:41:30 2008 +0000
wined3d: Add D3DUSAGE_QUERY_PIXELSHADER_BLENDING to CheckDeviceFormat.
---
dlls/wined3d/directx.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index bd66cfd..c8e9325 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2054,6 +2054,23 @@ static BOOL CheckSrgbWriteCapability(UINT Adapter, WINED3DDEVTYPE DeviceType, WI return FALSE; }
+/* Check if a format support blending in combination with pixel shaders */ +static BOOL CheckPostPixelShaderBlendingCapability(UINT Adapter, WINED3DFORMAT CheckFormat) +{ + const GlPixelFormatDesc *glDesc; + const StaticPixelFormatDesc *desc = getFormatDescEntry(CheckFormat, &GLINFO_LOCATION, &glDesc); + + /* Fail if we weren't able to get a description of the format */ + if(!desc || !glDesc) + return FALSE; + + /* The flags entry of a format contains the post pixel shader blending capability */ + if(glDesc->Flags & WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING) + return TRUE; + + return FALSE; +} + /* Check if a texture format is supported on the given adapter */ static BOOL CheckTextureCapability(UINT Adapter, WINED3DFORMAT CheckFormat) { @@ -2342,6 +2359,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt } }
+ /* Check QUERY_POSTPIXELSHADER_BLENDING support */ + if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { + if(CheckPostPixelShaderBlendingCapability(Adapter, CheckFormat)) { + UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING; + } else { + TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n"); + return WINED3DERR_NOTAVAILABLE; + } + } + /* Check QUERY_SRGBREAD support */ if(Usage & WINED3DUSAGE_QUERY_SRGBREAD) { if(CheckSrgbReadCapability(Adapter, CheckFormat)) { @@ -2464,6 +2491,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt } }
+ /* Check QUERY_POSTPIXELSHADER_BLENDING support */ + if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { + if(CheckPostPixelShaderBlendingCapability(Adapter, CheckFormat)) { + UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING; + } else { + TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n"); + return WINED3DERR_NOTAVAILABLE; + } + } + /* Check QUERY_SRGBREAD support */ if(Usage & WINED3DUSAGE_QUERY_SRGBREAD) { if(CheckSrgbReadCapability(Adapter, CheckFormat)) { @@ -2535,6 +2572,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt } }
+ /* Check QUERY_POSTPIXELSHADER_BLENDING support */ + if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) { + if(CheckPostPixelShaderBlendingCapability(Adapter, CheckFormat)) { + UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING; + } else { + TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n"); + return WINED3DERR_NOTAVAILABLE; + } + } + /* Check QUERY_SRGBREAD support */ if(Usage & WINED3DUSAGE_QUERY_SRGBREAD) { if(CheckSrgbReadCapability(Adapter, CheckFormat)) {