Commit 0e9d02de authored by Roderick Colenbrander's avatar Roderick Colenbrander Committed by Alexandre Julliard

wined3d: Add correct autogenmipmap support.

parent aa46edd6
...@@ -2223,13 +2223,6 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt ...@@ -2223,13 +2223,6 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
return WINED3DERR_INVALIDCALL; return WINED3DERR_INVALIDCALL;
} }
if (Usage & WINED3DUSAGE_AUTOGENMIPMAP) {
if(!GL_SUPPORT(SGIS_GENERATE_MIPMAP)) {
TRACE_(d3d_caps)("[FAILED] - No mipmap generation support\n");
return WINED3DERR_NOTAVAILABLE;
}
}
if(RType == WINED3DRTYPE_CUBETEXTURE) { if(RType == WINED3DRTYPE_CUBETEXTURE) {
/* Cubetexture allows: /* Cubetexture allows:
* - D3DUSAGE_AUTOGENMIPMAP * - D3DUSAGE_AUTOGENMIPMAP
...@@ -2246,6 +2239,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt ...@@ -2246,6 +2239,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
if(!Usage) if(!Usage)
return WINED3D_OK; return WINED3D_OK;
if(Usage & WINED3DUSAGE_AUTOGENMIPMAP) {
/* Check for automatic mipmap generation support */
if(GL_SUPPORT(SGIS_GENERATE_MIPMAP)) {
UsageCaps |= WINED3DUSAGE_AUTOGENMIPMAP;
} else {
/* When autogenmipmap isn't around continue and return WINED3DOK_NOAUOTGEN instead of D3D_OK */
TRACE_(d3d_caps)("[FAILED] - No autogenmipmap support, but continuing\n");
}
}
if(Usage & WINED3DUSAGE_RENDERTARGET) { if(Usage & WINED3DUSAGE_RENDERTARGET) {
if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) { if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) {
UsageCaps |= WINED3DUSAGE_RENDERTARGET; UsageCaps |= WINED3DUSAGE_RENDERTARGET;
...@@ -2328,6 +2331,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt ...@@ -2328,6 +2331,16 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
if(!Usage) if(!Usage)
return WINED3D_OK; return WINED3D_OK;
if(Usage & WINED3DUSAGE_AUTOGENMIPMAP) {
/* Check for automatic mipmap generation support */
if(GL_SUPPORT(SGIS_GENERATE_MIPMAP)) {
UsageCaps |= WINED3DUSAGE_AUTOGENMIPMAP;
} else {
/* When autogenmipmap isn't around continue and return WINED3DOK_NOAUOTGEN instead of D3D_OK */
TRACE_(d3d_caps)("[FAILED] - No autogenmipmap support, but continuing\n");
}
}
if(Usage & WINED3DUSAGE_RENDERTARGET) { if(Usage & WINED3DUSAGE_RENDERTARGET) {
if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) { if(CheckRenderTargetCapability(AdapterFormat, CheckFormat)) {
UsageCaps |= WINED3DUSAGE_RENDERTARGET; UsageCaps |= WINED3DUSAGE_RENDERTARGET;
...@@ -2631,10 +2644,17 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt ...@@ -2631,10 +2644,17 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormat(IWineD3D *iface, UINT Adapt
break; break;
} }
/* When the UsageCaps exactly matches Usage return WINED3D_OK except for the situation in which
* WINED3DUSAGE_AUTOGENMIPMAP isn't around, then WINED3DOK_NOAUTOGEN is returned if all the other
TRACE_(d3d_caps)("[FAILED]\n"); * usage flags match. */
return WINED3DERR_NOTAVAILABLE; if(UsageCaps == Usage) {
return WINED3D_OK;
} else if((UsageCaps == (Usage & ~WINED3DUSAGE_AUTOGENMIPMAP)) && (Usage & WINED3DUSAGE_AUTOGENMIPMAP)){
return WINED3DOK_NOAUTOGEN;
} else {
TRACE_(d3d_caps)("[FAILED] - Usage=%#08x requested but only %#08x is available\n", Usage, UsageCaps);
return WINED3DERR_NOTAVAILABLE;
}
} }
static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormatConversion(IWineD3D *iface, UINT Adapter, WINED3DDEVTYPE DeviceType, static HRESULT WINAPI IWineD3DImpl_CheckDeviceFormatConversion(IWineD3D *iface, UINT Adapter, WINED3DDEVTYPE DeviceType,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment