[PATCH] WineD3D: Test formats for surface support=0A=
Stefan Doesinger
stefan at codeweavers.com
Thu Aug 7 14:36:55 CDT 2008
=0A=
Currently, if the application asks for plain surface support=0A=
without any flags, we return OK on all formats. This patch adds=0A=
some filters for sanity.=0A=
=0A=
This patch is needed by the next patch, which adds a YUV format=0A=
test and YUV support based on an opengl extension. The YUV test=0A=
operates on surface because Windows doesn't do YUV textures, so=0A=
it has to check for surface capability=0A=
---=0A=
dlls/wined3d/directx.c | 59 =
++++++++++++++++++++++++++++++-----------------=0A=
1 files changed, 38 insertions(+), 21 deletions(-)=0A=
=0A=
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c=0A=
index de4e1b9..b5eb406 100644=0A=
--- a/dlls/wined3d/directx.c=0A=
+++ b/dlls/wined3d/directx.c=0A=
@@ -2410,6 +2410,17 @@ static BOOL CheckTextureCapability(UINT Adapter, =
WINED3DFORMAT CheckFormat)=0A=
return FALSE;=0A=
}=0A=
=0A=
+static BOOL CheckSurfaceCapability(UINT Adapter, WINED3DFORMAT =
AdapterFormat, WINED3DFORMAT CheckFormat) {=0A=
+ /* All format that are supported for textures are supported for =
surfaces as well */=0A=
+ if(CheckTextureCapability(Adapter, CheckFormat)) return TRUE;=0A=
+ /* All depth stencil formats are supported on surfaces */=0A=
+ if(CheckDepthStencilCapability(Adapter, AdapterFormat, =
CheckFormat)) return TRUE;=0A=
+=0A=
+ /* Reject other formats */=0A=
+ TRACE_(d3d_caps)("[FAILED]\n");=0A=
+ return FALSE;=0A=
+}=0A=
+=0A=
static BOOL CheckVertexTextureCapability(UINT Adapter, WINED3DFORMAT =
CheckFormat)=0A=
{=0A=
if (!GL_LIMITS(vertex_samplers)) {=0A=
@@ -2565,33 +2576,39 @@ static HRESULT WINAPI =
IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt=0A=
* - D3DUSAGE_RENDERTARGET=0A=
*/=0A=
=0A=
- if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {=0A=
- if(CheckDepthStencilCapability(Adapter, AdapterFormat, =
CheckFormat)) {=0A=
- UsageCaps |=3D WINED3DUSAGE_DEPTHSTENCIL;=0A=
- } else {=0A=
- TRACE_(d3d_caps)("[FAILED] - No depthstencil =
support\n");=0A=
- return WINED3DERR_NOTAVAILABLE;=0A=
+ if(CheckSurfaceCapability(Adapter, AdapterFormat, CheckFormat)) =
{=0A=
+ if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {=0A=
+ if(CheckDepthStencilCapability(Adapter, AdapterFormat, =
CheckFormat)) {=0A=
+ UsageCaps |=3D WINED3DUSAGE_DEPTHSTENCIL;=0A=
+ } else {=0A=
+ TRACE_(d3d_caps)("[FAILED] - No depthstencil =
support\n");=0A=
+ return WINED3DERR_NOTAVAILABLE;=0A=
+ }=0A=
}=0A=
- }=0A=
=0A=
- if(Usage & WINED3DUSAGE_RENDERTARGET) {=0A=
- if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) =
{=0A=
- UsageCaps |=3D WINED3DUSAGE_RENDERTARGET;=0A=
- } else {=0A=
- TRACE_(d3d_caps)("[FAILED] - No rendertarget =
support\n");=0A=
- return WINED3DERR_NOTAVAILABLE;=0A=
+ if(Usage & WINED3DUSAGE_RENDERTARGET) {=0A=
+ if(CheckRenderTargetCapability(AdapterFormat, =
CheckFormat)) {=0A=
+ UsageCaps |=3D WINED3DUSAGE_RENDERTARGET;=0A=
+ } else {=0A=
+ TRACE_(d3d_caps)("[FAILED] - No rendertarget =
support\n");=0A=
+ return WINED3DERR_NOTAVAILABLE;=0A=
+ }=0A=
}=0A=
- }=0A=
=0A=
- /* Check QUERY_POSTPIXELSHADER_BLENDING support */=0A=
- if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {=0A=
- if(CheckPostPixelShaderBlendingCapability(Adapter, =
CheckFormat)) {=0A=
- UsageCaps |=3D =
WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;=0A=
- } else {=0A=
- TRACE_(d3d_caps)("[FAILED] - No query post pixelshader =
blending support\n");=0A=
- return WINED3DERR_NOTAVAILABLE;=0A=
+ /* Check QUERY_POSTPIXELSHADER_BLENDING support */=0A=
+ if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {=0A=
+ if(CheckPostPixelShaderBlendingCapability(Adapter, =
CheckFormat)) {=0A=
+ UsageCaps |=3D =
WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;=0A=
+ } else {=0A=
+ TRACE_(d3d_caps)("[FAILED] - No query post =
pixelshader blending support\n");=0A=
+ return WINED3DERR_NOTAVAILABLE;=0A=
+ }=0A=
}=0A=
+ } else {=0A=
+ TRACE_(d3d_caps)("[FAILED] - Not supported for plain =
surfaces\n");=0A=
+ return WINED3DERR_NOTAVAILABLE;=0A=
}=0A=
+=0A=
} else if(RType =3D=3D WINED3DRTYPE_TEXTURE) {=0A=
/* Texture allows:=0A=
* - D3DUSAGE_AUTOGENMIPMAP=0A=
-- =0A=
1.5.4.5=0A=
=0A=
------=_NextPart_000_001D_01C901F1.A3DF0D20--
More information about the wine-patches
mailing list