Stefan Dösinger : wined3d: Test formats for surface support.

Alexandre Julliard julliard at winehq.org
Wed Aug 20 08:13:54 CDT 2008


Module: wine
Branch: master
Commit: 438b6bd4c3d82736076a5a55f428a19c54513e35
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=438b6bd4c3d82736076a5a55f428a19c54513e35

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Thu Aug  7 14:36:55 2008 -0500

wined3d: Test formats for surface support.

---

 dlls/wined3d/directx.c |   59 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 38 insertions(+), 21 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index de4e1b9..b5eb406 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2410,6 +2410,17 @@ static BOOL CheckTextureCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
     return FALSE;
 }
 
+static BOOL CheckSurfaceCapability(UINT Adapter, WINED3DFORMAT AdapterFormat, WINED3DFORMAT CheckFormat) {
+    /* All format that are supported for textures are supported for surfaces as well */
+    if(CheckTextureCapability(Adapter, CheckFormat)) return TRUE;
+    /* All depth stencil formats are supported on surfaces */
+    if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) return TRUE;
+
+    /* Reject other formats */
+    TRACE_(d3d_caps)("[FAILED]\n");
+    return FALSE;
+}
+
 static BOOL CheckVertexTextureCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
 {
     if (!GL_LIMITS(vertex_samplers)) {
@@ -2565,33 +2576,39 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
          *                - D3DUSAGE_RENDERTARGET
          */
 
-        if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
-            if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
-                UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
-            } else {
-                TRACE_(d3d_caps)("[FAILED] - No depthstencil support\n");
-                return WINED3DERR_NOTAVAILABLE;
+        if(CheckSurfaceCapability(Adapter, AdapterFormat, CheckFormat)) {
+            if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
+                if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
+                    UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
+                } else {
+                    TRACE_(d3d_caps)("[FAILED] - No depthstencil support\n");
+                    return WINED3DERR_NOTAVAILABLE;
+                }
             }
-        }
 
-        if(Usage & WINED3DUSAGE_RENDERTARGET) {
-            if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) {
-                UsageCaps |= WINED3DUSAGE_RENDERTARGET;
-            } else {
-                TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
-                 return WINED3DERR_NOTAVAILABLE;
+            if(Usage & WINED3DUSAGE_RENDERTARGET) {
+                if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) {
+                    UsageCaps |= WINED3DUSAGE_RENDERTARGET;
+                } else {
+                    TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
+                    return WINED3DERR_NOTAVAILABLE;
+                }
             }
-        }
 
-        /* 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_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;
+                }
             }
+        } else {
+            TRACE_(d3d_caps)("[FAILED] - Not supported for plain surfaces\n");
+            return WINED3DERR_NOTAVAILABLE;
         }
+
     } else if(RType == WINED3DRTYPE_TEXTURE) {
         /* Texture allows:
          *                - D3DUSAGE_AUTOGENMIPMAP




More information about the wine-cvs mailing list