Home | Info | Community | Development | myReactOS | Contact Us
Definition at line 326 of file format.c.
Referenced by DECLARE_INTERFACE_(), and IDirect3D9Impl_CheckDeviceFormat().
{ const DWORD NumFormatOps = pDriverCaps->NumSupportedFormatOps; DWORD NonCompatibleOperations = 0, MustSupportOperations = 0; BOOL bSupportedWithAutogen = FALSE; DWORD FormatOpIndex; if (FALSE == IsSupportedFormatOp(pDriverCaps, AdapterFormat, D3DFORMAT_OP_DISPLAYMODE | D3DFORMAT_OP_3DACCELERATION)) { return D3DERR_NOTAVAILABLE; } /* Check for driver auto generated mip map support if requested */ if ((Usage & (D3DUSAGE_AUTOGENMIPMAP)) != 0) { switch (RType) { case D3DRTYPE_TEXTURE: if ((pDriverCaps->DriverCaps9.TextureCaps & D3DPTEXTURECAPS_MIPMAP) == 0) return D3DERR_NOTAVAILABLE; break; case D3DRTYPE_VOLUME: case D3DRTYPE_VOLUMETEXTURE: if ((pDriverCaps->DriverCaps9.TextureCaps & D3DPTEXTURECAPS_MIPVOLUMEMAP) == 0) return D3DERR_NOTAVAILABLE; break; case D3DRTYPE_CUBETEXTURE: if ((pDriverCaps->DriverCaps9.TextureCaps & D3DPTEXTURECAPS_MIPCUBEMAP) == 0) return D3DERR_NOTAVAILABLE; break; default: /* Do nothing */ break; } MustSupportOperations |= D3DFORMAT_OP_AUTOGENMIPMAP; } /* Translate from RType and Usage parameters to FormatOps */ switch (RType) { case D3DRTYPE_TEXTURE: MustSupportOperations |= D3DFORMAT_OP_TEXTURE; break; case D3DRTYPE_VOLUME: case D3DRTYPE_VOLUMETEXTURE: MustSupportOperations |= D3DFORMAT_OP_VOLUMETEXTURE; break; case D3DRTYPE_CUBETEXTURE: MustSupportOperations |= D3DFORMAT_OP_CUBETEXTURE; break; default: /* Do nothing */ break; } if (Usage == 0 && RType == D3DRTYPE_SURFACE) { MustSupportOperations |= D3DFORMAT_OP_OFFSCREENPLAIN; } if ((Usage & D3DUSAGE_DEPTHSTENCIL) != 0) { MustSupportOperations |= D3DFORMAT_OP_ZSTENCIL; } if ((Usage & D3DUSAGE_DMAP) != 0) { MustSupportOperations |= D3DFORMAT_OP_DMAP; } if ((Usage & D3DUSAGE_QUERY_LEGACYBUMPMAP) != 0) { MustSupportOperations |= D3DFORMAT_OP_BUMPMAP; } if ((Usage & D3DUSAGE_QUERY_SRGBREAD) != 0) { MustSupportOperations |= D3DFORMAT_OP_SRGBREAD; } if ((Usage & D3DUSAGE_QUERY_SRGBWRITE) != 0) { MustSupportOperations |= D3DFORMAT_OP_SRGBWRITE; } if ((Usage & D3DUSAGE_QUERY_VERTEXTEXTURE) != 0) { MustSupportOperations |= D3DFORMAT_OP_VERTEXTEXTURE; } CheckFormat = GetStencilFormat(pDriverCaps, CheckFormat); if ((Usage & D3DUSAGE_RENDERTARGET) != 0) { if (AdapterFormat == CheckFormat) { MustSupportOperations |= D3DFORMAT_OP_SAME_FORMAT_RENDERTARGET; } else { D3DFORMAT NonAlphaAdapterFormat; D3DFORMAT NonAlphaCheckFormat; NonAlphaAdapterFormat = RemoveAlphaChannel(AdapterFormat); NonAlphaCheckFormat = RemoveAlphaChannel(CheckFormat); if (NonAlphaAdapterFormat == NonAlphaCheckFormat && NonAlphaCheckFormat != D3DFMT_UNKNOWN) { MustSupportOperations |= D3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET; } else { MustSupportOperations |= D3DFORMAT_OP_OFFSCREEN_RENDERTARGET; } } } if ((Usage & D3DUSAGE_QUERY_FILTER) != 0) { NonCompatibleOperations |= D3DFORMAT_OP_OFFSCREENPLAIN; } if ((Usage & D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING) != 0) { NonCompatibleOperations |= D3DFORMAT_OP_NOALPHABLEND; } if ((Usage & D3DUSAGE_QUERY_WRAPANDMIP) != 0) { NonCompatibleOperations |= D3DFORMAT_OP_NOTEXCOORDWRAPNORMIP; } for (FormatOpIndex = 0; FormatOpIndex < NumFormatOps; FormatOpIndex++) { DWORD dwOperations; LPDDSURFACEDESC pSurfaceDesc = &pDriverCaps->pSupportedFormatOps[FormatOpIndex]; if (pSurfaceDesc->ddpfPixelFormat.dwFourCC != CheckFormat) continue; dwOperations = pSurfaceDesc->ddpfPixelFormat.dwOperations; if ((dwOperations & NonCompatibleOperations) != 0) continue; if ((dwOperations & MustSupportOperations) == MustSupportOperations) return D3D_OK; if (((dwOperations & MustSupportOperations) | D3DFORMAT_OP_AUTOGENMIPMAP) == MustSupportOperations) bSupportedWithAutogen = TRUE; } if (TRUE == bSupportedWithAutogen) return D3DOK_NOAUTOGEN; return D3DERR_NOTAVAILABLE; }