📄 halcaps.c
字号:
/******************************************************************************
<module>
* Name : halcaps.c
* Title : DDraw Hal Caps info
* Author(s) : Imagination Technologies
* Created : 26 May 2004
*
* Copyright : 2004 by Imagination Technologies Limited.
* All rights reserved. No part of this software, either
* material or conceptual may be copied or distributed,
* transmitted, transcribed, stored in a retrieval system
* or translated into any human or computer language in any
* form by any means, electronic, mechanical, manual or
* other-wise, or disclosed to third parties without the
* express written permission of Imagination Technologies
* Limited, Unit 8, HomePark Industrial Estate,
* King's Langley, Hertfordshire, WD4 8LZ, U.K.
*
* Description : DDraw Hal Caps info
*
* Platform : Windows CE
*
$Log: halcaps.c $
********************************************************************************/
#include "ddraw_headers.h"
#include "overlay.h"
/*****************************************************************************
Driver Data Structure
*****************************************************************************/
PDXHALDATA gpsDriverData = NULL;
/*****************************************************************************
Texture/FourCC surface formats
*****************************************************************************/
/* FourCC's that we support */
DWORD pdwHALFourCCs[] =
{
HALFOURCC_UYVY,
HALFOURCC_UYNV,
HALFOURCC_YUY2,
HALFOURCC_YUNV,
HALFOURCC_YVYU,
HALFOURCC_VYUY,
HALFOURCC_IMC2,
HALFOURCC_YV12,
HALFOURCC_0888,
/*
PowerVR proprietry 8x8 pixel-block-based 2bpp compressed format
*/
HALFOURCC_PVRTC2,
/*
PowerVR proprietry 8x8 pixel-block-based 4bpp compressed format
*/
HALFOURCC_PVRTC4,
/*
1-bit alpha format
*/
HALFOURCC_A1
};
/* Number of FourCC formats supported */
DWORD dwHALNumFourCCs = sizeof(pdwHALFourCCs) / sizeof(*pdwHALFourCCs);
/*****************************************************************************
DirectDraw Caps
*****************************************************************************/
/*
DirectDraw core caps structure.
*/
DDCORECAPS sHALDDCoreCaps =
{
sizeof(DDCORECAPS), /* dwSize */
DDCAPS_GDI | /* dwCaps */
DDCAPS_3D |
DDCAPS_ALPHA |
DDCAPS_BLT |
DDCAPS_BLTCOLORFILL |
DDCAPS_BLTFOURCC |
DDCAPS_BLTSTRETCH |
DDCAPS_CANCLIP |
DDCAPS_CANCLIPSTRETCHED |
DDCAPS_COLORKEY |
DDCAPS_COLORKEYHWASSIST |
#ifdef SUPPORT_OVERLAY
DDCAPS_OVERLAY |
DDCAPS_OVERLAYFOURCC |
DDCAPS_OVERLAYSTRETCH |
#endif
// DDCAPS_PALETTE | /* palette support for more than just the primary surface? */
DDCAPS_READSCANLINE |
DDCAPS_VBI |
0,
//DDCAPS2_CERTIFIED | /* dwCaps2 */
//DDCAPS2_COLORCONTROLPRIMARY |
DDCAPS2_CANFLIPODDEVEN |
DDCAPS2_CANBOBHARDWARE |
DDCAPS2_WIDESURFACES |
DDCAPS2_CANRENDERWINDOWED |
DDCAPS2_COPYFOURCC |
DDCAPS2_FLIPINTERVAL |
DDCAPS2_FLIPNOVSYNC |
DDCAPS2_PRIMARYGAMMA |
0,
DDCKEYCAPS_DESTBLT | /* dwCKeyCaps */
DDCKEYCAPS_SRCBLT |
#ifdef SUPPORT_OVERLAY
DDCKEYCAPS_DESTOVERLAY |
DDCKEYCAPS_DESTOVERLAYONEACTIVE |
DDCKEYCAPS_NOCOSTOVERLAY|
#endif
0,
DDFXCAPS_BLTARITHSTRETCHY | /* dwFXCaps */
DDFXCAPS_BLTSHRINKX |
DDFXCAPS_BLTSHRINKY |
DDFXCAPS_BLTSTRETCHX |
DDFXCAPS_BLTSTRETCHY |
DDFXCAPS_BLTROTATION90 |
#ifdef SUPPORT_OVERLAY
DDFXCAPS_OVERLAYARITHSTRETCHY |
DDFXCAPS_OVERLAYSHRINKX |
DDFXCAPS_OVERLAYSHRINKY |
DDFXCAPS_OVERLAYSTRETCHX |
DDFXCAPS_OVERLAYSTRETCHY |
#endif
0,
DDFXALPHACAPS_BLTALPHAPIXELS | /* dwFXAlphaCaps */
0,
0,/* may add later! */ /* dwPalCaps */
0, /* dwSVCaps */
DDBD_4 | DDBD_8, /* dwAlphaBltConstBitDepths */
DDBD_4 | DDBD_8, /* dwAlphaBltPixelBitDepths */
0, /* dwAlphaBltSurfaceBitDepths */
0, /* dwAlphaOverlayConstBitDepths */
0, /* dwAlphaOverlayPixelBitDepths */
0, /* dwAlphaOverlaySurfaceBitDepths */
DDBD_16 | DDBD_24, /* dwZBufferBitDepths */
0, /* dwVidMemTotal - set at runtime */
0, /* dwVidMemFree - ditto */
#ifdef SUPPORT_OVERLAY
1, /* dwMaxVisibleOverlays */
#else
0, /* dwMaxVisibleOverlays */
#endif
0, /* dwCurrVisibleOverlays */
sizeof(pdwHALFourCCs) /
sizeof(*pdwHALFourCCs), /* dwNumFourCCCodes */
0, /* dwAlignBoundarySrc */
0, /* dwAlignSizeSrc */
0, /* dwAlignBoundaryDest */
0, /* dwAlignSizeDest */
0, /* dwAlignStrideAlign */
{ /* dwRops */
0,
0,
0,
0,
0,
0,
1 << ((SRCCOPY >> 16) & 0x1F),
0
},
{ /* ddsCaps */
DDSCAPS_BACKBUFFER | /* dwCaps */
DDSCAPS_COMPLEX |
DDSCAPS_FLIP |
DDSCAPS_FRONTBUFFER |
DDSCAPS_LOCALVIDMEM |
DDSCAPS_OFFSCREENPLAIN |
DDSCAPS_PRIMARYSURFACE |
DDSCAPS_VIDEOMEMORY |
#ifdef SUPPORT_OVERLAY
DDSCAPS_OVERLAY |
DDSCAPS_HWCODEC |
#endif
0
},
125, /* dwMinOverlayStretch */
8000, /* dwMaxOverlayStretch */
0, /* dwMinLiveVideoStretch */
0, /* dwMaxLiveVideoStretch */
125, /* dwMinHwCodecStretch */
8000, /* dwMaxHwCodecStretch */
0,0,0, /* dwReserved1/2/3 */
/* dwSVBCaps */
0,
DDCKEYCAPS_SRCBLT, /* dwSVBCKeyCaps */
0, /* dwSVBFXCaps */
{ /* dwSVBRops */
0,
0,
0,
0,
0,
0,
1 << ((SRCCOPY >> 16) & 0x1F),
0
},
0, /* dwVSBCaps */
0, /* dwVSBCKeyCaps */
0, /* dwVSBFXCaps */
{ /* dwVSBRops */
0,
0,
0,
0,
0,
0,
0,
0
},
0, /* dwSSBCaps */
0, /* dwSSBCKeyCaps */
0, /* dwSSBFXCaps */
{ /* dwSSBRops */
0,
0,
0,
0,
0,
0,
0,
0
},
0, /* dwMaxVideoPorts */
0, /* dwCurrVideoPorts */
DDCAPS2_WIDESURFACES | /* dwSVBCaps2 */
DDCAPS2_COPYFOURCC |
0
};
/*
DirectDraw more caps structure.
*/
DDMORECAPS sMoreCaps =
{
sizeof(DDMORECAPS), /* dwSize */
DDALPHACAPS_BLTALPHAPIXELS | /* dwAlphaCaps */
DDALPHACAPS_BLTNONPREMULT |
DDALPHACAPS_BLTARGBSCALE1F |
DDALPHACAPS_BLTALPHAFILL |
DDALPHACAPS_BLTALPHAANDARGBSCALING ,
0, /* dwSVBAlphaCaps */
0, /* dwVSBAlphaCaps */
0, /* dwSSBAlphaCaps */
0, /* dwFilterCaps */
0, /* dwSVBFilterCaps */
0, /* dwVSBFilterCaps */
0, /* dwSSBFilterCaps */
0, /* dwTransformCaps */
0, /* dwSVBTransformCaps */
0, /* dwVSBTransformCaps */
0, /* dwSSBTransformCaps */
0, /* dwBltAffineMinifyLimit */
0 /* dwOverlayAffineMinifyLimit */
};
/*****************************************************************************
DirectDraw Callbacks
*****************************************************************************/
/* DD basic callbacks */
DDHAL_DDCALLBACKS sHALDDCallbacks =
{
sizeof(DDHAL_DDCALLBACKS), /* dwSize */
DDHAL_CB32_CANCREATESURFACE | /* dwFlags */
DDHAL_CB32_CREATESURFACE |
DDHAL_CB32_DESTROYDRIVER |
DDHAL_CB32_WAITFORVERTICALBLANK |
DDHAL_CB32_GETSCANLINE |
DDHAL_CB32_SETEXCLUSIVEMODE |
0,
HALDestroyDriver, /* DestroyDriver */
HALCreateSurface, /* CreateSurface */
NULL, /* SetColorKey */
NULL, /* SetMode */
HALWaitForVerticalBlank, /* WaitForVerticalBlank */
HALCanCreateSurface, /* CanCreateSurface */
NULL, /* CreatePalette */
HALGetScanLine, /* GetScanLine */
HALSetExclusiveMode, /* SetExclusiveMode */
NULL /* FlipToGDISurface */
};
/* DD Surface callbacks */
DDHAL_DDSURFACECALLBACKS sHALDDSurfaceCallbacks =
{
sizeof(DDHAL_DDSURFACECALLBACKS), /* dwSize */
DDHAL_SURFCB32_LOCK | /* dwFlags */
DDHAL_SURFCB32_UNLOCK |
DDHAL_SURFCB32_BLT |
DDHAL_SURFCB32_FLIP |
DDHAL_SURFCB32_SETCOLORKEY |
DDHAL_SURFCB32_GETBLTSTATUS |
DDHAL_SURFCB32_GETFLIPSTATUS |
DDHAL_SURFCB32_DESTROYSURFACE |
#ifdef SUPPORT_OVERLAY
DDHAL_SURFCB32_UPDATEOVERLAY |
DDHAL_SURFCB32_SETOVERLAYPOSITION |
#endif
0,
HALDestroySurface, /* DestroySurface */
HALFlip, /* Flip */
NULL, /* SetClipList */
HALLock, /* Lock */
HALUnlock, /* Unlock */
HALBlt, /* Blt */
HALSetColorKey, /* SetColorKey */
NULL, /* AddAttachedSurface */
HALGetBltStatus, /* GetBltStatus */
HALGetFlipStatus, /* GetFlipStatus */
#ifdef SUPPORT_OVERLAY
HALUpdateOverlay, /* UpdateOverlay */
HALSetOverlayPosition, /* SetOverlayPosition */
#else
NULL, /* UpdateOverlay */
NULL, /* SetOverlayPosition */
#endif
NULL, /* reserved4 */
NULL /* SetPalette */
};
/* DD palette callback table */
DDHAL_DDPALETTECALLBACKS sHALDDPaletteCallbacks =
{
sizeof(DDHAL_DDPALETTECALLBACKS), /* dwSize */
0, /* dwFlags */
NULL, /* DestroyPalette */
NULL /* SetEntries */
};
/*****************************************************************************
<function>
FUNCTION : HALGetDriverInfo
PURPOSE : Query for extra info
PARAMETERS : LPDDHAL_GETDRIVERINFODATA data structure
RETURNS : DDHAL return code
<function/>
*****************************************************************************/
DWORD HALGetDriverInfo(LPDDHAL_GETDRIVERINFODATA Param)
{
DWORD dwSize;
HAL_DPF((DPF_ENTER(L"HalGetDriverInfo")));
if(IsEqualIID(&(Param->guidInfo), &GUID_DDMoreCaps))
{
dwSize = Param->dwExpectedSize;
DPFL4("Requesting MORECAPS caps");
if (sizeof(DDMORECAPS) < dwSize)
{
dwSize = sizeof(DDMORECAPS);
}
memcpy(Param->lpvData,&sMoreCaps, dwSize);
Param->dwActualSize = sizeof(DDMORECAPS);
Param->ddRVal = DD_OK;
}
else
{
Param->ddRVal = DDERR_CURRENTLYNOTAVAIL;
}
HAL_DPF((DPF_EXIT(L"HalGetDriverInfo"));
return DDHAL_DRIVER_HANDLED;
}
/*****************************************************************************
End of file (halcaps.c)
*****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -