Module: wine Branch: master Commit: ef73fe5d47548c1761e53749074dbb2b632036ed URL: http://source.winehq.org/git/wine.git/?a=commit;h=ef73fe5d47548c1761e5374907...
Author: Roderick Colenbrander thunderbird2k@gmx.net Date: Fri Mar 28 23:29:38 2008 +0000
wined3d: Add a depthstencil flag to the formats table and make use of it in CheckDepthStencilCapability.
---
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