Roderick Colenbrander : wined3d: Put vertex texture capability checking in its own function.

Alexandre Julliard julliard at winehq.org
Tue Mar 18 07:44:51 CDT 2008


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

Author: Roderick Colenbrander <thunderbird2k at gmx.net>
Date:   Mon Mar 17 18:37:15 2008 +0100

wined3d: Put vertex texture capability checking in its own function.

---

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

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index ab60722..9a281ea 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2167,6 +2167,29 @@ MAKEFOURCC('I','N','S','T') once
     return FALSE;
 }
 
+static BOOL CheckVertexTextureCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
+{
+    if (!GL_LIMITS(vertex_samplers)) {
+        TRACE_(d3d_caps)("[FAILED]\n");
+        return FALSE;
+    }
+
+    switch (CheckFormat) {
+        case WINED3DFMT_A32B32G32R32F:
+            if (!GL_SUPPORT(ARB_TEXTURE_FLOAT)) {
+                TRACE_(d3d_caps)("[FAILED]\n");
+                return FALSE;
+            }
+            TRACE_(d3d_caps)("[OK]\n");
+            return TRUE;
+
+        default:
+            TRACE_(d3d_caps)("[FAILED]\n");
+            return FALSE;
+    }
+    return FALSE;
+}
+
 static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapter, WINED3DDEVTYPE DeviceType, 
                                               WINED3DFORMAT AdapterFormat, DWORD Usage, WINED3DRESOURCETYPE RType, WINED3DFORMAT CheckFormat) {
     IWineD3DImpl *This = (IWineD3DImpl *)iface;
@@ -2238,6 +2261,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
                         return WINED3DERR_NOTAVAILABLE;
                     }
                 }
+
+                /* Check QUERY_VERTEXTEXTURE support */
+                if(Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
+                    if(CheckVertexTextureCapability(Adapter, CheckFormat)) {
+                        UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
+                    } else {
+                        TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
+                        return WINED3DERR_NOTAVAILABLE;
+                    }
+                }
             }
         }
     } else if(RType == WINED3DRTYPE_SURFACE) {
@@ -2310,6 +2343,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
                     return WINED3DERR_NOTAVAILABLE;
                 }
             }
+
+            /* Check QUERY_VERTEXTEXTURE support */
+            if(Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
+                if(CheckVertexTextureCapability(Adapter, CheckFormat)) {
+                    UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
+                } else {
+                    TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
+                    return WINED3DERR_NOTAVAILABLE;
+                }
+            }
         } else if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
             if(Usage & WINED3DUSAGE_DEPTHSTENCIL)
                 UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
@@ -2331,6 +2374,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
                     return WINED3DERR_NOTAVAILABLE;
                 }
             }
+
+            /* Check QUERY_VERTEXTEXTURE support */
+            if(Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
+                if(CheckVertexTextureCapability(Adapter, CheckFormat)) {
+                    UsageCaps |= WINED3DUSAGE_QUERY_VERTEXTEXTURE;
+                } else {
+                    TRACE_(d3d_caps)("[FAILED] - No query vertextexture support\n");
+                    return WINED3DERR_NOTAVAILABLE;
+                }
+            }
         }
 
         /* Filter formats that need conversion; For one part, this conversion is unimplemented,
@@ -2383,27 +2436,6 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
                 break;
         }
     }
-    /* TODO: Check support against more of the WINED3DUSAGE_QUERY_* constants */
-    if (Usage & WINED3DUSAGE_QUERY_VERTEXTEXTURE) {
-        if (!GL_LIMITS(vertex_samplers)) {
-            TRACE_(d3d_caps)("[FAILED]\n");
-            return WINED3DERR_NOTAVAILABLE;
-        }
-
-        switch (CheckFormat) {
-            case WINED3DFMT_A32B32G32R32F:
-                if (!GL_SUPPORT(ARB_TEXTURE_FLOAT)) {
-                    TRACE_(d3d_caps)("[FAILED]\n");
-                    return WINED3DERR_NOTAVAILABLE;
-                }
-                TRACE_(d3d_caps)("[OK]\n");
-                return WINED3D_OK;
-
-            default:
-                TRACE_(d3d_caps)("[FAILED]\n");
-                return WINED3DERR_NOTAVAILABLE;
-        }
-    }
 
     /* This format is nothing special and it is supported perfectly.
      * However, ati and nvidia driver on windows do not mark this format as




More information about the wine-cvs mailing list