[PATCH] WineD3D: Test formats for surface support=0A=

Stefan Doesinger stefan at codeweavers.com
Thu Aug 7 14:36:55 CDT 2008


=0A=
Currently, if the application asks for plain surface support=0A=
without any flags, we return OK on all formats. This patch adds=0A=
some filters for sanity.=0A=
=0A=
This patch is needed by the next patch, which adds a YUV format=0A=
test and YUV support based on an opengl extension. The YUV test=0A=
operates on surface because Windows doesn't do YUV textures, so=0A=
it has to check for surface capability=0A=
---=0A=
 dlls/wined3d/directx.c |   59 =
++++++++++++++++++++++++++++++-----------------=0A=
 1 files changed, 38 insertions(+), 21 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c=0A=
index de4e1b9..b5eb406 100644=0A=
--- a/dlls/wined3d/directx.c=0A=
+++ b/dlls/wined3d/directx.c=0A=
@@ -2410,6 +2410,17 @@ static BOOL CheckTextureCapability(UINT Adapter, =
WINED3DFORMAT CheckFormat)=0A=
     return FALSE;=0A=
 }=0A=
 =0A=
+static BOOL CheckSurfaceCapability(UINT Adapter, WINED3DFORMAT =
AdapterFormat, WINED3DFORMAT CheckFormat) {=0A=
+    /* All format that are supported for textures are supported for =
surfaces as well */=0A=
+    if(CheckTextureCapability(Adapter, CheckFormat)) return TRUE;=0A=
+    /* All depth stencil formats are supported on surfaces */=0A=
+    if(CheckDepthStencilCapability(Adapter, AdapterFormat, =
CheckFormat)) return TRUE;=0A=
+=0A=
+    /* Reject other formats */=0A=
+    TRACE_(d3d_caps)("[FAILED]\n");=0A=
+    return FALSE;=0A=
+}=0A=
+=0A=
 static BOOL CheckVertexTextureCapability(UINT Adapter, WINED3DFORMAT =
CheckFormat)=0A=
 {=0A=
     if (!GL_LIMITS(vertex_samplers)) {=0A=
@@ -2565,33 +2576,39 @@ static HRESULT WINAPI =
IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt=0A=
          *                - D3DUSAGE_RENDERTARGET=0A=
          */=0A=
 =0A=
-        if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {=0A=
-            if(CheckDepthStencilCapability(Adapter, AdapterFormat, =
CheckFormat)) {=0A=
-                UsageCaps |=3D WINED3DUSAGE_DEPTHSTENCIL;=0A=
-            } else {=0A=
-                TRACE_(d3d_caps)("[FAILED] - No depthstencil =
support\n");=0A=
-                return WINED3DERR_NOTAVAILABLE;=0A=
+        if(CheckSurfaceCapability(Adapter, AdapterFormat, CheckFormat)) =
{=0A=
+            if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {=0A=
+                if(CheckDepthStencilCapability(Adapter, AdapterFormat, =
CheckFormat)) {=0A=
+                    UsageCaps |=3D WINED3DUSAGE_DEPTHSTENCIL;=0A=
+                } else {=0A=
+                    TRACE_(d3d_caps)("[FAILED] - No depthstencil =
support\n");=0A=
+                    return WINED3DERR_NOTAVAILABLE;=0A=
+                }=0A=
             }=0A=
-        }=0A=
 =0A=
-        if(Usage & WINED3DUSAGE_RENDERTARGET) {=0A=
-            if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) =
{=0A=
-                UsageCaps |=3D WINED3DUSAGE_RENDERTARGET;=0A=
-            } else {=0A=
-                TRACE_(d3d_caps)("[FAILED] - No rendertarget =
support\n");=0A=
-                 return WINED3DERR_NOTAVAILABLE;=0A=
+            if(Usage & WINED3DUSAGE_RENDERTARGET) {=0A=
+                if(CheckRenderTargetCapability(AdapterFormat, =
CheckFormat)) {=0A=
+                    UsageCaps |=3D WINED3DUSAGE_RENDERTARGET;=0A=
+                } else {=0A=
+                    TRACE_(d3d_caps)("[FAILED] - No rendertarget =
support\n");=0A=
+                    return WINED3DERR_NOTAVAILABLE;=0A=
+                }=0A=
             }=0A=
-        }=0A=
 =0A=
-        /* Check QUERY_POSTPIXELSHADER_BLENDING support */=0A=
-        if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {=0A=
-            if(CheckPostPixelShaderBlendingCapability(Adapter, =
CheckFormat)) {=0A=
-                UsageCaps |=3D =
WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;=0A=
-            } else {=0A=
-                TRACE_(d3d_caps)("[FAILED] - No query post pixelshader =
blending support\n");=0A=
-                return WINED3DERR_NOTAVAILABLE;=0A=
+            /* Check QUERY_POSTPIXELSHADER_BLENDING support */=0A=
+            if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {=0A=
+                if(CheckPostPixelShaderBlendingCapability(Adapter, =
CheckFormat)) {=0A=
+                    UsageCaps |=3D =
WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;=0A=
+                } else {=0A=
+                    TRACE_(d3d_caps)("[FAILED] - No query post =
pixelshader blending support\n");=0A=
+                    return WINED3DERR_NOTAVAILABLE;=0A=
+                }=0A=
             }=0A=
+        } else {=0A=
+            TRACE_(d3d_caps)("[FAILED] - Not supported for plain =
surfaces\n");=0A=
+            return WINED3DERR_NOTAVAILABLE;=0A=
         }=0A=
+=0A=
     } else if(RType =3D=3D WINED3DRTYPE_TEXTURE) {=0A=
         /* Texture allows:=0A=
          *                - D3DUSAGE_AUTOGENMIPMAP=0A=
-- =0A=
1.5.4.5=0A=
=0A=

------=_NextPart_000_001D_01C901F1.A3DF0D20--




More information about the wine-patches mailing list