[PATCH] Add a depthstencil flag to the formats table and make use of it in CheckDepthStencilCapability.

Roderick Colenbrander thunderbird2k at gmx.net
Fri Mar 28 18:29:38 CDT 2008


---
 dlls/wined3d/directx.c               |   26 +++++++++-----------------
 dlls/wined3d/utils.c                 |   18 +++++++++---------
 dlls/wined3d/wined3d_private_types.h |    2 ++
 3 files changed, 20 insertions(+), 26 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 086c6f8..7e28b17 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1887,28 +1887,20 @@ static BOOL CheckBumpMapCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
 }
 
 /* Check if the given DisplayFormat + DepthStencilFormat combination is valid for the Adapter */
-static BOOL CheckDepthStencilCapability(UINT Adapter, WINED3DFORMAT DisplayFormat,
-WINED3DFORMAT DepthStencilFormat)
+static BOOL CheckDepthStencilCapability(UINT Adapter, WINED3DFORMAT DisplayFormat, WINED3DFORMAT DepthStencilFormat)
 {
     int it=0;
     WineD3D_PixelFormat *cfgs = Adapters[Adapter].cfgs;
+    const GlPixelFormatDesc *glDesc;
+    const StaticPixelFormatDesc *desc = getFormatDescEntry(DepthStencilFormat, &GLINFO_LOCATION, &glDesc);
 
-    /* Only allow depth/stencil formats */
-    switch (DepthStencilFormat) {
-        case WINED3DFMT_D16_LOCKABLE:
-        case WINED3DFMT_D16:
-        case WINED3DFMT_D15S1:
-        case WINED3DFMT_D24X8:
-        case WINED3DFMT_D24X4S4:
-        case WINED3DFMT_D24S8:
-        case WINED3DFMT_D24FS8:
-        case WINED3DFMT_D32:
-        case WINED3DFMT_D32F_LOCKABLE:
-            break;
+    /* Fail if we weren't able to get a description of the format */
+    if(!desc || !glDesc)
+        return FALSE;
 
-        default:
-            return FALSE;
-    }
+    /* Only allow depth/stencil formats */
+    if(!(glDesc->Flags & (WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL)))
+        return FALSE;
 
     /* Walk through all WGL pixel formats to find a match */
     cfgs = Adapters[Adapter].cfgs;
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index cbe4dba..f067540 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -232,25 +232,25 @@ static const GlPixelFormatDescTemplate gl_formats_template[] = {
         ,0 },
     /* Depth stencil formats */
     {WINED3DFMT_D16_LOCKABLE   ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_SHORT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH },
     {WINED3DFMT_D32            ,GL_DEPTH_COMPONENT32_ARB         ,GL_DEPTH_COMPONENT32_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_INT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH },
     {WINED3DFMT_D15S1          ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_SHORT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL },
     {WINED3DFMT_D24S8          ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_INT
-        ,WINED3DFMT_FLAG_FILTERING },
+        ,WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL },
     {WINED3DFMT_D24X8          ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_INT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH },
     {WINED3DFMT_D24X4S4        ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_INT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL },
     {WINED3DFMT_D16            ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_UNSIGNED_SHORT
-        ,WINED3DFMT_FLAG_FILTERING },
+        ,WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH },
     {WINED3DFMT_L16            ,GL_LUMINANCE16_EXT               ,GL_LUMINANCE16_EXT                     , 0,           GL_LUMINANCE              ,GL_UNSIGNED_SHORT
         ,WINED3DFMT_FLAG_FILTERING },
     {WINED3DFMT_D32F_LOCKABLE  ,GL_DEPTH_COMPONENT32_ARB         ,GL_DEPTH_COMPONENT32_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_FLOAT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH },
     {WINED3DFMT_D24FS8         ,GL_DEPTH_COMPONENT24_ARB         ,GL_DEPTH_COMPONENT24_ARB               , 0,           GL_DEPTH_COMPONENT        ,GL_FLOAT
-        ,0 },
+        ,WINED3DFMT_FLAG_DEPTH | WINED3DFMT_FLAG_STENCIL},
     /* Is this a vertex buffer? */
     {WINED3DFMT_VERTEXDATA     ,0                                ,0                                      , 0,           0                         ,0
         ,0 },
diff --git a/dlls/wined3d/wined3d_private_types.h b/dlls/wined3d/wined3d_private_types.h
index ee67d9b..5722679 100644
--- a/dlls/wined3d/wined3d_private_types.h
+++ b/dlls/wined3d/wined3d_private_types.h
@@ -33,6 +33,8 @@ typedef enum {
 /* WineD3D pixel format flags */
 #define WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING 0x1
 #define WINED3DFMT_FLAG_FILTERING                0x2
+#define WINED3DFMT_FLAG_DEPTH                    0x4
+#define WINED3DFMT_FLAG_STENCIL                  0x8
 
 /** DCL usage masks **/
 #define WINED3DSP_DCL_USAGE_SHIFT 0
-- 
1.5.3.8


--========GMX98481206750420704663--



More information about the wine-patches mailing list