From f74de3ab65ab5ace9cfa5b6ce3eb20ff779de223 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Wed, 24 Mar 2010 22:34:38 +0100 Subject: [PATCH] wined3d: Don't advertise float formats as supported by WGL. --- dlls/wined3d/directx.c | 6 +++++ dlls/wined3d/utils.c | 59 ++++++++++++++++++++++++------------------ dlls/wined3d/wined3d_private.h | 1 + 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index cc3bb5515cb..280f06deca1 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -2865,6 +2865,9 @@ static BOOL IWineD3DImpl_IsPixelFormatCompatibleWithRenderFmt(const struct wined if(!cfg) return FALSE; + /* Float formats need FBOs. If FBOs are used this function isn't called */ + if (format_desc->Flags & WINED3DFMT_FLAG_FLOAT) return FALSE; + if(cfg->iPixelType == WGL_TYPE_RGBA_ARB) { /* Integer RGBA formats */ if (!getColorBits(format_desc, &redSize, &greenSize, &blueSize, &alphaSize, &colorBits)) { @@ -2906,6 +2909,9 @@ static BOOL IWineD3DImpl_IsPixelFormatCompatibleWithDepthFmt(const struct wined3 return FALSE; } + /* Float formats need FBOs. If FBOs are used this function isn't called */ + if (format_desc->Flags & WINED3DFMT_FLAG_FLOAT) return FALSE; + if ((format_desc->format == WINED3DFMT_D16_LOCKABLE) || (format_desc->format == WINED3DFMT_D32_FLOAT)) lockable = TRUE; diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 5c8747b9af9..e2e888d4308 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -141,31 +141,40 @@ struct wined3d_format_base_flags static const struct wined3d_format_base_flags format_base_flags[] = { - {WINED3DFMT_UYVY, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_YUY2, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_YV12, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_DXT1, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_DXT2, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_DXT3, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_DXT4, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_DXT5, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_MULTI2_ARGB8, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_G8R8_G8B8, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_R8G8_B8G8, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_P8_UINT, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B8G8R8_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B8G8R8A8_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B8G8R8X8_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B5G6R5_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B5G5R5X1_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B5G5R5A1_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B4G4R4A4_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_B4G4R4X4_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_R8G8B8A8_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_R8G8B8X8_UNORM, WINED3DFMT_FLAG_GETDC}, - {WINED3DFMT_ATI2N, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_NVHU, WINED3DFMT_FLAG_FOURCC}, - {WINED3DFMT_NVHS, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_UYVY, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_YUY2, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_YV12, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_DXT1, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_DXT2, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_DXT3, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_DXT4, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_DXT5, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_MULTI2_ARGB8, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_G8R8_G8B8, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_R8G8_B8G8, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_P8_UINT, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B8G8R8_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B8G8R8A8_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B8G8R8X8_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B5G6R5_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B5G5R5X1_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B5G5R5A1_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B4G4R4A4_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_B4G4R4X4_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_R8G8B8A8_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_R8G8B8X8_UNORM, WINED3DFMT_FLAG_GETDC}, + {WINED3DFMT_ATI2N, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_NVHU, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_NVHS, WINED3DFMT_FLAG_FOURCC}, + {WINED3DFMT_R32_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_R32G32_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_R32G32B32_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_R32G32B32A32_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_R16_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_R16G16_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_R16G16B16A16_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_D32_FLOAT, WINED3DFMT_FLAG_FLOAT}, + {WINED3DFMT_S8_UINT_D24_FLOAT, WINED3DFMT_FLAG_FLOAT}, }; struct wined3d_format_compression_info diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 52b0d613c15..a580a84c461 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2963,6 +2963,7 @@ extern WINED3DFORMAT pixelformat_for_depth(DWORD depth) DECLSPEC_HIDDEN; #define WINED3DFMT_FLAG_FBO_ATTACHABLE 0x40 #define WINED3DFMT_FLAG_COMPRESSED 0x80 #define WINED3DFMT_FLAG_GETDC 0x100 +#define WINED3DFMT_FLAG_FLOAT 0x200 struct wined3d_format_desc { -- 2.11.4.GIT