[PATCH] Add query post pixelshader blending support to CheckDeviceFormat. This should make hl2 happy.

Roderick Colenbrander thunderbird2k at gmx.net
Sat Mar 22 16:41:30 CDT 2008


---
 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 ef9f27e..54672e1 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2024,6 +2024,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)
 {
@@ -2311,6 +2328,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)) {
@@ -2433,6 +2460,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)) {
@@ -2504,6 +2541,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)) {
-- 
1.5.3.8


--========GMX41511206227361355529--



More information about the wine-patches mailing list