ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

HRESULT CheckDeviceFormat ( LPD3D9_DRIVERCAPS  pDriverCaps,
D3DFORMAT  AdapterFormat,
DWORD  Usage,
D3DRESOURCETYPE  RType,
D3DFORMAT  CheckFormat 
)

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;
}

Generated on Thu May 24 2012 04:45:04 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.