wined3d: Move depth/stencil verification to CheckDepthStencilCapability.
This commit is contained in:
parent
599f58cc7c
commit
02f6c9ece8
|
@ -1806,10 +1806,50 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceType(IWineD3D *iface, UINT Adapter
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define GLINFO_LOCATION Adapters[Adapter].gl_info
|
#define GLINFO_LOCATION Adapters[Adapter].gl_info
|
||||||
|
/* Check if the given DisplayFormat + DepthStencilFormat combination is valid for the Adapter */
|
||||||
|
static BOOL CheckDepthStencilCapability(UINT Adapter, WINED3DFORMAT DisplayFormat,
|
||||||
|
WINED3DFORMAT DepthStencilFormat)
|
||||||
|
{
|
||||||
|
int it=0;
|
||||||
|
WineD3D_PixelFormat *cfgs = Adapters[Adapter].cfgs;
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Walk through all WGL pixel formats to find a match */
|
||||||
|
cfgs = Adapters[Adapter].cfgs;
|
||||||
|
for (it = 0; it < Adapters[Adapter].nCfgs; ++it) {
|
||||||
|
if (IWineD3DImpl_IsPixelFormatCompatibleWithRenderFmt(&cfgs[it], DisplayFormat)) {
|
||||||
|
if (IWineD3DImpl_IsPixelFormatCompatibleWithDepthFmt(&cfgs[it], DepthStencilFormat)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapter, WINED3DDEVTYPE DeviceType,
|
static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapter, WINED3DDEVTYPE DeviceType,
|
||||||
WINED3DFORMAT AdapterFormat, DWORD Usage, WINED3DRESOURCETYPE RType, WINED3DFORMAT CheckFormat) {
|
WINED3DFORMAT AdapterFormat, DWORD Usage, WINED3DRESOURCETYPE RType, WINED3DFORMAT CheckFormat) {
|
||||||
IWineD3DImpl *This = (IWineD3DImpl *)iface;
|
IWineD3DImpl *This = (IWineD3DImpl *)iface;
|
||||||
|
DWORD UsageCaps = 0;
|
||||||
|
|
||||||
TRACE_(d3d_caps)("(%p)-> (STUB) (Adptr:%d, DevType:(%u,%s), AdptFmt:(%u,%s), Use:(%u,%s,%s), ResTyp:(%x,%s), CheckFmt:(%u,%s))\n",
|
TRACE_(d3d_caps)("(%p)-> (STUB) (Adptr:%d, DevType:(%u,%s), AdptFmt:(%u,%s), Use:(%u,%s,%s), ResTyp:(%x,%s), CheckFmt:(%u,%s))\n",
|
||||||
This,
|
This,
|
||||||
Adapter,
|
Adapter,
|
||||||
|
@ -1842,7 +1882,38 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(RType == WINED3DRTYPE_VOLUMETEXTURE) {
|
if(RType == WINED3DRTYPE_SURFACE) {
|
||||||
|
/* Surface allows:
|
||||||
|
* - D3DUSAGE_DEPTHSTENCIL
|
||||||
|
* - D3DUSAGE_NONSECURE (d3d9ex)
|
||||||
|
* - 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(RType == WINED3DRTYPE_TEXTURE) {
|
||||||
|
/* Texture allows:
|
||||||
|
* - D3DUSAGE_AUTOGENMIPMAP
|
||||||
|
* - D3DUSAGE_DEPTHSTENCIL
|
||||||
|
* - D3DUSAGE_DMAP
|
||||||
|
* - D3DUSAGE_DYNAMIC
|
||||||
|
* - D3DUSAGE_NONSECURE (d3d9ex)
|
||||||
|
* - D3DUSAGE_RENDERTARGET
|
||||||
|
* - D3DUSAGE_SOFTWAREPROCESSING
|
||||||
|
* - D3DUSAGE_TEXTAPI (d3d9ex)
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(CheckDepthStencilCapability(Adapter, AdapterFormat, CheckFormat)) {
|
||||||
|
if(Usage & WINED3DUSAGE_DEPTHSTENCIL)
|
||||||
|
UsageCaps |= WINED3DUSAGE_DEPTHSTENCIL;
|
||||||
|
}
|
||||||
|
} else if(RType == WINED3DRTYPE_VOLUMETEXTURE) {
|
||||||
if(!GL_SUPPORT(EXT_TEXTURE3D)) {
|
if(!GL_SUPPORT(EXT_TEXTURE3D)) {
|
||||||
TRACE_(d3d_caps)("[FAILED] - No volume texture support\n");
|
TRACE_(d3d_caps)("[FAILED] - No volume texture support\n");
|
||||||
return WINED3DERR_NOTAVAILABLE;
|
return WINED3DERR_NOTAVAILABLE;
|
||||||
|
@ -1919,29 +1990,7 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Usage & WINED3DUSAGE_DEPTHSTENCIL) {
|
if(Usage & WINED3DUSAGE_RENDERTARGET) {
|
||||||
switch (CheckFormat) {
|
|
||||||
/* In theory we could do all formats, just fetch them accordingly should the buffer be locked.
|
|
||||||
* Windows supports only those 3, and enumerating the other formats confuses applications
|
|
||||||
*/
|
|
||||||
case WINED3DFMT_D24S8:
|
|
||||||
case WINED3DFMT_D24X8:
|
|
||||||
case WINED3DFMT_D16:
|
|
||||||
TRACE_(d3d_caps)("[OK]\n");
|
|
||||||
return WINED3D_OK;
|
|
||||||
case WINED3DFMT_D16_LOCKABLE:
|
|
||||||
case WINED3DFMT_D24FS8:
|
|
||||||
case WINED3DFMT_D32F_LOCKABLE:
|
|
||||||
case WINED3DFMT_D24X4S4:
|
|
||||||
case WINED3DFMT_D15S1:
|
|
||||||
case WINED3DFMT_D32:
|
|
||||||
TRACE_(d3d_caps)("[FAILED]. Disabled because not enumerated on windows\n");
|
|
||||||
return WINED3DERR_NOTAVAILABLE;
|
|
||||||
default:
|
|
||||||
TRACE_(d3d_caps)("[FAILED]\n");
|
|
||||||
return WINED3DERR_NOTAVAILABLE;
|
|
||||||
}
|
|
||||||
} else if(Usage & WINED3DUSAGE_RENDERTARGET) {
|
|
||||||
switch (CheckFormat) {
|
switch (CheckFormat) {
|
||||||
case WINED3DFMT_R8G8B8:
|
case WINED3DFMT_R8G8B8:
|
||||||
case WINED3DFMT_A8R8G8B8:
|
case WINED3DFMT_A8R8G8B8:
|
||||||
|
@ -2190,6 +2239,8 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TRACE_(d3d_caps)("[FAILED]\n");
|
TRACE_(d3d_caps)("[FAILED]\n");
|
||||||
return WINED3DERR_NOTAVAILABLE;
|
return WINED3DERR_NOTAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue