[PATCH 4/5] wined3d: Reorganize IWineD3DImpl_CheckDeviceFormat() a bit.

Henri Verbeet hverbeet at codeweavers.com
Wed May 5 11:22:37 CDT 2010


---
 dlls/wined3d/directx.c |  637 +++++++++++++++++++++++------------------------
 1 files changed, 312 insertions(+), 325 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index b884a01..ed2647f 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3664,484 +3664,471 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
         return WINED3DERR_INVALIDCALL;
     }
 
-    if(RType == WINED3DRTYPE_CUBETEXTURE) {
+    switch (RType)
+    {
+        case WINED3DRTYPE_CUBETEXTURE:
+            /* Cubetexture allows:
+             *      - WINED3DUSAGE_AUTOGENMIPMAP
+             *      - WINED3DUSAGE_DEPTHSTENCIL
+             *      - WINED3DUSAGE_DYNAMIC
+             *      - WINED3DUSAGE_NONSECURE (d3d9ex)
+             *      - WINED3DUSAGE_RENDERTARGET
+             *      - WINED3DUSAGE_SOFTWAREPROCESSING
+             *      - WINED3DUSAGE_QUERY_WRAPANDMIP
+             */
+            if (SurfaceType != SURFACE_OPENGL)
+            {
+                TRACE_(d3d_caps)("[FAILED]\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
 
-        if(SurfaceType != SURFACE_OPENGL) {
-            TRACE("[FAILED]\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
+            if (!gl_info->supported[ARB_TEXTURE_CUBE_MAP])
+            {
+                TRACE_(d3d_caps)("[FAILED] - No cube texture support\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
 
-        /* Cubetexture allows:
-         *                    - D3DUSAGE_AUTOGENMIPMAP
-         *                    - D3DUSAGE_DEPTHSTENCIL
-         *                    - D3DUSAGE_DYNAMIC
-         *                    - D3DUSAGE_NONSECURE (d3d9ex)
-         *                    - D3DUSAGE_RENDERTARGET
-         *                    - D3DUSAGE_SOFTWAREPROCESSING
-         *                    - D3DUSAGE_QUERY_WRAPANDMIP
-         */
-        if (gl_info->supported[ARB_TEXTURE_CUBE_MAP])
-        {
-            /* Check if the texture format is around */
-            if (CheckTextureCapability(adapter, DeviceType, format_desc))
+            if (!CheckTextureCapability(adapter, DeviceType, format_desc))
             {
-                if(Usage & WINED3DUSAGE_AUTOGENMIPMAP) {
-                    /* Check for automatic mipmap generation support */
-                    if (gl_info->supported[SGIS_GENERATE_MIPMAP])
-                    {
-                        UsageCaps |= WINED3DUSAGE_AUTOGENMIPMAP;
-                    } else {
-                        /* When autogenmipmap isn't around continue and return WINED3DOK_NOAUTOGEN instead of D3D_OK */
-                        TRACE_(d3d_caps)("[FAILED] - No autogenmipmap support, but continuing\n");
-                    }
-                }
+                TRACE_(d3d_caps)("[FAILED] - Cube texture format not supported\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
 
-                /* Always report dynamic locking */
-                if(Usage & WINED3DUSAGE_DYNAMIC)
-                    UsageCaps |= WINED3DUSAGE_DYNAMIC;
+            if (Usage & WINED3DUSAGE_AUTOGENMIPMAP)
+            {
+                if (!gl_info->supported[SGIS_GENERATE_MIPMAP])
+                    /* When autogenmipmap isn't around continue and return
+                     * WINED3DOK_NOAUTOGEN instead of D3D_OK. */
+                    TRACE_(d3d_caps)("[FAILED] - No autogenmipmap support, but continuing\n");
+                else
+                    UsageCaps |= WINED3DUSAGE_AUTOGENMIPMAP;
+            }
 
-                if(Usage & WINED3DUSAGE_RENDERTARGET) {
-                    if(CheckRenderTargetCapability(adapter, adapter_format_desc, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_RENDERTARGET;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            /* Always report dynamic locking. */
+            if (Usage & WINED3DUSAGE_DYNAMIC)
+                UsageCaps |= WINED3DUSAGE_DYNAMIC;
+
+            if (Usage & WINED3DUSAGE_RENDERTARGET)
+            {
+                if (!CheckRenderTargetCapability(adapter, adapter_format_desc, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_RENDERTARGET;
+            }
 
-                /* Always report software processing */
-                if(Usage & WINED3DUSAGE_SOFTWAREPROCESSING)
-                    UsageCaps |= WINED3DUSAGE_SOFTWAREPROCESSING;
+            /* Always report software processing. */
+            if (Usage & WINED3DUSAGE_SOFTWAREPROCESSING)
+                UsageCaps |= WINED3DUSAGE_SOFTWAREPROCESSING;
 
-                /* Check QUERY_FILTER support */
-                if(Usage & WINED3DUSAGE_QUERY_FILTER) {
-                    if (CheckFilterCapability(adapter, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_QUERY_FILTER;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No query filter support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            if (Usage & WINED3DUSAGE_QUERY_FILTER)
+            {
+                if (!CheckFilterCapability(adapter, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No query filter support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_FILTER;
+            }
 
-                /* Check QUERY_POSTPIXELSHADER_BLENDING support */
-                if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {
-                    if (CheckPostPixelShaderBlendingCapability(adapter, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            if (Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING)
+            {
+                if (!CheckPostPixelShaderBlendingCapability(adapter, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
+            }
 
-                /* Check QUERY_SRGBREAD support */
-                if(Usage & WINED3DUSAGE_QUERY_SRGBREAD) {
-                    if (CheckSrgbReadCapability(adapter, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_QUERY_SRGBREAD;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No query srgbread support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            if (Usage & WINED3DUSAGE_QUERY_SRGBREAD)
+            {
+                if (!CheckSrgbReadCapability(adapter, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No query srgbread support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_SRGBREAD;
+            }
 
-                /* Check QUERY_SRGBWRITE support */
-                if(Usage & WINED3DUSAGE_QUERY_SRGBWRITE) {
-                    if (CheckSrgbWriteCapability(adapter, DeviceType, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_QUERY_SRGBWRITE;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No query srgbwrite support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            if (Usage & WINED3DUSAGE_QUERY_SRGBWRITE)
+            {
+                if (!CheckSrgbWriteCapability(adapter, DeviceType, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No query srgbwrite support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_SRGBWRITE;
+            }
 
-                /* Check QUERY_VERTEXTEXTURE support */
-                if(Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
-                    if (CheckVertexTextureCapability(adapter, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            if (Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE)
+            {
+                if (!CheckVertexTextureCapability(adapter, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
+            }
 
-                /* Check QUERY_WRAPANDMIP support */
-                if(Usage & WINED3DUSAGE_QUERY_WRAPANDMIP) {
-                    if (CheckWrapAndMipCapability(adapter, format_desc))
-                    {
-                        UsageCaps |= WINED3DUSAGE_QUERY_WRAPANDMIP;
-                    } else {
-                        TRACE_(d3d_caps)("[FAILED] - No wrapping and mipmapping support\n");
-                        return WINED3DERR_NOTAVAILABLE;
-                    }
+            if (Usage & WINED3DUSAGE_QUERY_WRAPANDMIP)
+            {
+                if (!CheckWrapAndMipCapability(adapter, format_desc))
+                {
+                    TRACE_(d3d_caps)("[FAILED] - No wrapping and mipmapping support\n");
+                    return WINED3DERR_NOTAVAILABLE;
                 }
-            } else {
-                TRACE_(d3d_caps)("[FAILED] - Cube texture format not supported\n");
+                UsageCaps |= WINED3DUSAGE_QUERY_WRAPANDMIP;
+            }
+            break;
+
+        case WINED3DRTYPE_SURFACE:
+            /* Surface allows:
+             *      - WINED3DUSAGE_DEPTHSTENCIL
+             *      - WINED3DUSAGE_NONSECURE (d3d9ex)
+             *      - WINED3DUSAGE_RENDERTARGET
+             */
+            if (!CheckSurfaceCapability(adapter, adapter_format_desc, DeviceType, format_desc, SurfaceType))
+            {
+                TRACE_(d3d_caps)("[FAILED] - Not supported for plain surfaces\n");
                 return WINED3DERR_NOTAVAILABLE;
             }
-        } else {
-            TRACE_(d3d_caps)("[FAILED] - No cube texture support\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
-    } else if(RType == WINED3DRTYPE_SURFACE) {
-        /* Surface allows:
-         *                - D3DUSAGE_DEPTHSTENCIL
-         *                - D3DUSAGE_NONSECURE (d3d9ex)
-         *                - D3DUSAGE_RENDERTARGET
-         */
 
-        if (CheckSurfaceCapability(adapter, adapter_format_desc, DeviceType, format_desc, SurfaceType))
-        {
-            if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
-                if (CheckDepthStencilCapability(adapter, adapter_format_desc, format_desc))
+            if (Usage & WINED3DUSAGE_DEPTHSTENCIL)
+            {
+                if (!CheckDepthStencilCapability(adapter, adapter_format_desc, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No depthstencil support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
             }
 
-            if(Usage & WINED3DUSAGE_RENDERTARGET) {
-                if (CheckRenderTargetCapability(adapter, adapter_format_desc, format_desc))
+            if (Usage & WINED3DUSAGE_RENDERTARGET)
+            {
+                if (!CheckRenderTargetCapability(adapter, adapter_format_desc, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_RENDERTARGET;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_RENDERTARGET;
             }
 
-            /* Check QUERY_POSTPIXELSHADER_BLENDING support */
-            if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {
-                if (CheckPostPixelShaderBlendingCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING)
+            {
+                if (!CheckPostPixelShaderBlendingCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
             }
-        } else {
-            TRACE_(d3d_caps)("[FAILED] - Not supported for plain surfaces\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
+            break;
 
-    } else if(RType == WINED3DRTYPE_TEXTURE) {
-        /* Texture allows:
-         *                - D3DUSAGE_AUTOGENMIPMAP
-         *                - D3DUSAGE_DEPTHSTENCIL
-         *                - D3DUSAGE_DMAP
-         *                - D3DUSAGE_DYNAMIC
-         *                - D3DUSAGE_NONSECURE (d3d9ex)
-         *                - D3DUSAGE_RENDERTARGET
-         *                - D3DUSAGE_SOFTWAREPROCESSING
-         *                - D3DUSAGE_TEXTAPI (d3d9ex)
-         *                - D3DUSAGE_QUERY_WRAPANDMIP
-         */
+        case WINED3DRTYPE_TEXTURE:
+            /* Texture allows:
+             *      - WINED3DUSAGE_AUTOGENMIPMAP
+             *      - WINED3DUSAGE_DEPTHSTENCIL
+             *      - WINED3DUSAGE_DMAP
+             *      - WINED3DUSAGE_DYNAMIC
+             *      - WINED3DUSAGE_NONSECURE (d3d9ex)
+             *      - WINED3DUSAGE_RENDERTARGET
+             *      - WINED3DUSAGE_SOFTWAREPROCESSING
+             *      - WINED3DUSAGE_TEXTAPI (d3d9ex)
+             *      - WINED3DUSAGE_QUERY_WRAPANDMIP
+             */
+            if (SurfaceType != SURFACE_OPENGL)
+            {
+                TRACE_(d3d_caps)("[FAILED]\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
 
-        if(SurfaceType != SURFACE_OPENGL) {
-            TRACE("[FAILED]\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
+            if (!CheckTextureCapability(adapter, DeviceType, format_desc))
+            {
+                TRACE_(d3d_caps)("[FAILED] - Texture format not supported\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
 
-        /* Check if the texture format is around */
-        if (CheckTextureCapability(adapter, DeviceType, format_desc))
-        {
-            if(Usage & WINED3DUSAGE_AUTOGENMIPMAP) {
-                /* Check for automatic mipmap generation support */
-                if (gl_info->supported[SGIS_GENERATE_MIPMAP])
-                {
-                    UsageCaps |= WINED3DUSAGE_AUTOGENMIPMAP;
-                } else {
-                    /* When autogenmipmap isn't around continue and return WINED3DOK_NOAUTOGEN instead of D3D_OK */
+            if (Usage & WINED3DUSAGE_AUTOGENMIPMAP)
+            {
+                if (!gl_info->supported[SGIS_GENERATE_MIPMAP])
+                    /* When autogenmipmap isn't around continue and return
+                     * WINED3DOK_NOAUTOGEN instead of D3D_OK. */
                     TRACE_(d3d_caps)("[FAILED] - No autogenmipmap support, but continuing\n");
-                }
+                else
+                    UsageCaps |= WINED3DUSAGE_AUTOGENMIPMAP;
             }
 
-            /* Always report dynamic locking */
-            if(Usage & WINED3DUSAGE_DYNAMIC)
+            /* Always report dynamic locking. */
+            if (Usage & WINED3DUSAGE_DYNAMIC)
                 UsageCaps |= WINED3DUSAGE_DYNAMIC;
 
-            if(Usage & WINED3DUSAGE_RENDERTARGET) {
-                if (CheckRenderTargetCapability(adapter, adapter_format_desc, format_desc))
+            if (Usage & WINED3DUSAGE_RENDERTARGET)
+            {
+                if (!CheckRenderTargetCapability(adapter, adapter_format_desc, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_RENDERTARGET;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
-                     return WINED3DERR_NOTAVAILABLE;
-                 }
+                    return WINED3DERR_NOTAVAILABLE;
+                }
+                UsageCaps |= WINED3DUSAGE_RENDERTARGET;
             }
 
-            /* Always report software processing */
-            if(Usage & WINED3DUSAGE_SOFTWAREPROCESSING)
+            /* Always report software processing. */
+            if (Usage & WINED3DUSAGE_SOFTWAREPROCESSING)
                 UsageCaps |= WINED3DUSAGE_SOFTWAREPROCESSING;
 
-            /* Check QUERY_FILTER support */
-            if(Usage & WINED3DUSAGE_QUERY_FILTER) {
-                if (CheckFilterCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_FILTER)
+            {
+                if (!CheckFilterCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_FILTER;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query filter support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_FILTER;
             }
 
-            /* Check QUERY_LEGACYBUMPMAP support */
-            if(Usage & WINED3DUSAGE_QUERY_LEGACYBUMPMAP) {
-                if (CheckBumpMapCapability(adapter, DeviceType, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_LEGACYBUMPMAP)
+            {
+                if (!CheckBumpMapCapability(adapter, DeviceType, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_LEGACYBUMPMAP;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No legacy bumpmap support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_LEGACYBUMPMAP;
             }
 
-            /* Check QUERY_POSTPIXELSHADER_BLENDING support */
-            if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {
-                if (CheckPostPixelShaderBlendingCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING)
+            {
+                if (!CheckPostPixelShaderBlendingCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
             }
 
-            /* Check QUERY_SRGBREAD support */
-            if(Usage & WINED3DUSAGE_QUERY_SRGBREAD) {
-                if (CheckSrgbReadCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_SRGBREAD)
+            {
+                if (!CheckSrgbReadCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_SRGBREAD;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query srgbread support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_SRGBREAD;
             }
 
-            /* Check QUERY_SRGBWRITE support */
-            if(Usage & WINED3DUSAGE_QUERY_SRGBWRITE) {
-                if (CheckSrgbWriteCapability(adapter, DeviceType, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_SRGBWRITE)
+            {
+                if (!CheckSrgbWriteCapability(adapter, DeviceType, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_SRGBWRITE;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query srgbwrite support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_SRGBWRITE;
             }
 
-            /* Check QUERY_VERTEXTEXTURE support */
-            if(Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
-                if (CheckVertexTextureCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE)
+            {
+                if (!CheckVertexTextureCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
             }
 
-            /* Check QUERY_WRAPANDMIP support */
-            if(Usage & WINED3DUSAGE_QUERY_WRAPANDMIP) {
-                if (CheckWrapAndMipCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_WRAPANDMIP)
+            {
+                if (!CheckWrapAndMipCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_WRAPANDMIP;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No wrapping and mipmapping support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_WRAPANDMIP;
             }
 
-            if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
-                if (CheckDepthStencilCapability(adapter, adapter_format_desc, format_desc))
+            if (Usage & WINED3DUSAGE_DEPTHSTENCIL)
+            {
+                if (!CheckDepthStencilCapability(adapter, adapter_format_desc, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No depth stencil support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
             }
-        } else {
-            TRACE_(d3d_caps)("[FAILED] - Texture format not supported\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
-    } else if((RType == WINED3DRTYPE_VOLUME) || (RType == WINED3DRTYPE_VOLUMETEXTURE)) {
-        /* Volume is to VolumeTexture what Surface is to Texture but its usage caps are not documented.
-         * Most driver seem to offer (nearly) the same on Volume and VolumeTexture, so do that too.
-         *
-         * Volumetexture allows:
-         *                      - D3DUSAGE_DYNAMIC
-         *                      - D3DUSAGE_NONSECURE (d3d9ex)
-         *                      - D3DUSAGE_SOFTWAREPROCESSING
-         *                      - D3DUSAGE_QUERY_WRAPANDMIP
-         */
+            break;
 
-        if(SurfaceType != SURFACE_OPENGL) {
-            TRACE("[FAILED]\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
+        case WINED3DRTYPE_VOLUMETEXTURE:
+        case WINED3DRTYPE_VOLUME:
+            /* Volume is to VolumeTexture what Surface is to Texture, but its
+             * usage caps are not documented. Most driver seem to offer
+             * (nearly) the same on Volume and VolumeTexture, so do that too.
+             *
+             * Volumetexture allows:
+             *      - D3DUSAGE_DYNAMIC
+             *      - D3DUSAGE_NONSECURE (d3d9ex)
+             *      - D3DUSAGE_SOFTWAREPROCESSING
+             *      - D3DUSAGE_QUERY_WRAPANDMIP
+             */
+            if (SurfaceType != SURFACE_OPENGL)
+            {
+                TRACE_(d3d_caps)("[FAILED]\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
+
+            if (!gl_info->supported[EXT_TEXTURE3D])
+            {
+                TRACE_(d3d_caps)("[FAILED] - No volume texture support\n");
+                return WINED3DERR_NOTAVAILABLE;
+            }
 
-        /* Check volume texture and volume usage caps */
-        if (gl_info->supported[EXT_TEXTURE3D])
-        {
             if (!CheckTextureCapability(adapter, DeviceType, format_desc))
             {
                 TRACE_(d3d_caps)("[FAILED] - Format not supported\n");
                 return WINED3DERR_NOTAVAILABLE;
             }
 
-            /* Always report dynamic locking */
-            if(Usage & WINED3DUSAGE_DYNAMIC)
+            /* Filter formats that need conversion; For one part, this
+             * conversion is unimplemented, and volume textures are huge, so
+             * it would be a big performance hit. Unless we hit an application
+             * needing one of those formats, don't advertize them to avoid
+             * leading applications into temptation. The windows drivers don't
+             * support most of those formats on volumes anyway, except for
+             * WINED3DFMT_R32_FLOAT. */
+            switch (CheckFormat)
+            {
+                case WINED3DFMT_P8_UINT:
+                case WINED3DFMT_L4A4_UNORM:
+                case WINED3DFMT_R32_FLOAT:
+                case WINED3DFMT_R16_FLOAT:
+                case WINED3DFMT_R8G8_SNORM_L8X8_UNORM:
+                case WINED3DFMT_R5G5_SNORM_L6_UNORM:
+                case WINED3DFMT_R16G16_UNORM:
+                    TRACE_(d3d_caps)("[FAILED] - No converted formats on volumes\n");
+                    return WINED3DERR_NOTAVAILABLE;
+
+                case WINED3DFMT_R8G8B8A8_SNORM:
+                case WINED3DFMT_R16G16_SNORM:
+                    if (!gl_info->supported[NV_TEXTURE_SHADER])
+                    {
+                        TRACE_(d3d_caps)("[FAILED] - No converted formats on volumes\n");
+                        return WINED3DERR_NOTAVAILABLE;
+                    }
+                    break;
+
+                case WINED3DFMT_R8G8_SNORM:
+                    if (!gl_info->supported[NV_TEXTURE_SHADER])
+                    {
+                        TRACE_(d3d_caps)("[FAILED] - No converted formats on volumes\n");
+                        return WINED3DERR_NOTAVAILABLE;
+                    }
+                    break;
+
+                case WINED3DFMT_DXT1:
+                case WINED3DFMT_DXT2:
+                case WINED3DFMT_DXT3:
+                case WINED3DFMT_DXT4:
+                case WINED3DFMT_DXT5:
+                    /* The GL_EXT_texture_compression_s3tc spec requires that
+                     * loading an s3tc compressed texture results in an error.
+                     * While the D3D refrast does support s3tc volumes, at
+                     * least the nvidia windows driver does not, so we're free
+                     * not to support this format. */
+                    TRACE_(d3d_caps)("[FAILED] - DXTn does not support 3D textures\n");
+                    return WINED3DERR_NOTAVAILABLE;
+
+                default:
+                    /* Do nothing, continue with checking the format below */
+                    break;
+            }
+
+            /* Always report dynamic locking. */
+            if (Usage & WINED3DUSAGE_DYNAMIC)
                 UsageCaps |= WINED3DUSAGE_DYNAMIC;
 
-            /* Always report software processing */
-            if(Usage & WINED3DUSAGE_SOFTWAREPROCESSING)
+            /* Always report software processing. */
+            if (Usage & WINED3DUSAGE_SOFTWAREPROCESSING)
                 UsageCaps |= WINED3DUSAGE_SOFTWAREPROCESSING;
 
-            /* Check QUERY_FILTER support */
-            if(Usage & WINED3DUSAGE_QUERY_FILTER) {
-                if (CheckFilterCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_FILTER)
+            {
+                if (!CheckFilterCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_FILTER;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query filter support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_FILTER;
             }
 
-            /* Check QUERY_POSTPIXELSHADER_BLENDING support */
-            if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {
-                if (CheckPostPixelShaderBlendingCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING)
+            {
+                if (!CheckPostPixelShaderBlendingCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
             }
 
-            /* Check QUERY_SRGBREAD support */
-            if(Usage & WINED3DUSAGE_QUERY_SRGBREAD) {
-                if (CheckSrgbReadCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_SRGBREAD)
+            {
+                if (!CheckSrgbReadCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_SRGBREAD;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query srgbread support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_SRGBREAD;
             }
 
-            /* Check QUERY_SRGBWRITE support */
-            if(Usage & WINED3DUSAGE_QUERY_SRGBWRITE) {
-                if (CheckSrgbWriteCapability(adapter, DeviceType, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_SRGBWRITE)
+            {
+                if (!CheckSrgbWriteCapability(adapter, DeviceType, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_SRGBWRITE;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query srgbwrite support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_SRGBWRITE;
             }
 
-            /* Check QUERY_VERTEXTEXTURE support */
-            if(Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
-                if (CheckVertexTextureCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE)
+            {
+                if (!CheckVertexTextureCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
+                UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
             }
 
-            /* Check QUERY_WRAPANDMIP support */
-            if(Usage & WINED3DUSAGE_QUERY_WRAPANDMIP) {
-                if (CheckWrapAndMipCapability(adapter, format_desc))
+            if (Usage & WINED3DUSAGE_QUERY_WRAPANDMIP)
+            {
+                if (!CheckWrapAndMipCapability(adapter, format_desc))
                 {
-                    UsageCaps |= WINED3DUSAGE_QUERY_WRAPANDMIP;
-                } else {
                     TRACE_(d3d_caps)("[FAILED] - No wrapping and mipmapping support\n");
                     return WINED3DERR_NOTAVAILABLE;
                 }
-            }
-        } else {
-            TRACE_(d3d_caps)("[FAILED] - No volume texture support\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
-
-        /* Filter formats that need conversion; For one part, this conversion is unimplemented,
-         * and volume textures are huge, so it would be a big performance hit. Unless we hit an
-         * app needing one of those formats, don't advertize them to avoid leading apps into
-         * temptation. The windows drivers don't support most of those formats on volumes anyway,
-         * except of R32F.
-         */
-        switch(CheckFormat) {
-            case WINED3DFMT_P8_UINT:
-            case WINED3DFMT_L4A4_UNORM:
-            case WINED3DFMT_R32_FLOAT:
-            case WINED3DFMT_R16_FLOAT:
-            case WINED3DFMT_R8G8_SNORM_L8X8_UNORM:
-            case WINED3DFMT_R5G5_SNORM_L6_UNORM:
-            case WINED3DFMT_R16G16_UNORM:
-                TRACE_(d3d_caps)("[FAILED] - No converted formats on volumes\n");
-                return WINED3DERR_NOTAVAILABLE;
-
-            case WINED3DFMT_R8G8B8A8_SNORM:
-            case WINED3DFMT_R16G16_SNORM:
-            if (!gl_info->supported[NV_TEXTURE_SHADER])
-            {
-                TRACE_(d3d_caps)("[FAILED] - No converted formats on volumes\n");
-                return WINED3DERR_NOTAVAILABLE;
-            }
-            break;
-
-            case WINED3DFMT_R8G8_SNORM:
-            if (!gl_info->supported[NV_TEXTURE_SHADER])
-            {
-                TRACE_(d3d_caps)("[FAILED] - No converted formats on volumes\n");
-                return WINED3DERR_NOTAVAILABLE;
+                UsageCaps |= WINED3DUSAGE_QUERY_WRAPANDMIP;
             }
             break;
 
-            case WINED3DFMT_DXT1:
-            case WINED3DFMT_DXT2:
-            case WINED3DFMT_DXT3:
-            case WINED3DFMT_DXT4:
-            case WINED3DFMT_DXT5:
-                /* The GL_EXT_texture_compression_s3tc spec requires that loading an s3tc
-                 * compressed texture results in an error. While the D3D refrast does
-                 * support s3tc volumes, at least the nvidia windows driver does not, so
-                 * we're free not to support this format.
-                 */
-                TRACE_(d3d_caps)("[FAILED] - DXTn does not support 3D textures\n");
-                return WINED3DERR_NOTAVAILABLE;
-
-            default:
-                /* Do nothing, continue with checking the format below */
-                break;
-        }
-    } else if(RType == WINED3DRTYPE_BUFFER){
-        /* For instance vertexbuffer/indexbuffer aren't supported yet because no Windows drivers seem to offer it */
-        TRACE_(d3d_caps)("Unhandled resource type D3DRTYPE_INDEXBUFFER / D3DRTYPE_VERTEXBUFFER\n");
-        return WINED3DERR_NOTAVAILABLE;
+        default:
+            FIXME_(d3d_caps)("Unhandled resource type %s.\n", debug_d3dresourcetype(RType));
+            return WINED3DERR_NOTAVAILABLE;
     }
 
-    /* When the UsageCaps exactly matches Usage return WINED3D_OK except for the situation in which
-     * WINED3DUSAGE_AUTOGENMIPMAP isn't around, then WINED3DOK_NOAUTOGEN is returned if all the other
-     * usage flags match. */
-    if(UsageCaps == Usage) {
+    /* When the UsageCaps exactly matches Usage return WINED3D_OK except for
+     * the situation in which WINED3DUSAGE_AUTOGENMIPMAP isn't around, then
+     * WINED3DOK_NOAUTOGEN is returned if all the other usage flags match. */
+    if (UsageCaps == Usage)
         return WINED3D_OK;
-    } else if((UsageCaps == (Usage & ~WINED3DUSAGE_AUTOGENMIPMAP)) && (Usage & WINED3DUSAGE_AUTOGENMIPMAP)){
+    if (UsageCaps == (Usage & ~WINED3DUSAGE_AUTOGENMIPMAP))
         return WINED3DOK_NOAUTOGEN;
-    } else {
-        TRACE_(d3d_caps)("[FAILED] - Usage=%#08x requested for CheckFormat=%s and RType=%d but only %#08x is available\n", Usage, debug_d3dformat(CheckFormat), RType, UsageCaps);
-        return WINED3DERR_NOTAVAILABLE;
-    }
+
+    TRACE_(d3d_caps)("[FAILED] - Usage %#x requested for CheckFormat %s and RType %s but only %#x is available\n",
+            Usage, debug_d3dformat(CheckFormat), debug_d3dresourcetype(RType), UsageCaps);
+
+    return WINED3DERR_NOTAVAILABLE;
 }
 
 static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormatConversion(IWineD3D *iface, UINT adapter_idx,
-- 
1.6.4.4




More information about the wine-patches mailing list