[PATCH] Add a function which checks the legacy bump mapping capabilities.

Roderick Colenbrander thunderbird2k at gmx.net
Mon Mar 17 12:29:29 CDT 2008


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

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 751e121..962ed34 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1812,6 +1812,34 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceType(IWineD3D *iface, UINT Adapter
 
 
 #define GLINFO_LOCATION Adapters[Adapter].gl_info
+/* Check if we support bumpmapping for a format */
+static BOOL CheckBumpMapCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
+{
+    if(GL_SUPPORT(NV_REGISTER_COMBINERS) && GL_SUPPORT(NV_TEXTURE_SHADER2)) {
+        switch (CheckFormat) {
+            case WINED3DFMT_V8U8:
+                TRACE_(d3d_caps)("[OK]\n");
+                return TRUE;
+            /* TODO: Other bump map formats */
+            default:
+                TRACE_(d3d_caps)("[FAILED]\n");
+                return FALSE;
+        }
+    }
+    if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {
+        switch (CheckFormat) {
+            case WINED3DFMT_V8U8:
+                TRACE_(d3d_caps)("[OK]\n");
+                return TRUE;
+            default:
+                TRACE_(d3d_caps)("[FAILED]\n");
+                return FALSE;
+        }
+    }
+    TRACE_(d3d_caps)("[FAILED]\n");
+    return FALSE;
+}
+
 /* Check if the given DisplayFormat + DepthStencilFormat combination is valid for the Adapter */
 static BOOL CheckDepthStencilCapability(UINT Adapter, WINED3DFORMAT DisplayFormat,
 WINED3DFORMAT DepthStencilFormat)
@@ -2227,6 +2255,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
                      return WINED3DERR_NOTAVAILABLE;
                  }
             }
+
+            /* Check QUERY_LEGACYBUMPMAP support */
+            if(Usage & WINED3DUSAGE_QUERY_LEGACYBUMPMAP) {
+                if(CheckBumpMapCapability(Adapter, CheckFormat)) {
+                    UsageCaps |= WINED3DUSAGE_QUERY_LEGACYBUMPMAP;
+                } else {
+                    TRACE_(d3d_caps)("[FAILED] - No legacy bumpmap support\n");
+                    return WINED3DERR_NOTAVAILABLE;
+                }
+            }
         } else if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
             if(Usage & WINED3DUSAGE_DEPTHSTENCIL)
                 UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
@@ -2312,32 +2350,6 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
         }
     }
 
-    if(Usage & WINED3DUSAGE_QUERY_LEGACYBUMPMAP) {
-        if(GL_SUPPORT(NV_REGISTER_COMBINERS) && GL_SUPPORT(NV_TEXTURE_SHADER2)) {
-            switch (CheckFormat) {
-                case WINED3DFMT_V8U8:
-                    TRACE_(d3d_caps)("[OK]\n");
-                    return WINED3D_OK;
-                /* TODO: Other bump map formats */
-                default:
-                    TRACE_(d3d_caps)("[FAILED]\n");
-                    return WINED3DERR_NOTAVAILABLE;
-            }
-        }
-        if(GL_SUPPORT(ATI_ENVMAP_BUMPMAP)) {
-            switch (CheckFormat) {
-                case WINED3DFMT_V8U8:
-                    TRACE_(d3d_caps)("[OK]\n");
-                    return WINED3D_OK;
-                default:
-                    TRACE_(d3d_caps)("[FAILED]\n");
-                    return WINED3DERR_NOTAVAILABLE;
-            }
-        }
-        TRACE_(d3d_caps)("[FAILED]\n");
-        return WINED3DERR_NOTAVAILABLE;
-    }
-
     /* Check for supported sRGB formats (Texture loading and framebuffer) */
     if (Usage & WINED3DUSAGE_QUERY_SRGBREAD) {
         if(!GL_SUPPORT(EXT_TEXTURE_SRGB)) {
-- 
1.5.3.4


--========GMX74731205781778291893--



More information about the wine-patches mailing list