[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