Stefan Dösinger : wined3d: Test formats for surface support.
Alexandre Julliard
julliard at winehq.org
Wed Aug 20 08:13:54 CDT 2008
Module: wine
Branch: master
Commit: 438b6bd4c3d82736076a5a55f428a19c54513e35
URL: http://source.winehq.org/git/wine.git/?a=commit;h=438b6bd4c3d82736076a5a55f428a19c54513e35
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Thu Aug 7 14:36:55 2008 -0500
wined3d: Test formats for surface support.
---
dlls/wined3d/directx.c | 59 ++++++++++++++++++++++++++++++-----------------
1 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index de4e1b9..b5eb406 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2410,6 +2410,17 @@ static BOOL CheckTextureCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
return FALSE;
}
+static BOOL CheckSurfaceCapability(UINT Adapter, WINED3DFORMAT AdapterFormat, WINED3DFORMAT CheckFormat) {
+ /* All format that are supported for textures are supported for surfaces as well */
+ if(CheckTextureCapability(Adapter, CheckFormat)) return TRUE;
+ /* All depth stencil formats are supported on surfaces */
+ if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) return TRUE;
+
+ /* Reject other formats */
+ TRACE_(d3d_caps)("[FAILED]\n");
+ return FALSE;
+}
+
static BOOL CheckVertexTextureCapability(UINT Adapter, WINED3DFORMAT CheckFormat)
{
if (!GL_LIMITS(vertex_samplers)) {
@@ -2565,33 +2576,39 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
* - D3DUSAGE_RENDERTARGET
*/
- if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
- if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
- UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
- } else {
- TRACE_(d3d_caps)("[FAILED] - No depthstencil support\n");
- return WINED3DERR_NOTAVAILABLE;
+ if(CheckSurfaceCapability(Adapter, AdapterFormat, CheckFormat)) {
+ if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
+ if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
+ UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
+ } else {
+ TRACE_(d3d_caps)("[FAILED] - No depthstencil support\n");
+ return WINED3DERR_NOTAVAILABLE;
+ }
}
- }
- if(Usage & WINED3DUSAGE_RENDERTARGET) {
- if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) {
- UsageCaps |= WINED3DUSAGE_RENDERTARGET;
- } else {
- TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
- return WINED3DERR_NOTAVAILABLE;
+ if(Usage & WINED3DUSAGE_RENDERTARGET) {
+ if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) {
+ UsageCaps |= WINED3DUSAGE_RENDERTARGET;
+ } else {
+ TRACE_(d3d_caps)("[FAILED] - No rendertarget support\n");
+ return WINED3DERR_NOTAVAILABLE;
+ }
}
- }
- /* Check QUERY_POSTPIXELSHADER_BLENDING support */
- if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {
- if(CheckPostPixelShaderBlendingCapability(Adapter, CheckFormat)) {
- UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
- } else {
- TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
- return WINED3DERR_NOTAVAILABLE;
+ /* Check QUERY_POSTPIXELSHADER_BLENDING support */
+ if(Usage & WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) {
+ if(CheckPostPixelShaderBlendingCapability(Adapter, CheckFormat)) {
+ UsageCaps |= WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING;
+ } else {
+ TRACE_(d3d_caps)("[FAILED] - No query post pixelshader blending support\n");
+ return WINED3DERR_NOTAVAILABLE;
+ }
}
+ } else {
+ TRACE_(d3d_caps)("[FAILED] - Not supported for plain surfaces\n");
+ return WINED3DERR_NOTAVAILABLE;
}
+
} else if(RType == WINED3DRTYPE_TEXTURE) {
/* Texture allows:
* - D3DUSAGE_AUTOGENMIPMAP
More information about the wine-cvs
mailing list