| /**************************************************************************** |
| * |
| * Copyright (c) 2005 - 2014 by Vivante Corp. All rights reserved. |
| * |
| * The material in this file is confidential and contains trade secrets |
| * of Vivante Corporation. This is proprietary information owned by |
| * Vivante Corporation. No part of this work may be disclosed, |
| * reproduced, copied, transmitted, or used in any way for any purpose, |
| * without the express written permission of Vivante Corporation. |
| * |
| *****************************************************************************/ |
| |
| |
| #ifndef __gc_hal_base_h_ |
| #define __gc_hal_base_h_ |
| |
| #include "gc_hal_enum.h" |
| #include "gc_hal_types.h" |
| #include "gc_hal_dump.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /******************************************************************************\ |
| ****************************** Object Declarations ***************************** |
| \******************************************************************************/ |
| |
| typedef struct _gckOS * gckOS; |
| typedef struct _gcoHAL * gcoHAL; |
| typedef struct _gcoOS * gcoOS; |
| typedef struct _gco2D * gco2D; |
| typedef struct gcsATOM * gcsATOM_PTR; |
| |
| #if gcdENABLE_3D |
| typedef struct _gco3D * gco3D; |
| typedef struct _gcoCL * gcoCL; |
| typedef struct _gcsFAST_FLUSH * gcsFAST_FLUSH_PTR; |
| #endif |
| |
| typedef struct _gcoSURF * gcoSURF; |
| typedef struct _gcsSURF_INFO * gcsSURF_INFO_PTR; |
| typedef struct _gcsSURF_NODE * gcsSURF_NODE_PTR; |
| typedef struct _gcsSURF_FORMAT_INFO * gcsSURF_FORMAT_INFO_PTR; |
| typedef struct _gcsPOINT * gcsPOINT_PTR; |
| typedef struct _gcsSIZE * gcsSIZE_PTR; |
| typedef struct _gcsRECT * gcsRECT_PTR; |
| typedef struct _gcsBOUNDARY * gcsBOUNDARY_PTR; |
| typedef struct _gcoDUMP * gcoDUMP; |
| typedef struct _gcoHARDWARE * gcoHARDWARE; |
| typedef union _gcuVIDMEM_NODE * gcuVIDMEM_NODE_PTR; |
| typedef struct _gcsVIDMEM_NODE * gckVIDMEM_NODE; |
| |
| #if gcdENABLE_VG |
| typedef struct _gcoVG * gcoVG; |
| typedef struct _gcsCOMPLETION_SIGNAL * gcsCOMPLETION_SIGNAL_PTR; |
| typedef struct _gcsCONTEXT_MAP * gcsCONTEXT_MAP_PTR; |
| #else |
| typedef void * gcoVG; |
| #endif |
| |
| #if gcdSYNC |
| typedef struct _gcoFENCE * gcoFENCE; |
| typedef struct _gcsSYNC_CONTEXT * gcsSYNC_CONTEXT_PTR; |
| #endif |
| |
| /******************************************************************************\ |
| ********************* Share obj lock/unlock macros. **************************** |
| \******************************************************************************/ |
| #define gcmLOCK_SHARE_OBJ(Obj) \ |
| { \ |
| if(Obj->sharedLock != gcvNULL)\ |
| {\ |
| (gcoOS_AcquireMutex( \ |
| gcvNULL, Obj->sharedLock, gcvINFINITE));\ |
| }\ |
| } |
| |
| |
| #define gcmUNLOCK_SHARE_OBJ(Obj)\ |
| {\ |
| if(Obj->sharedLock != gcvNULL)\ |
| {\ |
| (gcoOS_ReleaseMutex(gcvNULL, Obj->sharedLock));\ |
| }\ |
| } |
| |
| #if defined(ANDROID) |
| typedef struct _gcoOS_SymbolsList gcoOS_SymbolsList; |
| #endif |
| |
| /******************************************************************************\ |
| ******************************* Process local storage ************************* |
| \******************************************************************************/ |
| |
| typedef struct _gcsPLS * gcsPLS_PTR; |
| |
| #if gcdENABLE_3D |
| /****************************************************************************** |
| ** |
| ** Patch defines which should be moved to dedicate file later |
| ** |
| ** !!! ALWAYS ADD new ID in the TAIL, otherwise will break exising TRACE FILE |
| *******************************************************************************/ |
| typedef enum _gcePATCH_ID |
| { |
| gcvPATCH_NOTINIT = -1, |
| gcvPATCH_INVALID = 0, |
| |
| #if gcdDEBUG_OPTION |
| gcvPATCH_DEBUG, |
| #endif |
| gcvPATCH_GOOGLEEARTH, |
| gcvPATCH_GTFES30, |
| gcvPATCH_CTGL11, |
| gcvPATCH_CTGL20, |
| gcvPATCH_GLBM11, |
| gcvPATCH_GLBM21, |
| gcvPATCH_GLBM25, |
| gcvPATCH_GLBM27, |
| gcvPATCH_GLBMGUI, |
| gcvPATCH_GFXBENCH, |
| gcvPATCH_ANTUTU, /* Antutu 3.x */ |
| gcvPATCH_ANTUTU4X, /* Antutu 4.x */ |
| gcvPATCH_QUADRANT, |
| gcvPATCH_GPUBENCH, |
| gcvPATCH_DUOKAN, |
| gcvPATCH_GLOFTSXHM, |
| gcvPATCH_XRUNNER, |
| gcvPATCH_BUSPARKING3D, |
| gcvPATCH_SIEGECRAFT, |
| gcvPATCH_PREMIUM, |
| gcvPATCH_RACEILLEGAL, |
| gcvPATCH_MEGARUN, |
| gcvPATCH_BMGUI, |
| gcvPATCH_NENAMARK, |
| gcvPATCH_NENAMARK2, |
| gcvPATCH_FISHNOODLE, |
| gcvPATCH_MM06, |
| gcvPATCH_MM07, |
| gcvPATCH_BM21, |
| gcvPATCH_SMARTBENCH, |
| gcvPATCH_JPCT, |
| gcvPATCH_NEOCORE, |
| gcvPATCH_RTESTVA, |
| gcvPATCH_NBA2013, |
| gcvPATCH_BARDTALE, |
| gcvPATCH_F18, |
| gcvPATCH_CARPARK, |
| gcvPATCH_CARCHALLENGE, |
| gcvPATCH_HEROESCALL, |
| gcvPATCH_GLOFTF3HM, |
| gcvPATCH_CRAZYRACING, |
| gcvPATCH_FIREFOX, |
| gcvPATCH_CHROME, |
| gcvPATCH_MONOPOLY, |
| gcvPATCH_SNOWCOLD, |
| gcvPATCH_BM3, |
| gcvPATCH_BASEMARKX, |
| gcvPATCH_DEQP, |
| gcvPATCH_SF4, |
| gcePATCH_MGOHEAVEN2, |
| gcePATCH_SILIBILI, |
| gcePATCH_ELEMENTSDEF, |
| gcePATCH_GLOFTKRHM, |
| gcvPATCH_OCLCTS, |
| gcvPATCH_A8HP, |
| gcvPATCH_A8CN, |
| gcvPATCH_WISTONESG, |
| gcvPATCH_SPEEDRACE, |
| gcvPATCH_FSBHAWAIIF, |
| gcvPATCH_AIRNAVY, |
| gcvPATCH_F18NEW, |
| gcvPATCH_CKZOMBIES2, |
| gcvPATCH_EADGKEEPER, |
| gcvPATCH_BASEMARK2V2, |
| gcvPATCH_RIPTIDEGP2, |
| gcvPATCH_OESCTS, |
| gcvPATCH_GANGSTAR, |
| gcvPATCH_WHRKYZIXOVAN, |
| gcvPATCH_NAMESGAS, |
| gcvPATCH_AFTERBURNER, |
| gcvPATCH_UIMARK, |
| gcvPATCH_FM_OES_PLAYER, |
| gcvPATCH_SUMSUNG_BENCH, |
| gcvPATCH_ROCKSTAR_MAXPAYNE, |
| gcvPATCH_TITANPACKING, |
| gcvPATCH_BASEMARKOSIICN, |
| gcvPATCH_FRUITNINJA, |
| gcvPATCH_ANDROID_WEBGL, |
| #if defined(ANDROID) |
| gcePATCH_ANDROID_CTS_MEDIA_PRESENTATIONTIME, |
| gcePATCH_ANDROID_CTS_GRAPHICS_GLVERSION, |
| #endif |
| gcvPATCH_ANDROID_COMPOSITOR, |
| gcvPATCH_CTS_TEXTUREVIEW, |
| gcvPATCH_WATER2_CHUKONG, |
| |
| gcvPATCH_COUNT |
| } gcePATCH_ID; |
| #endif /* gcdENABLE_3D */ |
| |
| #if gcdENABLE_3D |
| #define gcdPROC_IS_WEBGL(patchId) ((patchId) == gcvPATCH_CHROME || (patchId) == gcvPATCH_FIREFOX || (patchId) == gcvPATCH_ANDROID_WEBGL) |
| #endif /* gcdENABLE_3D */ |
| |
| typedef void (* gctPLS_DESTRUCTOR) ( |
| gcsPLS_PTR |
| ); |
| |
| typedef struct _gcsPLS |
| { |
| /* Global objects. */ |
| gcoOS os; |
| gcoHAL hal; |
| |
| /* Internal memory pool. */ |
| gctSIZE_T internalSize; |
| gctPHYS_ADDR internalPhysical; |
| gctPOINTER internalLogical; |
| |
| /* External memory pool. */ |
| gctSIZE_T externalSize; |
| gctPHYS_ADDR externalPhysical; |
| gctPOINTER externalLogical; |
| |
| /* Contiguous memory pool. */ |
| gctSIZE_T contiguousSize; |
| gctPHYS_ADDR contiguousPhysical; |
| gctPOINTER contiguousLogical; |
| |
| /* EGL-specific process-wide objects. */ |
| gctPOINTER eglDisplayInfo; |
| gctPOINTER eglSurfaceInfo; |
| gceSURF_FORMAT eglConfigFormat; |
| |
| /* PLS reference count */ |
| gcsATOM_PTR reference; |
| |
| /* PorcessID of the constrcutor process */ |
| gctUINT32 processID; |
| |
| /* ThreadID of the constrcutor process. */ |
| gctSIZE_T threadID; |
| /* Flag for calling module destructor. */ |
| gctBOOL exiting; |
| |
| gctBOOL bNeedSupportNP2Texture; |
| |
| gctPLS_DESTRUCTOR destructor; |
| /* Mutex to guard PLS access. currently it's for EGL. |
| ** We can use this mutex for every PLS access. |
| */ |
| gctPOINTER accessLock; |
| #if gcdENABLE_3D |
| /* Global patchID to overwrite the detection */ |
| gcePATCH_ID patchID; |
| #endif |
| } |
| gcsPLS; |
| |
| extern gcsPLS gcPLS; |
| |
| #if gcdENABLE_3D |
| #define gcPLS_INITIALIZER \ |
| { \ |
| gcvNULL, /* gcoOS object. */ \ |
| gcvNULL, /* gcoHAL object. */ \ |
| 0, /* internalSize */ \ |
| gcvNULL, /* internalPhysical */ \ |
| gcvNULL, /* internalLogical */ \ |
| 0, /* externalSize */ \ |
| gcvNULL, /* externalPhysical */ \ |
| gcvNULL, /* externalLogical */ \ |
| 0, /* contiguousSize */ \ |
| gcvNULL, /* contiguousPhysical */ \ |
| gcvNULL, /* contiguousLogical */ \ |
| gcvNULL, /* eglDisplayInfo */ \ |
| gcvNULL, /* eglSurfaceInfo */ \ |
| gcvSURF_A8R8G8B8,/* eglConfigFormat */ \ |
| gcvNULL, /* reference */ \ |
| 0, /* processID */ \ |
| 0, /* threadID */ \ |
| gcvFALSE, /* exiting */ \ |
| gcvFALSE, /* Special flag for NP2 texture. */ \ |
| gcvNULL, /* destructor */ \ |
| gcvNULL, /* accessLock */ \ |
| gcvPATCH_NOTINIT,/* global patchID */ \ |
| } |
| #else |
| #define gcPLS_INITIALIZER \ |
| { \ |
| gcvNULL, /* gcoOS object. */ \ |
| gcvNULL, /* gcoHAL object. */ \ |
| 0, /* internalSize */ \ |
| gcvNULL, /* internalPhysical */ \ |
| gcvNULL, /* internalLogical */ \ |
| 0, /* externalSize */ \ |
| gcvNULL, /* externalPhysical */ \ |
| gcvNULL, /* externalLogical */ \ |
| 0, /* contiguousSize */ \ |
| gcvNULL, /* contiguousPhysical */ \ |
| gcvNULL, /* contiguousLogical */ \ |
| gcvNULL, /* eglDisplayInfo */ \ |
| gcvNULL, /* eglSurfaceInfo */ \ |
| gcvSURF_A8R8G8B8,/* eglConfigFormat */ \ |
| gcvNULL, /* reference */ \ |
| 0, /* processID */ \ |
| 0, /* threadID */ \ |
| gcvFALSE, /* exiting */ \ |
| gcvFALSE, /* Special flag for NP2 texture. */ \ |
| gcvNULL, /* destructor */ \ |
| gcvNULL, /* accessLock */ \ |
| } |
| #endif |
| |
| /******************************************************************************\ |
| ******************************* Thread local storage ************************* |
| \******************************************************************************/ |
| |
| typedef struct _gcsTLS * gcsTLS_PTR; |
| |
| typedef void (* gctTLS_DESTRUCTOR) ( |
| gcsTLS_PTR |
| ); |
| |
| typedef struct _gcsTLS |
| { |
| gceHARDWARE_TYPE currentType; |
| |
| /* Current 3D hardwre of this thread */ |
| gcoHARDWARE currentHardware; |
| |
| /* Default 3D hardware of this thread */ |
| gcoHARDWARE defaultHardware; |
| |
| /* Only for separated 3D and 2D */ |
| gcoHARDWARE hardware2D; |
| #if gcdENABLE_VG |
| gcoVGHARDWARE vg; |
| gcoVG engineVG; |
| #endif /* gcdENABLE_VG */ |
| #if gcdENABLE_3D |
| gco3D engine3D; |
| #endif |
| #if gcdENABLE_2D |
| gco2D engine2D; |
| #endif |
| |
| /*thread data */ |
| gctPOINTER context; |
| /* ES(including es1 and es2) client driver context which is current state */ |
| gctPOINTER esClientCtx; |
| gctTLS_DESTRUCTOR destructor; |
| |
| gctBOOL copied; |
| |
| /* libGAL.so handle */ |
| gctHANDLE handle; |
| |
| /* If true, do not releas 2d engine and hardware in hal layer */ |
| gctBOOL release2DUpper; |
| } |
| gcsTLS; |
| |
| /******************************************************************************\ |
| ********************************* Enumerations ********************************* |
| \******************************************************************************/ |
| |
| typedef enum _gcePLS_VALUE |
| { |
| gcePLS_VALUE_EGL_DISPLAY_INFO, |
| gcePLS_VALUE_EGL_SURFACE_INFO, |
| gcePLS_VALUE_EGL_CONFIG_FORMAT_INFO, |
| gcePLS_VALUE_EGL_DESTRUCTOR_INFO, |
| } |
| gcePLS_VALUE; |
| |
| /* Video memory pool type. */ |
| typedef enum _gcePOOL |
| { |
| gcvPOOL_UNKNOWN = 0, |
| gcvPOOL_DEFAULT, |
| gcvPOOL_LOCAL, |
| gcvPOOL_LOCAL_INTERNAL, |
| gcvPOOL_LOCAL_EXTERNAL, |
| gcvPOOL_UNIFIED, |
| gcvPOOL_SYSTEM, |
| gcvPOOL_VIRTUAL, |
| gcvPOOL_USER, |
| gcvPOOL_CONTIGUOUS, |
| |
| gcvPOOL_NUMBER_OF_POOLS |
| } |
| gcePOOL; |
| |
| #if gcdENABLE_3D |
| /* Blending functions. */ |
| typedef enum _gceBLEND_FUNCTION |
| { |
| gcvBLEND_ZERO, |
| gcvBLEND_ONE, |
| gcvBLEND_SOURCE_COLOR, |
| gcvBLEND_INV_SOURCE_COLOR, |
| gcvBLEND_SOURCE_ALPHA, |
| gcvBLEND_INV_SOURCE_ALPHA, |
| gcvBLEND_TARGET_COLOR, |
| gcvBLEND_INV_TARGET_COLOR, |
| gcvBLEND_TARGET_ALPHA, |
| gcvBLEND_INV_TARGET_ALPHA, |
| gcvBLEND_SOURCE_ALPHA_SATURATE, |
| gcvBLEND_CONST_COLOR, |
| gcvBLEND_INV_CONST_COLOR, |
| gcvBLEND_CONST_ALPHA, |
| gcvBLEND_INV_CONST_ALPHA, |
| } |
| gceBLEND_FUNCTION; |
| |
| /* Blending modes. */ |
| typedef enum _gceBLEND_MODE |
| { |
| gcvBLEND_ADD, |
| gcvBLEND_SUBTRACT, |
| gcvBLEND_REVERSE_SUBTRACT, |
| gcvBLEND_MIN, |
| gcvBLEND_MAX, |
| } |
| gceBLEND_MODE; |
| |
| /* Depth modes. */ |
| typedef enum _gceDEPTH_MODE |
| { |
| gcvDEPTH_NONE, |
| gcvDEPTH_Z, |
| gcvDEPTH_W, |
| } |
| gceDEPTH_MODE; |
| #endif /* gcdENABLE_3D */ |
| |
| #if (gcdENABLE_3D || gcdENABLE_VG) |
| /* API flags. */ |
| typedef enum _gceAPI |
| { |
| gcvAPI_D3D = 1, |
| gcvAPI_OPENGL_ES11, |
| gcvAPI_OPENGL_ES20, |
| gcvAPI_OPENGL_ES30, |
| gcvAPI_OPENGL, |
| gcvAPI_OPENVG, |
| gcvAPI_OPENCL, |
| } |
| gceAPI; |
| #endif |
| |
| |
| typedef enum _gceWHERE |
| { |
| gcvWHERE_COMMAND, |
| gcvWHERE_RASTER, |
| gcvWHERE_PIXEL, |
| } |
| gceWHERE; |
| |
| typedef enum _gceHOW |
| { |
| gcvHOW_SEMAPHORE = 0x1, |
| gcvHOW_STALL = 0x2, |
| gcvHOW_SEMAPHORE_STALL = 0x3, |
| } |
| gceHOW; |
| |
| typedef enum _gceSignalHandlerType |
| { |
| gcvHANDLE_SIGFPE_WHEN_SIGNAL_CODE_IS_0 = 0x1, |
| } |
| gceSignalHandlerType; |
| |
| /* gcsHAL_Limits*/ |
| typedef struct _gcsHAL_LIMITS |
| { |
| /* chip info */ |
| gceCHIPMODEL chipModel; |
| gctUINT32 chipRevision; |
| gctUINT32 featureCount; |
| gctUINT32 *chipFeatures; |
| |
| /* target caps */ |
| gctUINT32 maxWidth; |
| gctUINT32 maxHeight; |
| gctUINT32 multiTargetCount; |
| gctUINT32 maxSamples; |
| |
| }gcsHAL_LIMITS; |
| |
| /******************************************************************************\ |
| *********** Generic Memory Allocation Optimization Using Containers ************ |
| \******************************************************************************/ |
| |
| /* Generic container definition. */ |
| typedef struct _gcsCONTAINER_LINK * gcsCONTAINER_LINK_PTR; |
| typedef struct _gcsCONTAINER_LINK |
| { |
| /* Points to the next container. */ |
| gcsCONTAINER_LINK_PTR next; |
| } |
| gcsCONTAINER_LINK; |
| |
| typedef struct _gcsCONTAINER_RECORD * gcsCONTAINER_RECORD_PTR; |
| typedef struct _gcsCONTAINER_RECORD |
| { |
| gcsCONTAINER_RECORD_PTR prev; |
| gcsCONTAINER_RECORD_PTR next; |
| } |
| gcsCONTAINER_RECORD; |
| |
| typedef struct _gcsCONTAINER * gcsCONTAINER_PTR; |
| typedef struct _gcsCONTAINER |
| { |
| gctUINT containerSize; |
| gctUINT recordSize; |
| gctUINT recordCount; |
| gcsCONTAINER_LINK_PTR containers; |
| gcsCONTAINER_RECORD freeList; |
| gcsCONTAINER_RECORD allocList; |
| } |
| gcsCONTAINER; |
| |
| gceSTATUS |
| gcsCONTAINER_Construct( |
| IN gcsCONTAINER_PTR Container, |
| gctUINT RecordsPerContainer, |
| gctUINT RecordSize |
| ); |
| |
| gceSTATUS |
| gcsCONTAINER_Destroy( |
| IN gcsCONTAINER_PTR Container |
| ); |
| |
| gceSTATUS |
| gcsCONTAINER_AllocateRecord( |
| IN gcsCONTAINER_PTR Container, |
| OUT gctPOINTER * Record |
| ); |
| |
| gceSTATUS |
| gcsCONTAINER_FreeRecord( |
| IN gcsCONTAINER_PTR Container, |
| IN gctPOINTER Record |
| ); |
| |
| gceSTATUS |
| gcsCONTAINER_FreeAll( |
| IN gcsCONTAINER_PTR Container |
| ); |
| |
| /******************************************************************************\ |
| ********************************* gcoHAL Object ********************************* |
| \******************************************************************************/ |
| |
| /* Construct a new gcoHAL object. */ |
| gceSTATUS |
| gcoHAL_ConstructEx( |
| IN gctPOINTER Context, |
| IN gcoOS Os, |
| OUT gcoHAL * Hal |
| ); |
| |
| /* Destroy an gcoHAL object. */ |
| gceSTATUS |
| gcoHAL_DestroyEx( |
| IN gcoHAL Hal |
| ); |
| |
| /* Empty function for compatibility. */ |
| gceSTATUS |
| gcoHAL_Construct( |
| IN gctPOINTER Context, |
| IN gcoOS Os, |
| OUT gcoHAL * Hal |
| ); |
| |
| /* Empty function for compatibility. */ |
| gceSTATUS |
| gcoHAL_Destroy( |
| IN gcoHAL Hal |
| ); |
| |
| /* Get HAL options */ |
| gceSTATUS |
| gcoHAL_GetOption( |
| IN gcoHAL Hal, |
| IN gceOPTION Option |
| ); |
| |
| gceSTATUS |
| gcoHAL_FrameInfoOps( |
| IN gcoHAL Hal, |
| IN gceFRAMEINFO FrameInfo, |
| IN gceFRAMEINFO_OP Op, |
| IN OUT gctUINT * Val |
| ); |
| |
| |
| gceSTATUS |
| gcoHAL_GetHardware( |
| IN gcoHAL Hal, |
| OUT gcoHARDWARE* Hw |
| ); |
| |
| #if gcdENABLE_2D |
| /* Get pointer to gco2D object. */ |
| gceSTATUS |
| gcoHAL_Get2DEngine( |
| IN gcoHAL Hal, |
| OUT gco2D * Engine |
| ); |
| #endif |
| |
| #if gcdENABLE_3D |
| gceSTATUS |
| gcoHAL_GetSpecialHintData( |
| IN gcoHAL Hal, |
| OUT gctINT * Hint |
| ); |
| /* |
| ** Deprecated(Don't use it), keep it here for external library(libgcu.so) |
| */ |
| gceSTATUS |
| gcoHAL_Get3DEngine( |
| IN gcoHAL Hal, |
| OUT gco3D * Engine |
| ); |
| #endif /* gcdEANBLE_3D */ |
| |
| |
| gceSTATUS |
| gcoHAL_GetProductName( |
| IN gcoHAL Hal, |
| OUT gctSTRING *ProductName |
| ); |
| |
| gceSTATUS |
| gcoHAL_SetFscaleValue( |
| IN gctUINT FscaleValue |
| ); |
| |
| gceSTATUS |
| gcoHAL_GetFscaleValue( |
| OUT gctUINT * FscaleValue, |
| OUT gctUINT * MinFscaleValue, |
| OUT gctUINT * MaxFscaleValue |
| ); |
| |
| gceSTATUS |
| gcoHAL_SetBltNP2Texture( |
| gctBOOL enable |
| ); |
| |
| gceSTATUS |
| gcoHAL_NameVideoMemory( |
| IN gctUINT32 Handle, |
| OUT gctUINT32 * Name |
| ); |
| |
| gceSTATUS |
| gcoHAL_ImportVideoMemory( |
| IN gctUINT32 Name, |
| OUT gctUINT32 * Handle |
| ); |
| |
| gceSTATUS |
| gcoHAL_GetVideoMemoryFd( |
| IN gctUINT32 Handle, |
| OUT gctINT * Fd |
| ); |
| |
| /* Verify whether the specified feature is available in hardware. */ |
| gceSTATUS |
| gcoHAL_IsFeatureAvailable( |
| IN gcoHAL Hal, |
| IN gceFEATURE Feature |
| ); |
| |
| gceSTATUS |
| gcoHAL_IsSwwaNeeded( |
| IN gcoHAL Hal, |
| IN gceSWWA Swwa |
| ); |
| |
| gceSTATUS |
| gcoHAL_IsFeatureAvailable1( |
| IN gcoHAL Hal, |
| IN gceFEATURE Feature |
| ); |
| |
| /* Query the identity of the hardware. */ |
| gceSTATUS |
| gcoHAL_QueryChipIdentity( |
| IN gcoHAL Hal, |
| OUT gceCHIPMODEL* ChipModel, |
| OUT gctUINT32* ChipRevision, |
| OUT gctUINT32* ChipFeatures, |
| OUT gctUINT32* ChipMinorFeatures |
| ); |
| |
| /* Query the minor features of the hardware. */ |
| gceSTATUS gcoHAL_QueryChipMinorFeatures( |
| IN gcoHAL Hal, |
| OUT gctUINT32* NumFeatures, |
| OUT gctUINT32* ChipMinorFeatures |
| ); |
| |
| gctINT32 |
| gcoOS_EndRecordAllocation(void); |
| void |
| gcoOS_RecordAllocation(void); |
| void |
| gcoOS_AddRecordAllocation(gctSIZE_T Size); |
| |
| /* Query the amount of video memory. */ |
| gceSTATUS |
| gcoHAL_QueryVideoMemory( |
| IN gcoHAL Hal, |
| OUT gctPHYS_ADDR * InternalAddress, |
| OUT gctSIZE_T * InternalSize, |
| OUT gctPHYS_ADDR * ExternalAddress, |
| OUT gctSIZE_T * ExternalSize, |
| OUT gctPHYS_ADDR * ContiguousAddress, |
| OUT gctSIZE_T * ContiguousSize |
| ); |
| |
| /* Map video memory. */ |
| gceSTATUS |
| gcoHAL_MapMemory( |
| IN gcoHAL Hal, |
| IN gctPHYS_ADDR Physical, |
| IN gctSIZE_T NumberOfBytes, |
| OUT gctPOINTER * Logical |
| ); |
| |
| /* Unmap video memory. */ |
| gceSTATUS |
| gcoHAL_UnmapMemory( |
| IN gcoHAL Hal, |
| IN gctPHYS_ADDR Physical, |
| IN gctSIZE_T NumberOfBytes, |
| IN gctPOINTER Logical |
| ); |
| |
| /* Schedule an unmap of a buffer mapped through its physical address. */ |
| gceSTATUS |
| gcoHAL_ScheduleUnmapMemory( |
| IN gcoHAL Hal, |
| IN gctPHYS_ADDR Physical, |
| IN gctSIZE_T NumberOfBytes, |
| IN gctPOINTER Logical |
| ); |
| |
| /* Allocate video memory. */ |
| gceSTATUS |
| gcoOS_AllocateVideoMemory( |
| IN gcoOS Os, |
| IN gctBOOL InUserSpace, |
| IN gctBOOL InCacheable, |
| IN OUT gctSIZE_T * Bytes, |
| OUT gctUINT32 * Physical, |
| OUT gctPOINTER * Logical, |
| OUT gctPOINTER * Handle |
| ); |
| |
| /* Free video memory. */ |
| gceSTATUS |
| gcoOS_FreeVideoMemory( |
| IN gcoOS Os, |
| IN gctPOINTER Handle |
| ); |
| |
| /* Lock video memory. */ |
| gceSTATUS |
| gcoOS_LockVideoMemory( |
| IN gcoOS Os, |
| IN gctPOINTER Handle, |
| IN gctBOOL InUserSpace, |
| IN gctBOOL InCacheable, |
| OUT gctUINT32 * Physical, |
| OUT gctPOINTER * Logical |
| ); |
| |
| /* Map user memory. */ |
| gceSTATUS |
| gcoHAL_MapUserMemory( |
| IN gctPOINTER Logical, |
| IN gctUINT32 Physical, |
| IN gctSIZE_T Size, |
| OUT gctPOINTER * Info, |
| OUT gctUINT32_PTR GPUAddress |
| ); |
| |
| /* Unmap user memory. */ |
| gceSTATUS |
| gcoHAL_UnmapUserMemory( |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Size, |
| IN gctPOINTER Info, |
| IN gctUINT32 GPUAddress |
| ); |
| |
| /* Schedule an unmap of a user buffer using event mechanism. */ |
| gceSTATUS |
| gcoHAL_ScheduleUnmapUserMemory( |
| IN gcoHAL Hal, |
| IN gctPOINTER Info, |
| IN gctSIZE_T Size, |
| IN gctUINT32 Address, |
| IN gctPOINTER Memory |
| ); |
| |
| /* Commit the current command buffer. */ |
| gceSTATUS |
| gcoHAL_Commit( |
| IN gcoHAL Hal, |
| IN gctBOOL Stall |
| ); |
| |
| #if gcdENABLE_3D |
| /* Sencd fence command. */ |
| gceSTATUS |
| gcoHAL_SendFence( |
| IN gcoHAL Hal |
| ); |
| #endif /* gcdENABLE_3D */ |
| |
| /* Query the tile capabilities. */ |
| gceSTATUS |
| gcoHAL_QueryTiled( |
| IN gcoHAL Hal, |
| OUT gctINT32 * TileWidth2D, |
| OUT gctINT32 * TileHeight2D, |
| OUT gctINT32 * TileWidth3D, |
| OUT gctINT32 * TileHeight3D |
| ); |
| |
| gceSTATUS |
| gcoHAL_Compact( |
| IN gcoHAL Hal |
| ); |
| |
| #if VIVANTE_PROFILER |
| gceSTATUS |
| gcoHAL_ProfileStart( |
| IN gcoHAL Hal |
| ); |
| |
| gceSTATUS |
| gcoHAL_ProfileEnd( |
| IN gcoHAL Hal, |
| IN gctCONST_STRING Title |
| ); |
| #endif |
| |
| /* Power Management */ |
| gceSTATUS |
| gcoHAL_SetPowerManagementState( |
| IN gcoHAL Hal, |
| IN gceCHIPPOWERSTATE State |
| ); |
| |
| gceSTATUS |
| gcoHAL_QueryPowerManagementState( |
| IN gcoHAL Hal, |
| OUT gceCHIPPOWERSTATE *State |
| ); |
| |
| /* Set the filter type for filter blit. */ |
| gceSTATUS |
| gcoHAL_SetFilterType( |
| IN gcoHAL Hal, |
| IN gceFILTER_TYPE FilterType |
| ); |
| |
| gceSTATUS |
| gcoHAL_GetDump( |
| IN gcoHAL Hal, |
| OUT gcoDUMP * Dump |
| ); |
| |
| #if gcdENABLE_3D |
| gceSTATUS |
| gcoHAL_SetPatchID( |
| IN gcoHAL Hal, |
| IN gcePATCH_ID PatchID |
| ); |
| |
| /* Get Patch ID based on process name */ |
| gceSTATUS |
| gcoHAL_GetPatchID( |
| IN gcoHAL Hal, |
| OUT gcePATCH_ID * PatchID |
| ); |
| |
| gceSTATUS |
| gcoHAL_SetGlobalPatchID( |
| IN gcoHAL Hal, |
| IN gcePATCH_ID PatchID |
| ); |
| #endif /* gcdENABLE_3D */ |
| /* Call the kernel HAL layer. */ |
| gceSTATUS |
| gcoHAL_Call( |
| IN gcoHAL Hal, |
| IN OUT gcsHAL_INTERFACE_PTR Interface |
| ); |
| |
| /* Schedule an event. */ |
| gceSTATUS |
| gcoHAL_ScheduleEvent( |
| IN gcoHAL Hal, |
| IN OUT gcsHAL_INTERFACE_PTR Interface |
| ); |
| |
| /* Destroy a surface. */ |
| gceSTATUS |
| gcoHAL_DestroySurface( |
| IN gcoHAL Hal, |
| IN gcoSURF Surface |
| ); |
| |
| /* Request a start/stop timestamp. */ |
| gceSTATUS |
| gcoHAL_SetTimer( |
| IN gcoHAL Hal, |
| IN gctUINT32 Index, |
| IN gctBOOL Start |
| ); |
| |
| /* Get Time delta from a Timer in microseconds. */ |
| gceSTATUS |
| gcoHAL_GetTimerTime( |
| IN gcoHAL Hal, |
| IN gctUINT32 Timer, |
| OUT gctINT32_PTR TimeDelta |
| ); |
| |
| /* set timeout value. */ |
| gceSTATUS |
| gcoHAL_SetTimeOut( |
| IN gcoHAL Hal, |
| IN gctUINT32 timeOut |
| ); |
| |
| gceSTATUS |
| gcoHAL_SetHardwareType( |
| IN gcoHAL Hal, |
| IN gceHARDWARE_TYPE HardwardType |
| ); |
| |
| gceSTATUS |
| gcoHAL_GetHardwareType( |
| IN gcoHAL Hal, |
| OUT gceHARDWARE_TYPE * HardwardType |
| ); |
| |
| gceSTATUS |
| gcoHAL_QueryChipCount( |
| IN gcoHAL Hal, |
| OUT gctINT32 * Count |
| ); |
| |
| gceSTATUS |
| gcoHAL_Query3DCoreCount( |
| IN gcoHAL Hal, |
| OUT gctUINT32 *Count |
| ); |
| |
| gceSTATUS |
| gcoHAL_QuerySeparated2D( |
| IN gcoHAL Hal |
| ); |
| |
| gceSTATUS |
| gcoHAL_Is3DAvailable( |
| IN gcoHAL Hal |
| ); |
| |
| /* Get pointer to gcoVG object. */ |
| gceSTATUS |
| gcoHAL_GetVGEngine( |
| IN gcoHAL Hal, |
| OUT gcoVG * Engine |
| ); |
| |
| gceSTATUS |
| gcoHAL_QueryChipLimits( |
| IN gcoHAL Hal, |
| IN gctINT32 Chip, |
| IN gctINT32 Mask, |
| OUT gcsHAL_LIMITS *Limits); |
| |
| gceSTATUS |
| gcoHAL_QueryChipFeature( |
| IN gcoHAL Hal, |
| IN gctINT32 Chip, |
| IN gctINT32 Mask, |
| IN gceFEATURE Feature); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Shared Buffer --------------------------------------------------------*/ |
| |
| /* Create shared buffer. */ |
| gceSTATUS |
| gcoHAL_CreateShBuffer( |
| IN gctUINT32 Size, |
| OUT gctSHBUF * ShBuf |
| ); |
| |
| /* Destroy shared buffer. */ |
| gceSTATUS |
| gcoHAL_DestroyShBuffer( |
| IN gctSHBUF ShBuf |
| ); |
| |
| /* Map shared buffer to current process. */ |
| gceSTATUS |
| gcoHAL_MapShBuffer( |
| IN gctSHBUF ShBuf |
| ); |
| |
| /* Write user data to shared buffer. */ |
| gceSTATUS |
| gcoHAL_WriteShBuffer( |
| IN gctSHBUF ShBuf, |
| IN gctCONST_POINTER Data, |
| IN gctUINT32 ByteCount |
| ); |
| |
| /* Read user data from shared buffer. */ |
| gceSTATUS |
| gcoHAL_ReadShBuffer( |
| IN gctSHBUF ShBuf, |
| IN gctPOINTER Data, |
| IN gctUINT32 BytesCount, |
| OUT gctUINT32 * BytesRead |
| ); |
| |
| /* Config power management to be enabled or disabled. */ |
| gceSTATUS |
| gcoHAL_ConfigPowerManagement( |
| IN gctBOOL Enable |
| ); |
| |
| #if gcdENABLE_3D || gcdENABLE_VG |
| /* Query the target capabilities. */ |
| gceSTATUS |
| gcoHAL_QueryTargetCaps( |
| IN gcoHAL Hal, |
| OUT gctUINT * MaxWidth, |
| OUT gctUINT * MaxHeight, |
| OUT gctUINT * MultiTargetCount, |
| OUT gctUINT * MaxSamples |
| ); |
| #endif |
| |
| /******************************************************************************\ |
| ********************************** gcoOS Object ********************************* |
| \******************************************************************************/ |
| /* Lock PLS access */ |
| gceSTATUS |
| gcoOS_LockPLS( |
| void |
| ); |
| |
| /* Unlock PLS access */ |
| gceSTATUS |
| gcoOS_UnLockPLS( |
| void |
| ); |
| |
| /* Get PLS value for given key */ |
| gctPOINTER |
| gcoOS_GetPLSValue( |
| IN gcePLS_VALUE key |
| ); |
| |
| /* Set PLS value of a given key */ |
| void |
| gcoOS_SetPLSValue( |
| IN gcePLS_VALUE key, |
| OUT gctPOINTER value |
| ); |
| |
| /* Get access to the thread local storage. */ |
| gceSTATUS |
| gcoOS_GetTLS( |
| OUT gcsTLS_PTR * TLS |
| ); |
| |
| /* Copy the TLS from a source thread. */ |
| gceSTATUS gcoOS_CopyTLS(IN gcsTLS_PTR Source); |
| |
| /* Destroy the objects associated with the current thread. */ |
| void |
| gcoOS_FreeThreadData( |
| void |
| ); |
| |
| /* Empty function for compatibility. */ |
| gceSTATUS |
| gcoOS_Construct( |
| IN gctPOINTER Context, |
| OUT gcoOS * Os |
| ); |
| |
| /* Empty function for compatibility. */ |
| gceSTATUS |
| gcoOS_Destroy( |
| IN gcoOS Os |
| ); |
| |
| /* Get the base address for the physical memory. */ |
| gceSTATUS |
| gcoOS_GetBaseAddress( |
| IN gcoOS Os, |
| OUT gctUINT32_PTR BaseAddress |
| ); |
| |
| /* Allocate memory from the heap. */ |
| gceSTATUS |
| gcoOS_Allocate( |
| IN gcoOS Os, |
| IN gctSIZE_T Bytes, |
| OUT gctPOINTER * Memory |
| ); |
| |
| /* Get allocated memory size. */ |
| gceSTATUS |
| gcoOS_GetMemorySize( |
| IN gcoOS Os, |
| IN gctPOINTER Memory, |
| OUT gctSIZE_T_PTR MemorySize |
| ); |
| |
| /* Free allocated memory. */ |
| gceSTATUS |
| gcoOS_Free( |
| IN gcoOS Os, |
| IN gctPOINTER Memory |
| ); |
| |
| /* Allocate memory. */ |
| gceSTATUS |
| gcoOS_AllocateSharedMemory( |
| IN gcoOS Os, |
| IN gctSIZE_T Bytes, |
| OUT gctPOINTER * Memory |
| ); |
| |
| /* Free memory. */ |
| gceSTATUS |
| gcoOS_FreeSharedMemory( |
| IN gcoOS Os, |
| IN gctPOINTER Memory |
| ); |
| |
| /* Allocate memory. */ |
| gceSTATUS |
| gcoOS_AllocateMemory( |
| IN gcoOS Os, |
| IN gctSIZE_T Bytes, |
| OUT gctPOINTER * Memory |
| ); |
| |
| /* Free memory. */ |
| gceSTATUS |
| gcoOS_FreeMemory( |
| IN gcoOS Os, |
| IN gctPOINTER Memory |
| ); |
| |
| /* Allocate contiguous memory. */ |
| gceSTATUS |
| gcoOS_AllocateContiguous( |
| IN gcoOS Os, |
| IN gctBOOL InUserSpace, |
| IN OUT gctSIZE_T * Bytes, |
| OUT gctPHYS_ADDR * Physical, |
| OUT gctPOINTER * Logical |
| ); |
| |
| /* Free contiguous memory. */ |
| gceSTATUS |
| gcoOS_FreeContiguous( |
| IN gcoOS Os, |
| IN gctPHYS_ADDR Physical, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes |
| ); |
| |
| /* Map user memory. */ |
| gceSTATUS |
| gcoOS_MapUserMemory( |
| IN gcoOS Os, |
| IN gctPOINTER Memory, |
| IN gctSIZE_T Size, |
| OUT gctPOINTER * Info, |
| OUT gctUINT32_PTR Address |
| ); |
| |
| /* Map user memory. */ |
| gceSTATUS |
| gcoOS_MapUserMemoryEx( |
| IN gcoOS Os, |
| IN gctPOINTER Memory, |
| IN gctUINT32 Physical, |
| IN gctSIZE_T Size, |
| OUT gctPOINTER * Info, |
| OUT gctUINT32_PTR Address |
| ); |
| |
| /* Unmap user memory. */ |
| gceSTATUS |
| gcoOS_UnmapUserMemory( |
| IN gcoOS Os, |
| IN gctPOINTER Memory, |
| IN gctSIZE_T Size, |
| IN gctPOINTER Info, |
| IN gctUINT32 Address |
| ); |
| |
| /* Device I/O Control call to the kernel HAL layer. */ |
| gceSTATUS |
| gcoOS_DeviceControl( |
| IN gcoOS Os, |
| IN gctUINT32 IoControlCode, |
| IN gctPOINTER InputBuffer, |
| IN gctSIZE_T InputBufferSize, |
| IN gctPOINTER OutputBuffer, |
| IN gctSIZE_T OutputBufferSize |
| ); |
| |
| /* Allocate non paged memory. */ |
| gceSTATUS |
| gcoOS_AllocateNonPagedMemory( |
| IN gcoOS Os, |
| IN gctBOOL InUserSpace, |
| IN OUT gctSIZE_T * Bytes, |
| OUT gctPHYS_ADDR * Physical, |
| OUT gctPOINTER * Logical |
| ); |
| |
| /* Free non paged memory. */ |
| gceSTATUS |
| gcoOS_FreeNonPagedMemory( |
| IN gcoOS Os, |
| IN gctSIZE_T Bytes, |
| IN gctPHYS_ADDR Physical, |
| IN gctPOINTER Logical |
| ); |
| |
| #define gcmOS_SAFE_FREE(os, mem) \ |
| gcoOS_Free(os, mem); \ |
| mem = gcvNULL |
| |
| #define gcmOS_SAFE_FREE_SHARED_MEMORY(os, mem) \ |
| gcoOS_FreeSharedMemory(os, mem); \ |
| mem = gcvNULL |
| |
| #define gcmkOS_SAFE_FREE(os, mem) \ |
| gckOS_Free(os, mem); \ |
| mem = gcvNULL |
| |
| typedef enum _gceFILE_MODE |
| { |
| gcvFILE_CREATE = 0, |
| gcvFILE_APPEND, |
| gcvFILE_READ, |
| gcvFILE_CREATETEXT, |
| gcvFILE_APPENDTEXT, |
| gcvFILE_READTEXT, |
| } |
| gceFILE_MODE; |
| |
| /* Open a file. */ |
| gceSTATUS |
| gcoOS_Open( |
| IN gcoOS Os, |
| IN gctCONST_STRING FileName, |
| IN gceFILE_MODE Mode, |
| OUT gctFILE * File |
| ); |
| |
| /* Close a file. */ |
| gceSTATUS |
| gcoOS_Close( |
| IN gcoOS Os, |
| IN gctFILE File |
| ); |
| |
| /* Read data from a file. */ |
| gceSTATUS |
| gcoOS_Read( |
| IN gcoOS Os, |
| IN gctFILE File, |
| IN gctSIZE_T ByteCount, |
| IN gctPOINTER Data, |
| OUT gctSIZE_T * ByteRead |
| ); |
| |
| /* Write data to a file. */ |
| gceSTATUS |
| gcoOS_Write( |
| IN gcoOS Os, |
| IN gctFILE File, |
| IN gctSIZE_T ByteCount, |
| IN gctCONST_POINTER Data |
| ); |
| |
| /* Flush data to a file. */ |
| gceSTATUS |
| gcoOS_Flush( |
| IN gcoOS Os, |
| IN gctFILE File |
| ); |
| |
| /* Close a file descriptor. */ |
| gceSTATUS |
| gcoOS_CloseFD( |
| IN gcoOS Os, |
| IN gctINT FD |
| ); |
| |
| /* Dup file descriptor to another. */ |
| gceSTATUS |
| gcoOS_DupFD( |
| IN gcoOS Os, |
| IN gctINT FD, |
| OUT gctINT * FD2 |
| ); |
| |
| /* Create an endpoint for communication. */ |
| gceSTATUS |
| gcoOS_Socket( |
| IN gcoOS Os, |
| IN gctINT Domain, |
| IN gctINT Type, |
| IN gctINT Protocol, |
| OUT gctINT *SockFd |
| ); |
| |
| /* Close a socket. */ |
| gceSTATUS |
| gcoOS_CloseSocket( |
| IN gcoOS Os, |
| IN gctINT SockFd |
| ); |
| |
| /* Initiate a connection on a socket. */ |
| gceSTATUS |
| gcoOS_Connect( |
| IN gcoOS Os, |
| IN gctINT SockFd, |
| IN gctCONST_POINTER HostName, |
| IN gctUINT Port); |
| |
| /* Shut down part of connection on a socket. */ |
| gceSTATUS |
| gcoOS_Shutdown( |
| IN gcoOS Os, |
| IN gctINT SockFd, |
| IN gctINT How |
| ); |
| |
| /* Send a message on a socket. */ |
| gceSTATUS |
| gcoOS_Send( |
| IN gcoOS Os, |
| IN gctINT SockFd, |
| IN gctSIZE_T ByteCount, |
| IN gctCONST_POINTER Data, |
| IN gctINT Flags |
| ); |
| |
| /* Initiate a connection on a socket. */ |
| gceSTATUS |
| gcoOS_WaitForSend( |
| IN gcoOS Os, |
| IN gctINT SockFd, |
| IN gctINT Seconds, |
| IN gctINT MicroSeconds); |
| |
| /* Get environment variable value. */ |
| gceSTATUS |
| gcoOS_GetEnv( |
| IN gcoOS Os, |
| IN gctCONST_STRING VarName, |
| OUT gctSTRING * Value |
| ); |
| |
| /* Set environment variable value. */ |
| gceSTATUS |
| gcoOS_SetEnv( |
| IN gcoOS Os, |
| IN gctCONST_STRING VarName, |
| IN gctSTRING Value |
| ); |
| |
| /* Get current working directory. */ |
| gceSTATUS |
| gcoOS_GetCwd( |
| IN gcoOS Os, |
| IN gctINT SizeInBytes, |
| OUT gctSTRING Buffer |
| ); |
| |
| /* Get file status info. */ |
| gceSTATUS |
| gcoOS_Stat( |
| IN gcoOS Os, |
| IN gctCONST_STRING FileName, |
| OUT gctPOINTER Buffer |
| ); |
| |
| typedef enum _gceFILE_WHENCE |
| { |
| gcvFILE_SEEK_SET, |
| gcvFILE_SEEK_CUR, |
| gcvFILE_SEEK_END |
| } |
| gceFILE_WHENCE; |
| |
| /* Set the current position of a file. */ |
| gceSTATUS |
| gcoOS_Seek( |
| IN gcoOS Os, |
| IN gctFILE File, |
| IN gctUINT32 Offset, |
| IN gceFILE_WHENCE Whence |
| ); |
| |
| /* Set the current position of a file. */ |
| gceSTATUS |
| gcoOS_SetPos( |
| IN gcoOS Os, |
| IN gctFILE File, |
| IN gctUINT32 Position |
| ); |
| |
| /* Get the current position of a file. */ |
| gceSTATUS |
| gcoOS_GetPos( |
| IN gcoOS Os, |
| IN gctFILE File, |
| OUT gctUINT32 * Position |
| ); |
| |
| /* Same as strstr. */ |
| gceSTATUS |
| gcoOS_StrStr( |
| IN gctCONST_STRING String, |
| IN gctCONST_STRING SubString, |
| OUT gctSTRING * Output |
| ); |
| |
| /* Find the last occurance of a character inside a string. */ |
| gceSTATUS |
| gcoOS_StrFindReverse( |
| IN gctCONST_STRING String, |
| IN gctINT8 Character, |
| OUT gctSTRING * Output |
| ); |
| |
| gceSTATUS |
| gcoOS_StrDup( |
| IN gcoOS Os, |
| IN gctCONST_STRING String, |
| OUT gctSTRING * Target |
| ); |
| |
| /* Copy a string. */ |
| gceSTATUS |
| gcoOS_StrCopySafe( |
| IN gctSTRING Destination, |
| IN gctSIZE_T DestinationSize, |
| IN gctCONST_STRING Source |
| ); |
| |
| /* Append a string. */ |
| gceSTATUS |
| gcoOS_StrCatSafe( |
| IN gctSTRING Destination, |
| IN gctSIZE_T DestinationSize, |
| IN gctCONST_STRING Source |
| ); |
| |
| /* Compare two strings. */ |
| gceSTATUS |
| gcoOS_StrCmp( |
| IN gctCONST_STRING String1, |
| IN gctCONST_STRING String2 |
| ); |
| |
| /* Compare characters of two strings. */ |
| gceSTATUS |
| gcoOS_StrNCmp( |
| IN gctCONST_STRING String1, |
| IN gctCONST_STRING String2, |
| IN gctSIZE_T Count |
| ); |
| |
| /* Convert string to float. */ |
| gceSTATUS |
| gcoOS_StrToFloat( |
| IN gctCONST_STRING String, |
| OUT gctFLOAT * Float |
| ); |
| |
| /* Convert hex string to integer. */ |
| gceSTATUS gcoOS_HexStrToInt( |
| IN gctCONST_STRING String, |
| OUT gctINT * Int |
| ); |
| |
| /* Convert hex string to float. */ |
| gceSTATUS |
| gcoOS_HexStrToFloat( |
| IN gctCONST_STRING String, |
| OUT gctFLOAT * Float |
| ); |
| |
| /* Convert string to integer. */ |
| gceSTATUS |
| gcoOS_StrToInt( |
| IN gctCONST_STRING String, |
| OUT gctINT * Int |
| ); |
| |
| gceSTATUS |
| gcoOS_MemCmp( |
| IN gctCONST_POINTER Memory1, |
| IN gctCONST_POINTER Memory2, |
| IN gctSIZE_T Bytes |
| ); |
| |
| gceSTATUS |
| gcoOS_PrintStrSafe( |
| OUT gctSTRING String, |
| IN gctSIZE_T StringSize, |
| IN OUT gctUINT * Offset, |
| IN gctCONST_STRING Format, |
| ... |
| ); |
| |
| gceSTATUS |
| gcoOS_LoadLibrary( |
| IN gcoOS Os, |
| IN gctCONST_STRING Library, |
| OUT gctHANDLE * Handle |
| ); |
| |
| gceSTATUS |
| gcoOS_FreeLibrary( |
| IN gcoOS Os, |
| IN gctHANDLE Handle |
| ); |
| |
| gceSTATUS |
| gcoOS_GetProcAddress( |
| IN gcoOS Os, |
| IN gctHANDLE Handle, |
| IN gctCONST_STRING Name, |
| OUT gctPOINTER * Function |
| ); |
| |
| gceSTATUS |
| gcoOS_Compact( |
| IN gcoOS Os |
| ); |
| |
| gceSTATUS |
| gcoOS_AddSignalHandler ( |
| IN gceSignalHandlerType SignalHandlerType |
| ); |
| |
| #if VIVANTE_PROFILER |
| gceSTATUS |
| gcoOS_ProfileStart( |
| IN gcoOS Os |
| ); |
| |
| gceSTATUS |
| gcoOS_ProfileEnd( |
| IN gcoOS Os, |
| IN gctCONST_STRING Title |
| ); |
| |
| gceSTATUS |
| gcoOS_SetProfileSetting( |
| IN gcoOS Os, |
| IN gctBOOL Enable, |
| IN gctCONST_STRING FileName |
| ); |
| #endif |
| |
| /* Query the video memory. */ |
| gceSTATUS |
| gcoOS_QueryVideoMemory( |
| IN gcoOS Os, |
| OUT gctPHYS_ADDR * InternalAddress, |
| OUT gctSIZE_T * InternalSize, |
| OUT gctPHYS_ADDR * ExternalAddress, |
| OUT gctSIZE_T * ExternalSize, |
| OUT gctPHYS_ADDR * ContiguousAddress, |
| OUT gctSIZE_T * ContiguousSize |
| ); |
| |
| /* Detect if the process is the executable specified. */ |
| gceSTATUS |
| gcoOS_DetectProcessByNamePid( |
| IN gctCONST_STRING Name, |
| IN gctHANDLE Pid |
| ); |
| |
| /* Detect if the current process is the executable specified. */ |
| gceSTATUS |
| gcoOS_DetectProcessByName( |
| IN gctCONST_STRING Name |
| ); |
| |
| gceSTATUS |
| gcoOS_DetectProcessByEncryptedName( |
| IN gctCONST_STRING Name |
| ); |
| |
| #if defined(ANDROID) |
| gceSTATUS |
| gcoOS_DetectProgrameByEncryptedSymbols( |
| IN gcoOS_SymbolsList Symbols |
| ); |
| #endif |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Atoms ----------------------------------------------------------------*/ |
| |
| /* Construct an atom. */ |
| gceSTATUS |
| gcoOS_AtomConstruct( |
| IN gcoOS Os, |
| OUT gcsATOM_PTR * Atom |
| ); |
| |
| /* Destroy an atom. */ |
| gceSTATUS |
| gcoOS_AtomDestroy( |
| IN gcoOS Os, |
| IN gcsATOM_PTR Atom |
| ); |
| |
| /* Get the 32-bit value protected by an atom. */ |
| gceSTATUS |
| gcoOS_AtomGet( |
| IN gcoOS Os, |
| IN gcsATOM_PTR Atom, |
| OUT gctINT32_PTR Value |
| ); |
| |
| /* Set the 32-bit value protected by an atom. */ |
| gceSTATUS |
| gcoOS_AtomSet( |
| IN gcoOS Os, |
| IN gcsATOM_PTR Atom, |
| IN gctINT32 Value |
| ); |
| |
| /* Increment an atom. */ |
| gceSTATUS |
| gcoOS_AtomIncrement( |
| IN gcoOS Os, |
| IN gcsATOM_PTR Atom, |
| OUT gctINT32_PTR OldValue |
| ); |
| |
| /* Decrement an atom. */ |
| gceSTATUS |
| gcoOS_AtomDecrement( |
| IN gcoOS Os, |
| IN gcsATOM_PTR Atom, |
| OUT gctINT32_PTR OldValue |
| ); |
| |
| gctHANDLE |
| gcoOS_GetCurrentProcessID( |
| void |
| ); |
| |
| gctHANDLE |
| gcoOS_GetCurrentThreadID( |
| void |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Time -----------------------------------------------------------------*/ |
| |
| /* Get the number of milliseconds since the system started. */ |
| gctUINT32 |
| gcoOS_GetTicks( |
| void |
| ); |
| |
| /* Get time in microseconds. */ |
| gceSTATUS |
| gcoOS_GetTime( |
| gctUINT64_PTR Time |
| ); |
| |
| /* Get CPU usage in microseconds. */ |
| gceSTATUS |
| gcoOS_GetCPUTime( |
| gctUINT64_PTR CPUTime |
| ); |
| |
| /* Get memory usage. */ |
| gceSTATUS |
| gcoOS_GetMemoryUsage( |
| gctUINT32_PTR MaxRSS, |
| gctUINT32_PTR IxRSS, |
| gctUINT32_PTR IdRSS, |
| gctUINT32_PTR IsRSS |
| ); |
| |
| /* Delay a number of microseconds. */ |
| gceSTATUS |
| gcoOS_Delay( |
| IN gcoOS Os, |
| IN gctUINT32 Delay |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Threads --------------------------------------------------------------*/ |
| |
| #ifdef _WIN32 |
| /* Cannot include windows.h here becuase "near" and "far" |
| * which are used in gcsDEPTH_INFO, are defined to nothing in WinDef.h. |
| * So, use the real value of DWORD and WINAPI, instead. |
| * DWORD is unsigned long, and WINAPI is __stdcall. |
| * If these two are change in WinDef.h, the following two typdefs |
| * need to be changed, too. |
| */ |
| typedef unsigned long gctTHREAD_RETURN; |
| typedef unsigned long (__stdcall * gcTHREAD_ROUTINE)(void * Argument); |
| #else |
| typedef void * gctTHREAD_RETURN; |
| typedef void * (* gcTHREAD_ROUTINE)(void *); |
| #endif |
| |
| /* Create a new thread. */ |
| gceSTATUS |
| gcoOS_CreateThread( |
| IN gcoOS Os, |
| IN gcTHREAD_ROUTINE Worker, |
| IN gctPOINTER Argument, |
| OUT gctPOINTER * Thread |
| ); |
| |
| /* Close a thread. */ |
| gceSTATUS |
| gcoOS_CloseThread( |
| IN gcoOS Os, |
| IN gctPOINTER Thread |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Mutexes --------------------------------------------------------------*/ |
| |
| /* Create a new mutex. */ |
| gceSTATUS |
| gcoOS_CreateMutex( |
| IN gcoOS Os, |
| OUT gctPOINTER * Mutex |
| ); |
| |
| /* Delete a mutex. */ |
| gceSTATUS |
| gcoOS_DeleteMutex( |
| IN gcoOS Os, |
| IN gctPOINTER Mutex |
| ); |
| |
| /* Acquire a mutex. */ |
| gceSTATUS |
| gcoOS_AcquireMutex( |
| IN gcoOS Os, |
| IN gctPOINTER Mutex, |
| IN gctUINT32 Timeout |
| ); |
| |
| /* Release a mutex. */ |
| gceSTATUS |
| gcoOS_ReleaseMutex( |
| IN gcoOS Os, |
| IN gctPOINTER Mutex |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Signals --------------------------------------------------------------*/ |
| |
| /* Create a signal. */ |
| gceSTATUS |
| gcoOS_CreateSignal( |
| IN gcoOS Os, |
| IN gctBOOL ManualReset, |
| OUT gctSIGNAL * Signal |
| ); |
| |
| /* Destroy a signal. */ |
| gceSTATUS |
| gcoOS_DestroySignal( |
| IN gcoOS Os, |
| IN gctSIGNAL Signal |
| ); |
| |
| /* Signal a signal. */ |
| gceSTATUS |
| gcoOS_Signal( |
| IN gcoOS Os, |
| IN gctSIGNAL Signal, |
| IN gctBOOL State |
| ); |
| |
| /* Wait for a signal. */ |
| gceSTATUS |
| gcoOS_WaitSignal( |
| IN gcoOS Os, |
| IN gctSIGNAL Signal, |
| IN gctUINT32 Wait |
| ); |
| |
| /* Map a signal from another process */ |
| gceSTATUS |
| gcoOS_MapSignal( |
| IN gctSIGNAL RemoteSignal, |
| OUT gctSIGNAL * LocalSignal |
| ); |
| |
| /* Unmap a signal mapped from another process */ |
| gceSTATUS |
| gcoOS_UnmapSignal( |
| IN gctSIGNAL Signal |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Android Native Fence -------------------------------------------------*/ |
| |
| /* Create sync point. */ |
| gceSTATUS |
| gcoOS_CreateSyncPoint( |
| IN gcoOS Os, |
| OUT gctSYNC_POINT * SyncPoint |
| ); |
| |
| /* Destroy sync point. */ |
| gceSTATUS |
| gcoOS_DestroySyncPoint( |
| IN gcoOS Os, |
| IN gctSYNC_POINT SyncPoint |
| ); |
| |
| /* Create native fence. */ |
| gceSTATUS |
| gcoOS_CreateNativeFence( |
| IN gcoOS Os, |
| IN gctSYNC_POINT SyncPoint, |
| OUT gctINT * FenceFD |
| ); |
| |
| /* Wait on native fence. */ |
| gceSTATUS |
| gcoOS_WaitNativeFence( |
| IN gcoOS Os, |
| IN gctINT FenceFD, |
| IN gctUINT32 Timeout |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Memory Access and Cache ----------------------------------------------*/ |
| |
| /* Write a register. */ |
| gceSTATUS |
| gcoOS_WriteRegister( |
| IN gcoOS Os, |
| IN gctUINT32 Address, |
| IN gctUINT32 Data |
| ); |
| |
| /* Read a register. */ |
| gceSTATUS |
| gcoOS_ReadRegister( |
| IN gcoOS Os, |
| IN gctUINT32 Address, |
| OUT gctUINT32 * Data |
| ); |
| |
| gceSTATUS |
| gcoOS_CacheClean( |
| IN gcoOS Os, |
| IN gctUINT32 Node, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes |
| ); |
| |
| gceSTATUS |
| gcoOS_CacheFlush( |
| IN gcoOS Os, |
| IN gctUINT32 Node, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes |
| ); |
| |
| gceSTATUS |
| gcoOS_CacheInvalidate( |
| IN gcoOS Os, |
| IN gctUINT32 Node, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes |
| ); |
| |
| gceSTATUS |
| gcoOS_MemoryBarrier( |
| IN gcoOS Os, |
| IN gctPOINTER Logical |
| ); |
| |
| gceSTATUS |
| gcoOS_CPUPhysicalToGPUPhysical( |
| IN gctUINT32 CPUPhysical, |
| OUT gctUINT32_PTR GPUPhysical |
| ); |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----- Profile --------------------------------------------------------------*/ |
| |
| gceSTATUS |
| gckOS_GetProfileTick( |
| OUT gctUINT64_PTR Tick |
| ); |
| |
| gceSTATUS |
| gckOS_QueryProfileTickRate( |
| OUT gctUINT64_PTR TickRate |
| ); |
| |
| gctUINT32 |
| gckOS_ProfileToMS( |
| IN gctUINT64 Ticks |
| ); |
| |
| gceSTATUS |
| gcoOS_GetProfileTick( |
| OUT gctUINT64_PTR Tick |
| ); |
| |
| gceSTATUS |
| gcoOS_QueryProfileTickRate( |
| OUT gctUINT64_PTR TickRate |
| ); |
| |
| #define _gcmPROFILE_INIT(prefix, freq, start) \ |
| do { \ |
| prefix ## OS_QueryProfileTickRate(&(freq)); \ |
| prefix ## OS_GetProfileTick(&(start)); \ |
| } while (gcvFALSE) |
| |
| #define _gcmPROFILE_QUERY(prefix, start, ticks) \ |
| do { \ |
| prefix ## OS_GetProfileTick(&(ticks)); \ |
| (ticks) = ((ticks) > (start)) ? ((ticks) - (start)) \ |
| : (~0ull - (start) + (ticks) + 1); \ |
| } while (gcvFALSE) |
| |
| #if gcdENABLE_PROFILING |
| # define gcmkPROFILE_INIT(freq, start) _gcmPROFILE_INIT(gck, freq, start) |
| # define gcmkPROFILE_QUERY(start, ticks) _gcmPROFILE_QUERY(gck, start, ticks) |
| # define gcmPROFILE_INIT(freq, start) _gcmPROFILE_INIT(gco, freq, start) |
| # define gcmPROFILE_QUERY(start, ticks) _gcmPROFILE_QUERY(gco, start, ticks) |
| # define gcmPROFILE_ONLY(x) x |
| # define gcmPROFILE_ELSE(x) do { } while (gcvFALSE) |
| # define gcmPROFILE_DECLARE_ONLY(x) x |
| # define gcmPROFILE_DECLARE_ELSE(x) typedef x |
| #else |
| # define gcmkPROFILE_INIT(start, freq) do { } while (gcvFALSE) |
| # define gcmkPROFILE_QUERY(start, ticks) do { } while (gcvFALSE) |
| # define gcmPROFILE_INIT(start, freq) do { } while (gcvFALSE) |
| # define gcmPROFILE_QUERY(start, ticks) do { } while (gcvFALSE) |
| # define gcmPROFILE_ONLY(x) do { } while (gcvFALSE) |
| # define gcmPROFILE_ELSE(x) x |
| # define gcmPROFILE_DECLARE_ONLY(x) do { } while (gcvFALSE) |
| # define gcmPROFILE_DECLARE_ELSE(x) x |
| #endif |
| |
| /******************************************************************************* |
| ** gcoMATH object |
| */ |
| |
| #define gcdPI 3.14159265358979323846f |
| |
| /* Kernel. */ |
| gctINT |
| gckMATH_ModuloInt( |
| IN gctINT X, |
| IN gctINT Y |
| ); |
| |
| /* User. */ |
| gctUINT32 |
| gcoMATH_Log2in5dot5( |
| IN gctINT X |
| ); |
| |
| |
| gctFLOAT |
| gcoMATH_UIntAsFloat( |
| IN gctUINT32 X |
| ); |
| |
| gctUINT32 |
| gcoMATH_FloatAsUInt( |
| IN gctFLOAT X |
| ); |
| |
| gctBOOL |
| gcoMATH_CompareEqualF( |
| IN gctFLOAT X, |
| IN gctFLOAT Y |
| ); |
| |
| gctUINT16 |
| gcoMATH_UInt8AsFloat16( |
| IN gctUINT8 X |
| ); |
| |
| gctUINT32 |
| gcoMATH_Float16ToFloat( |
| IN gctUINT16 In |
| ); |
| |
| gctUINT16 |
| gcoMATH_FloatToFloat16( |
| IN gctUINT32 In |
| ); |
| |
| gctUINT32 |
| gcoMATH_Float11ToFloat( |
| IN gctUINT32 In |
| ); |
| |
| gctUINT16 |
| gcoMATH_FloatToFloat11( |
| IN gctUINT32 In |
| ); |
| |
| gctUINT32 |
| gcoMATH_Float10ToFloat( |
| IN gctUINT32 In |
| ); |
| |
| gctUINT16 |
| gcoMATH_FloatToFloat10( |
| IN gctUINT32 In |
| ); |
| |
| gctUINT32 |
| gcoMATH_Float14ToFloat( |
| IN gctUINT16 In |
| ); |
| |
| /******************************************************************************\ |
| **************************** Coordinate Structures ***************************** |
| \******************************************************************************/ |
| |
| typedef struct _gcsPOINT |
| { |
| gctINT32 x; |
| gctINT32 y; |
| } |
| gcsPOINT; |
| |
| typedef struct _gcsSIZE |
| { |
| gctINT32 width; |
| gctINT32 height; |
| } |
| gcsSIZE; |
| |
| typedef struct _gcsRECT |
| { |
| gctINT32 left; |
| gctINT32 top; |
| gctINT32 right; |
| gctINT32 bottom; |
| } |
| gcsRECT; |
| |
| typedef union _gcsPIXEL |
| { |
| struct |
| { |
| gctFLOAT r, g, b, a; |
| gctFLOAT d, s; |
| } pf; |
| |
| struct |
| { |
| gctINT32 r, g, b, a; |
| gctINT32 d, s; |
| } pi; |
| |
| struct |
| { |
| gctUINT32 r, g, b, a; |
| gctUINT32 d, s; |
| } pui; |
| |
| } gcsPIXEL; |
| |
| /******************************************************************************\ |
| ********************************* gcoSURF Object ******************************** |
| \******************************************************************************/ |
| |
| /*----------------------------------------------------------------------------*/ |
| /*------------------------------- gcoSURF Common ------------------------------*/ |
| |
| /* Color format classes. */ |
| typedef enum _gceFORMAT_CLASS |
| { |
| gcvFORMAT_CLASS_RGBA = 4500, |
| gcvFORMAT_CLASS_YUV, |
| gcvFORMAT_CLASS_INDEX, |
| gcvFORMAT_CLASS_LUMINANCE, |
| gcvFORMAT_CLASS_BUMP, |
| gcvFORMAT_CLASS_DEPTH, |
| gcvFORMAT_CLASS_ASTC, |
| gcvFORMAT_CLASS_OTHER |
| } |
| gceFORMAT_CLASS; |
| |
| /* Color format data type */ |
| typedef enum _gceFORMAT_DATATYPE |
| { |
| gcvFORMAT_DATATYPE_UNSIGNED_NORMALIZED, |
| gcvFORMAT_DATATYPE_SIGNED_NORMALIZED, |
| gcvFORMAT_DATATYPE_UNSIGNED_INTEGER, |
| gcvFORMAT_DATATYPE_SIGNED_INTEGER, |
| gcvFORMAT_DATATYPE_FLOAT16, |
| gcvFORMAT_DATATYPE_FLOAT32, |
| gcvFORMAT_DATATYPE_FLOAT_E5B9G9R9, |
| gcvFORMAT_DATATYPE_FLOAT_B10G11R11F, |
| gcvFORMAT_DATATYPE_INDEX, |
| gcvFORMAT_DATATYPE_SRGB, |
| gcvFORMAT_DATATYPE_FLOAT32_UINT, |
| } |
| gceFORMAT_DATATYPE; |
| |
| /* Special enums for width field in gcsFORMAT_COMPONENT. */ |
| typedef enum _gceCOMPONENT_CONTROL |
| { |
| gcvCOMPONENT_NOTPRESENT = 0x00, |
| gcvCOMPONENT_DONTCARE = 0x80, |
| gcvCOMPONENT_WIDTHMASK = 0x7F, |
| gcvCOMPONENT_ODD = 0x80 |
| } |
| gceCOMPONENT_CONTROL; |
| |
| /* Color format component parameters. */ |
| typedef struct _gcsFORMAT_COMPONENT |
| { |
| gctUINT8 start; |
| gctUINT8 width; |
| } |
| gcsFORMAT_COMPONENT; |
| |
| /* RGBA color format class. */ |
| typedef struct _gcsFORMAT_CLASS_TYPE_RGBA |
| { |
| gcsFORMAT_COMPONENT alpha; |
| gcsFORMAT_COMPONENT red; |
| gcsFORMAT_COMPONENT green; |
| gcsFORMAT_COMPONENT blue; |
| } |
| gcsFORMAT_CLASS_TYPE_RGBA; |
| |
| /* YUV color format class. */ |
| typedef struct _gcsFORMAT_CLASS_TYPE_YUV |
| { |
| gcsFORMAT_COMPONENT y; |
| gcsFORMAT_COMPONENT u; |
| gcsFORMAT_COMPONENT v; |
| } |
| gcsFORMAT_CLASS_TYPE_YUV; |
| |
| /* Index color format class. */ |
| typedef struct _gcsFORMAT_CLASS_TYPE_INDEX |
| { |
| gcsFORMAT_COMPONENT value; |
| } |
| gcsFORMAT_CLASS_TYPE_INDEX; |
| |
| /* Luminance color format class. */ |
| typedef struct _gcsFORMAT_CLASS_TYPE_LUMINANCE |
| { |
| gcsFORMAT_COMPONENT alpha; |
| gcsFORMAT_COMPONENT value; |
| } |
| gcsFORMAT_CLASS_TYPE_LUMINANCE; |
| |
| /* Bump map color format class. */ |
| typedef struct _gcsFORMAT_CLASS_TYPE_BUMP |
| { |
| gcsFORMAT_COMPONENT alpha; |
| gcsFORMAT_COMPONENT l; |
| gcsFORMAT_COMPONENT v; |
| gcsFORMAT_COMPONENT u; |
| gcsFORMAT_COMPONENT q; |
| gcsFORMAT_COMPONENT w; |
| } |
| gcsFORMAT_CLASS_TYPE_BUMP; |
| |
| /* Depth and stencil format class. */ |
| typedef struct _gcsFORMAT_CLASS_TYPE_DEPTH |
| { |
| gcsFORMAT_COMPONENT depth; |
| gcsFORMAT_COMPONENT stencil; |
| } |
| gcsFORMAT_CLASS_TYPE_DEPTH; |
| |
| typedef union _gcuPIXEL_FORMAT_CLASS |
| { |
| gcsFORMAT_CLASS_TYPE_BUMP bump; |
| gcsFORMAT_CLASS_TYPE_RGBA rgba; |
| gcsFORMAT_CLASS_TYPE_YUV yuv; |
| gcsFORMAT_CLASS_TYPE_LUMINANCE lum; |
| gcsFORMAT_CLASS_TYPE_INDEX index; |
| gcsFORMAT_CLASS_TYPE_DEPTH depth; |
| } |
| gcuPIXEL_FORMAT_CLASS; |
| |
| /* Format parameters. */ |
| typedef struct _gcsSURF_FORMAT_INFO |
| { |
| /* Name of the format */ |
| gctCONST_STRING formatName; |
| |
| /* Format code and class. */ |
| gceSURF_FORMAT format; |
| gceFORMAT_CLASS fmtClass; |
| |
| /* Format data type */ |
| gceFORMAT_DATATYPE fmtDataType; |
| |
| /* The size of one pixel in bits. */ |
| gctUINT8 bitsPerPixel; |
| |
| /* Pixel block dimensions. */ |
| gctUINT blockWidth; |
| gctUINT blockHeight; |
| |
| /* Pixel block size in bits. */ |
| gctUINT blockSize; |
| |
| /* Some formats are larger than what the GPU can support. */ |
| /* These formats are read in the number of layers specified. */ |
| gctUINT8 layers; |
| |
| /* The format is faked and software will interpret it differently |
| ** with HW. Most of them can't be blendable(PE) or filterable(TX). |
| */ |
| gctBOOL fakedFormat; |
| |
| /* Some formats have two neighbour pixels interleaved together. */ |
| /* To describe such format, set the flag to 1 and add another */ |
| /* like this one describing the odd pixel format. */ |
| gctBOOL interleaved; |
| |
| /* sRGB format. */ |
| gctBOOL sRGB; |
| |
| /* Format components. */ |
| gcuPIXEL_FORMAT_CLASS u; |
| |
| /* Format components. */ |
| gcuPIXEL_FORMAT_CLASS uOdd; |
| |
| /* Render format. */ |
| gceSURF_FORMAT closestRenderFormat; |
| /*gctCLOSEST_FORMAT dynamicClosestRenderFormat;*/ |
| gctUINT renderFormat; |
| const gceTEXTURE_SWIZZLE * pixelSwizzle; |
| |
| /* Texture format. */ |
| gceSURF_FORMAT closestTXFormat; |
| gctUINT txFormat; |
| const gceTEXTURE_SWIZZLE * txSwizzle; |
| gctBOOL txIntFilter; |
| } |
| gcsSURF_FORMAT_INFO; |
| |
| /* Frame buffer information. */ |
| typedef struct _gcsSURF_FRAMEBUFFER |
| { |
| gctPOINTER logical; |
| gctUINT width, height; |
| gctINT stride; |
| gceSURF_FORMAT format; |
| } |
| gcsSURF_FRAMEBUFFER; |
| |
| /* Generic pixel component descriptors. */ |
| extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XXX8; |
| extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_XX8X; |
| extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_X8XX; |
| extern gcsFORMAT_COMPONENT gcvPIXEL_COMP_8XXX; |
| |
| typedef enum _gceORIENTATION |
| { |
| gcvORIENTATION_TOP_BOTTOM, |
| gcvORIENTATION_BOTTOM_TOP, |
| } |
| gceORIENTATION; |
| |
| |
| /* Construct a new gcoSURF object. */ |
| gceSTATUS |
| gcoSURF_Construct( |
| IN gcoHAL Hal, |
| IN gctUINT Width, |
| IN gctUINT Height, |
| IN gctUINT Depth, |
| IN gceSURF_TYPE Type, |
| IN gceSURF_FORMAT Format, |
| IN gcePOOL Pool, |
| OUT gcoSURF * Surface |
| ); |
| |
| /* Destroy an gcoSURF object. */ |
| gceSTATUS |
| gcoSURF_Destroy( |
| IN gcoSURF Surface |
| ); |
| |
| /* Map user-allocated surface. */ |
| gceSTATUS |
| gcoSURF_MapUserSurface( |
| IN gcoSURF Surface, |
| IN gctUINT Alignment, |
| IN gctPOINTER Logical, |
| IN gctUINT32 Physical |
| ); |
| |
| /* Wrapp surface with known logical/GPU address */ |
| gceSTATUS |
| gcoSURF_WrapSurface( |
| IN gcoSURF Surface, |
| IN gctUINT Alignment, |
| IN gctPOINTER Logical, |
| IN gctUINT32 Physical |
| ); |
| |
| |
| /* Query vid mem node info. */ |
| gceSTATUS |
| gcoSURF_QueryVidMemNode( |
| IN gcoSURF Surface, |
| OUT gctUINT32 * Node, |
| OUT gcePOOL * Pool, |
| OUT gctSIZE_T_PTR Bytes |
| ); |
| |
| /* Set the color type of the surface. */ |
| gceSTATUS |
| gcoSURF_SetColorType( |
| IN gcoSURF Surface, |
| IN gceSURF_COLOR_TYPE ColorType |
| ); |
| |
| /* Get the color type of the surface. */ |
| gceSTATUS |
| gcoSURF_GetColorType( |
| IN gcoSURF Surface, |
| OUT gceSURF_COLOR_TYPE *ColorType |
| ); |
| |
| /* Set the color space of the surface. */ |
| gceSTATUS |
| gcoSURF_SetColorSpace( |
| IN gcoSURF Surface, |
| IN gceSURF_COLOR_SPACE ColorSpace |
| ); |
| |
| /* Get the color space of the surface. */ |
| gceSTATUS |
| gcoSURF_GetColorSpace( |
| IN gcoSURF Surface, |
| OUT gceSURF_COLOR_SPACE *ColorSpace |
| ); |
| |
| |
| /* Set the surface ration angle. */ |
| gceSTATUS |
| gcoSURF_SetRotation( |
| IN gcoSURF Surface, |
| IN gceSURF_ROTATION Rotation |
| ); |
| |
| gceSTATUS |
| gcoSURF_IsValid( |
| IN gcoSURF Surface |
| ); |
| |
| #if gcdENABLE_3D |
| /* Verify and return the state of the tile status mechanism. */ |
| gceSTATUS |
| gcoSURF_IsTileStatusSupported( |
| IN gcoSURF Surface |
| ); |
| |
| /* Verify if surface has tile status enabled. */ |
| gceSTATUS |
| gcoSURF_IsTileStatusEnabled( |
| IN gcoSURF Surface |
| ); |
| |
| /* Verify if surface is compressed. */ |
| gceSTATUS |
| gcoSURF_IsCompressed( |
| IN gcoSURF Surface |
| ); |
| |
| /* Enable tile status for the specified surface on zero slot. */ |
| gceSTATUS |
| gcoSURF_EnableTileStatus( |
| IN gcoSURF Surface |
| ); |
| |
| /* Enable tile status for the specified surface on specified slot. */ |
| gceSTATUS |
| gcoSURF_EnableTileStatusEx( |
| IN gcoSURF Surface, |
| IN gctUINT RtIndex |
| ); |
| |
| /* Disable tile status for the specified surface. */ |
| gceSTATUS |
| gcoSURF_DisableTileStatus( |
| IN gcoSURF Surface, |
| IN gctBOOL Decompress |
| ); |
| |
| /* Flush tile status cache for the specified surface. */ |
| gceSTATUS |
| gcoSURF_FlushTileStatus( |
| IN gcoSURF Surface, |
| IN gctBOOL Decompress |
| ); |
| #endif /* gcdENABLE_3D */ |
| |
| /* Get surface size. */ |
| gceSTATUS |
| gcoSURF_GetSize( |
| IN gcoSURF Surface, |
| OUT gctUINT * Width, |
| OUT gctUINT * Height, |
| OUT gctUINT * Depth |
| ); |
| |
| /* Get surface aligned sizes. */ |
| gceSTATUS |
| gcoSURF_GetAlignedSize( |
| IN gcoSURF Surface, |
| OUT gctUINT * Width, |
| OUT gctUINT * Height, |
| OUT gctINT * Stride |
| ); |
| |
| /* Get alignments. */ |
| gceSTATUS |
| gcoSURF_GetAlignment( |
| IN gceSURF_TYPE Type, |
| IN gceSURF_FORMAT Format, |
| OUT gctUINT * AddressAlignment, |
| OUT gctUINT * XAlignment, |
| OUT gctUINT * YAlignment |
| ); |
| |
| gceSTATUS |
| gcoSURF_AlignResolveRect( |
| IN gcoSURF Surf, |
| IN gcsPOINT_PTR RectOrigin, |
| IN gcsPOINT_PTR RectSize, |
| OUT gcsPOINT_PTR AlignedOrigin, |
| OUT gcsPOINT_PTR AlignedSize |
| ); |
| |
| /* Get surface type and format. */ |
| gceSTATUS |
| gcoSURF_GetFormat( |
| IN gcoSURF Surface, |
| OUT OPTIONAL gceSURF_TYPE * Type, |
| OUT OPTIONAL gceSURF_FORMAT * Format |
| ); |
| |
| /* Get surface information */ |
| gceSTATUS |
| gcoSURF_GetFormatInfo( |
| IN gcoSURF Surface, |
| OUT gcsSURF_FORMAT_INFO_PTR * formatInfo |
| ); |
| |
| /* Get Surface pack format */ |
| gceSTATUS |
| gcoSURF_GetPackedFormat( |
| IN gcoSURF Surface, |
| OUT gceSURF_FORMAT * Format |
| ); |
| |
| /* Get surface tiling. */ |
| gceSTATUS |
| gcoSURF_GetTiling( |
| IN gcoSURF Surface, |
| OUT gceTILING * Tiling |
| ); |
| |
| /* Get flip bitmap offset bytes. */ |
| gceSTATUS |
| gcoSURF_GetFlipBitmapOffset( |
| IN gcoSURF Surface, |
| OUT gctUINT_PTR FlipBitmapOffset |
| ); |
| |
| /* Get bottom buffer offset bytes. */ |
| gceSTATUS |
| gcoSURF_GetBottomBufferOffset( |
| IN gcoSURF Surface, |
| OUT gctUINT_PTR BottomBufferOffset |
| ); |
| |
| /* Lock the surface. */ |
| gceSTATUS |
| gcoSURF_Lock( |
| IN gcoSURF Surface, |
| IN OUT gctUINT32 * Address, |
| IN OUT gctPOINTER * Memory |
| ); |
| |
| /* Unlock the surface. */ |
| gceSTATUS |
| gcoSURF_Unlock( |
| IN gcoSURF Surface, |
| IN gctPOINTER Memory |
| ); |
| |
| /*. Query surface flags.*/ |
| gceSTATUS |
| gcoSURF_QueryFlags( |
| IN gcoSURF Surface, |
| IN gceSURF_FLAG Flag |
| ); |
| |
| /* Return pixel format parameters; Info is required to be a pointer to an |
| * array of at least two items because some formats have up to two records |
| * of description. */ |
| gceSTATUS |
| gcoSURF_QueryFormat( |
| IN gceSURF_FORMAT Format, |
| OUT gcsSURF_FORMAT_INFO_PTR * Info |
| ); |
| |
| /* Compute the color pixel mask. */ |
| gceSTATUS |
| gcoSURF_ComputeColorMask( |
| IN gcsSURF_FORMAT_INFO_PTR Format, |
| OUT gctUINT32_PTR ColorMask |
| ); |
| |
| /* Flush the surface. */ |
| gceSTATUS |
| gcoSURF_Flush( |
| IN gcoSURF Surface |
| ); |
| |
| /* Fill surface from it's tile status buffer. */ |
| gceSTATUS |
| gcoSURF_FillFromTile( |
| IN gcoSURF Surface |
| ); |
| |
| /* Fill surface with a value. */ |
| gceSTATUS |
| gcoSURF_Fill( |
| IN gcoSURF Surface, |
| IN gcsPOINT_PTR Origin, |
| IN gcsSIZE_PTR Size, |
| IN gctUINT32 Value, |
| IN gctUINT32 Mask |
| ); |
| |
| /* Alpha blend two surfaces together. */ |
| gceSTATUS |
| gcoSURF_Blend( |
| IN gcoSURF SrcSurface, |
| IN gcoSURF DestSurface, |
| IN gcsPOINT_PTR SrcOrig, |
| IN gcsPOINT_PTR DestOrigin, |
| IN gcsSIZE_PTR Size, |
| IN gceSURF_BLEND_MODE Mode |
| ); |
| |
| /* Create a new gcoSURF wrapper object. */ |
| gceSTATUS |
| gcoSURF_ConstructWrapper( |
| IN gcoHAL Hal, |
| OUT gcoSURF * Surface |
| ); |
| |
| /* Set surface flags.*/ |
| gceSTATUS |
| gcoSURF_SetFlags( |
| IN gcoSURF Surface, |
| IN gceSURF_FLAG Flag, |
| IN gctBOOL Value |
| ); |
| |
| /* Set the underlying buffer for the surface wrapper. */ |
| gceSTATUS |
| gcoSURF_SetBuffer( |
| IN gcoSURF Surface, |
| IN gceSURF_TYPE Type, |
| IN gceSURF_FORMAT Format, |
| IN gctUINT Stride, |
| IN gctPOINTER Logical, |
| IN gctUINT32 Physical |
| ); |
| |
| /* Set the underlying video buffer for the surface wrapper. */ |
| gceSTATUS |
| gcoSURF_SetVideoBuffer( |
| IN gcoSURF Surface, |
| IN gceSURF_TYPE Type, |
| IN gceSURF_FORMAT Format, |
| IN gctUINT Width, |
| IN gctUINT Height, |
| IN gctUINT Stride, |
| IN gctPOINTER *LogicalPlane1, |
| IN gctUINT32 *PhysicalPlane1 |
| ); |
| |
| /* Set the size of the surface in pixels and map the underlying buffer. */ |
| gceSTATUS |
| gcoSURF_SetWindow( |
| IN gcoSURF Surface, |
| IN gctUINT X, |
| IN gctUINT Y, |
| IN gctUINT Width, |
| IN gctUINT Height |
| ); |
| |
| /* Set width/height alignment of the surface directly and calculate stride/size. This is only for dri backend now. Please be careful before use. */ |
| gceSTATUS |
| gcoSURF_SetAlignment( |
| IN gcoSURF Surface, |
| IN gctUINT Width, |
| IN gctUINT Height |
| ); |
| |
| /* Increase reference count of the surface. */ |
| gceSTATUS |
| gcoSURF_ReferenceSurface( |
| IN gcoSURF Surface |
| ); |
| |
| /* Get surface reference count. */ |
| gceSTATUS |
| gcoSURF_QueryReferenceCount( |
| IN gcoSURF Surface, |
| OUT gctINT32 * ReferenceCount |
| ); |
| |
| /* Set surface orientation. */ |
| gceSTATUS |
| gcoSURF_SetOrientation( |
| IN gcoSURF Surface, |
| IN gceORIENTATION Orientation |
| ); |
| |
| /* Query surface orientation. */ |
| gceSTATUS |
| gcoSURF_QueryOrientation( |
| IN gcoSURF Surface, |
| OUT gceORIENTATION * Orientation |
| ); |
| |
| gceSTATUS |
| gcoSURF_SetOffset( |
| IN gcoSURF Surface, |
| IN gctSIZE_T Offset |
| ); |
| |
| gceSTATUS |
| gcoSURF_NODE_Cache( |
| IN gcsSURF_NODE_PTR Node, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes, |
| IN gceCACHEOPERATION Operation |
| ); |
| |
| /* Lock and unlock surface node */ |
| gceSTATUS |
| gcoSURF_LockNode( |
| IN gcsSURF_NODE_PTR Node, |
| OUT gctUINT32 * Address, |
| OUT gctPOINTER * Memory |
| ); |
| |
| gceSTATUS |
| gcoSURF_UnLockNode( |
| IN gcsSURF_NODE_PTR Node, |
| IN gceSURF_TYPE Type |
| ); |
| |
| /* Perform CPU cache operation on surface node */ |
| gceSTATUS |
| gcoSURF_NODE_CPUCacheOperation( |
| IN gcsSURF_NODE_PTR Node, |
| IN gceSURF_TYPE Type, |
| IN gctSIZE_T Offset, |
| IN gctSIZE_T Length, |
| IN gceCACHEOPERATION Operation |
| ); |
| |
| /* Perform CPU cache operation on surface */ |
| gceSTATUS |
| gcoSURF_CPUCacheOperation( |
| IN gcoSURF Surface, |
| IN gceCACHEOPERATION Operation |
| ); |
| |
| |
| gceSTATUS |
| gcoSURF_Swap( |
| IN gcoSURF Surface1, |
| IN gcoSURF Surface2 |
| ); |
| |
| gceSTATUS |
| gcoSURF_ResetSurWH( |
| IN gcoSURF Surface, |
| IN gctUINT oriw, |
| IN gctUINT orih, |
| IN gctUINT alignw, |
| IN gctUINT alignh, |
| IN gceSURF_FORMAT fmt |
| ); |
| |
| /* Update surface timestamp. */ |
| gceSTATUS |
| gcoSURF_UpdateTimeStamp( |
| IN gcoSURF Surface |
| ); |
| |
| /* Query surface current timestamp. */ |
| gceSTATUS |
| gcoSURF_QueryTimeStamp( |
| IN gcoSURF Surface, |
| OUT gctUINT64 * TimeStamp |
| ); |
| |
| /* |
| * Allocate shared buffer for this surface, so that |
| * surface states can be shared across processes. |
| */ |
| gceSTATUS |
| gcoSURF_AllocShBuffer( |
| IN gcoSURF Surface, |
| OUT gctSHBUF * ShBuf |
| ); |
| |
| /* Bind shared buffer to this surface */ |
| gceSTATUS |
| gcoSURF_BindShBuffer( |
| IN gcoSURF Surface, |
| IN gctSHBUF ShBuf |
| ); |
| |
| /* Push surface shared states to shared buffer. */ |
| gceSTATUS |
| gcoSURF_PushSharedInfo( |
| IN gcoSURF Surface |
| ); |
| |
| /* Pop shared states from shared buffer. */ |
| gceSTATUS |
| gcoSURF_PopSharedInfo( |
| IN gcoSURF Surface |
| ); |
| |
| #if (gcdENABLE_3D || gcdENABLE_VG) |
| /* Copy surface. */ |
| gceSTATUS |
| gcoSURF_Copy( |
| IN gcoSURF Surface, |
| IN gcoSURF Source |
| ); |
| |
| /* Set number of samples for a gcoSURF object. */ |
| gceSTATUS |
| gcoSURF_SetSamples( |
| IN gcoSURF Surface, |
| IN gctUINT Samples |
| ); |
| |
| /* Get the number of samples per pixel. */ |
| gceSTATUS |
| gcoSURF_GetSamples( |
| IN gcoSURF Surface, |
| OUT gctUINT_PTR Samples |
| ); |
| #endif |
| |
| /******************************************************************************\ |
| ********************************* gcoDUMP Object ******************************** |
| \******************************************************************************/ |
| |
| /* Construct a new gcoDUMP object. */ |
| gceSTATUS |
| gcoDUMP_Construct( |
| IN gcoOS Os, |
| IN gcoHAL Hal, |
| OUT gcoDUMP * Dump |
| ); |
| |
| /* Destroy a gcoDUMP object. */ |
| gceSTATUS |
| gcoDUMP_Destroy( |
| IN gcoDUMP Dump |
| ); |
| |
| /* Enable/disable dumping. */ |
| gceSTATUS |
| gcoDUMP_Control( |
| IN gcoDUMP Dump, |
| IN gctSTRING FileName |
| ); |
| |
| gceSTATUS |
| gcoDUMP_IsEnabled( |
| IN gcoDUMP Dump, |
| OUT gctBOOL * Enabled |
| ); |
| |
| /* Add surface. */ |
| gceSTATUS |
| gcoDUMP_AddSurface( |
| IN gcoDUMP Dump, |
| IN gctINT32 Width, |
| IN gctINT32 Height, |
| IN gceSURF_FORMAT PixelFormat, |
| IN gctUINT32 Address, |
| IN gctSIZE_T ByteCount |
| ); |
| |
| /* Mark the beginning of a frame. */ |
| gceSTATUS |
| gcoDUMP_FrameBegin( |
| IN gcoDUMP Dump |
| ); |
| |
| /* Mark the end of a frame. */ |
| gceSTATUS |
| gcoDUMP_FrameEnd( |
| IN gcoDUMP Dump |
| ); |
| |
| /* Dump data. */ |
| gceSTATUS |
| gcoDUMP_DumpData( |
| IN gcoDUMP Dump, |
| IN gceDUMP_TAG Type, |
| IN gctUINT32 Address, |
| IN gctSIZE_T ByteCount, |
| IN gctCONST_POINTER Data |
| ); |
| |
| /* Delete an address. */ |
| gceSTATUS |
| gcoDUMP_Delete( |
| IN gcoDUMP Dump, |
| IN gctUINT32 Address |
| ); |
| |
| /* Enable dump or not. */ |
| gceSTATUS |
| gcoDUMP_SetDumpFlag( |
| IN gctBOOL DumpState |
| ); |
| |
| /******************************************************************************\ |
| ******************************* gcsRECT Structure ****************************** |
| \******************************************************************************/ |
| |
| /* Initialize rectangle structure. */ |
| gceSTATUS |
| gcsRECT_Set( |
| OUT gcsRECT_PTR Rect, |
| IN gctINT32 Left, |
| IN gctINT32 Top, |
| IN gctINT32 Right, |
| IN gctINT32 Bottom |
| ); |
| |
| /* Return the width of the rectangle. */ |
| gceSTATUS |
| gcsRECT_Width( |
| IN gcsRECT_PTR Rect, |
| OUT gctINT32 * Width |
| ); |
| |
| /* Return the height of the rectangle. */ |
| gceSTATUS |
| gcsRECT_Height( |
| IN gcsRECT_PTR Rect, |
| OUT gctINT32 * Height |
| ); |
| |
| /* Ensure that top left corner is to the left and above the right bottom. */ |
| gceSTATUS |
| gcsRECT_Normalize( |
| IN OUT gcsRECT_PTR Rect |
| ); |
| |
| /* Compare two rectangles. */ |
| gceSTATUS |
| gcsRECT_IsEqual( |
| IN gcsRECT_PTR Rect1, |
| IN gcsRECT_PTR Rect2, |
| OUT gctBOOL * Equal |
| ); |
| |
| /* Compare the sizes of two rectangles. */ |
| gceSTATUS |
| gcsRECT_IsOfEqualSize( |
| IN gcsRECT_PTR Rect1, |
| IN gcsRECT_PTR Rect2, |
| OUT gctBOOL * EqualSize |
| ); |
| |
| gceSTATUS |
| gcsRECT_RelativeRotation( |
| IN gceSURF_ROTATION Orientation, |
| IN OUT gceSURF_ROTATION *Relation); |
| |
| gceSTATUS |
| |
| gcsRECT_Rotate( |
| |
| IN OUT gcsRECT_PTR Rect, |
| |
| IN gceSURF_ROTATION Rotation, |
| |
| IN gceSURF_ROTATION toRotation, |
| |
| IN gctINT32 SurfaceWidth, |
| |
| IN gctINT32 SurfaceHeight |
| |
| ); |
| |
| /******************************************************************************\ |
| **************************** gcsBOUNDARY Structure ***************************** |
| \******************************************************************************/ |
| |
| typedef struct _gcsBOUNDARY |
| { |
| gctINT x; |
| gctINT y; |
| gctINT width; |
| gctINT height; |
| } |
| gcsBOUNDARY; |
| |
| /******************************************************************************\ |
| ********************************* gcoHEAP Object ******************************** |
| \******************************************************************************/ |
| |
| typedef struct _gcoHEAP * gcoHEAP; |
| |
| /* Construct a new gcoHEAP object. */ |
| gceSTATUS |
| gcoHEAP_Construct( |
| IN gcoOS Os, |
| IN gctSIZE_T AllocationSize, |
| OUT gcoHEAP * Heap |
| ); |
| |
| /* Destroy an gcoHEAP object. */ |
| gceSTATUS |
| gcoHEAP_Destroy( |
| IN gcoHEAP Heap |
| ); |
| |
| /* Allocate memory. */ |
| gceSTATUS |
| gcoHEAP_Allocate( |
| IN gcoHEAP Heap, |
| IN gctSIZE_T Bytes, |
| OUT gctPOINTER * Node |
| ); |
| |
| gceSTATUS |
| gcoHEAP_GetMemorySize( |
| IN gcoHEAP Heap, |
| IN gctPOINTER Memory, |
| OUT gctSIZE_T_PTR MemorySize |
| ); |
| |
| /* Free memory. */ |
| gceSTATUS |
| gcoHEAP_Free( |
| IN gcoHEAP Heap, |
| IN gctPOINTER Node |
| ); |
| |
| #if (VIVANTE_PROFILER || gcdDEBUG) |
| /* Profile the heap. */ |
| gceSTATUS |
| gcoHEAP_ProfileStart( |
| IN gcoHEAP Heap |
| ); |
| |
| gceSTATUS |
| gcoHEAP_ProfileEnd( |
| IN gcoHEAP Heap, |
| IN gctCONST_STRING Title |
| ); |
| #endif |
| |
| |
| /******************************************************************************\ |
| ******************************* Debugging Macros ******************************* |
| \******************************************************************************/ |
| |
| void |
| gcoOS_SetDebugLevel( |
| IN gctUINT32 Level |
| ); |
| |
| void |
| gcoOS_GetDebugLevel( |
| OUT gctUINT32_PTR DebugLevel |
| ); |
| |
| void |
| gcoOS_SetDebugZone( |
| IN gctUINT32 Zone |
| ); |
| |
| void |
| gcoOS_GetDebugZone( |
| IN gctUINT32 Zone, |
| OUT gctUINT32_PTR DebugZone |
| ); |
| |
| void |
| gcoOS_SetDebugLevelZone( |
| IN gctUINT32 Level, |
| IN gctUINT32 Zone |
| ); |
| |
| void |
| gcoOS_SetDebugZones( |
| IN gctUINT32 Zones, |
| IN gctBOOL Enable |
| ); |
| |
| void |
| gcoOS_SetDebugFile( |
| IN gctCONST_STRING FileName |
| ); |
| |
| gctFILE |
| gcoOS_ReplaceDebugFile( |
| IN gctFILE fp |
| ); |
| |
| void |
| gcoOS_SysTraceBegin( |
| IN gctCONST_STRING FuncName |
| ); |
| |
| void |
| gcoOS_SysTraceEnd( |
| IN void); |
| |
| /******************************************************************************* |
| ** |
| ** gcmFATAL |
| ** |
| ** Print a message to the debugger and execute a break point. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** message Message. |
| ** ... Optional arguments. |
| */ |
| |
| void |
| gckOS_DebugFatal( |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gcoOS_DebugFatal( |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| #if gcmIS_DEBUG(gcdDEBUG_FATAL) |
| # define gcmFATAL gcoOS_DebugFatal |
| # define gcmkFATAL gckOS_DebugFatal |
| #elif gcdHAS_ELLIPSIS |
| # define gcmFATAL(...) |
| # define gcmkFATAL(...) |
| #else |
| gcmINLINE static void |
| __dummy_fatal( |
| IN gctCONST_STRING Message, |
| ... |
| ) |
| { |
| } |
| # define gcmFATAL __dummy_fatal |
| # define gcmkFATAL __dummy_fatal |
| #endif |
| |
| #define gcmENUM2TEXT(e) case e: return #e |
| |
| /******************************************************************************* |
| ** |
| ** gcmTRACE |
| ** |
| ** Print a message to the debugfer if the correct level has been set. In |
| ** retail mode this macro does nothing. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** level Level of message. |
| ** message Message. |
| ** ... Optional arguments. |
| */ |
| #define gcvLEVEL_NONE -1 |
| #define gcvLEVEL_ERROR 0 |
| #define gcvLEVEL_WARNING 1 |
| #define gcvLEVEL_INFO 2 |
| #define gcvLEVEL_VERBOSE 3 |
| |
| void |
| gckOS_DebugTrace( |
| IN gctUINT32 Level, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gckOS_DebugTraceN( |
| IN gctUINT32 Level, |
| IN gctUINT ArgumentSize, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gcoOS_DebugTrace( |
| IN gctUINT32 Level, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| #if gcmIS_DEBUG(gcdDEBUG_TRACE) |
| # define gcmTRACE gcoOS_DebugTrace |
| # define gcmkTRACE gckOS_DebugTrace |
| # define gcmkTRACE_N gckOS_DebugTraceN |
| #elif gcdHAS_ELLIPSIS |
| # define gcmTRACE(...) |
| # define gcmkTRACE(...) |
| # define gcmkTRACE_N(...) |
| #else |
| gcmINLINE static void |
| __dummy_trace( |
| IN gctUINT32 Level, |
| IN gctCONST_STRING Message, |
| ... |
| ) |
| { |
| } |
| |
| gcmINLINE static void |
| __dummy_trace_n( |
| IN gctUINT32 Level, |
| IN gctUINT ArgumentSize, |
| IN gctCONST_STRING Message, |
| ... |
| ) |
| { |
| } |
| |
| # define gcmTRACE __dummy_trace |
| # define gcmkTRACE __dummy_trace |
| # define gcmkTRACE_N __dummy_trace_n |
| #endif |
| |
| /* Zones common for kernel and user. */ |
| #define gcvZONE_OS (1 << 0) |
| #define gcvZONE_HARDWARE (1 << 1) |
| #define gcvZONE_HEAP (1 << 2) |
| #define gcvZONE_SIGNAL (1 << 27) |
| |
| /* Kernel zones. */ |
| #define gcvZONE_KERNEL (1 << 3) |
| #define gcvZONE_VIDMEM (1 << 4) |
| #define gcvZONE_COMMAND (1 << 5) |
| #define gcvZONE_DRIVER (1 << 6) |
| #define gcvZONE_CMODEL (1 << 7) |
| #define gcvZONE_MMU (1 << 8) |
| #define gcvZONE_EVENT (1 << 9) |
| #define gcvZONE_DEVICE (1 << 10) |
| #define gcvZONE_DATABASE (1 << 11) |
| #define gcvZONE_INTERRUPT (1 << 12) |
| #define gcvZONE_POWER (1 << 13) |
| |
| /* User zones. */ |
| #define gcvZONE_HAL (1 << 3) |
| #define gcvZONE_BUFFER (1 << 4) |
| #define gcvZONE_CONTEXT (1 << 5) |
| #define gcvZONE_SURFACE (1 << 6) |
| #define gcvZONE_INDEX (1 << 7) |
| #define gcvZONE_STREAM (1 << 8) |
| #define gcvZONE_TEXTURE (1 << 9) |
| #define gcvZONE_2D (1 << 10) |
| #define gcvZONE_3D (1 << 11) |
| #define gcvZONE_COMPILER (1 << 12) |
| #define gcvZONE_MEMORY (1 << 13) |
| #define gcvZONE_STATE (1 << 14) |
| #define gcvZONE_AUX (1 << 15) |
| #define gcvZONE_VERTEX (1 << 16) |
| #define gcvZONE_CL (1 << 17) |
| #define gcvZONE_COMPOSITION (1 << 17) |
| #define gcvZONE_VG (1 << 18) |
| #define gcvZONE_IMAGE (1 << 19) |
| #define gcvZONE_UTILITY (1 << 20) |
| #define gcvZONE_PARAMETERS (1 << 21) |
| #define gcvZONE_BUFOBJ (1 << 22) |
| #define gcvZONE_SHADER (1 << 23) |
| #define gcvZONE_STREAM_OUT (1 << 24) |
| |
| /* API definitions. */ |
| #define gcvZONE_API_HAL (1 << 28) |
| #define gcvZONE_API_EGL (2 << 28) |
| #define gcvZONE_API_ES11 (3 << 28) |
| #define gcvZONE_API_ES20 (4 << 28) |
| #define gcvZONE_API_VG11 (5 << 28) |
| #define gcvZONE_API_GL (6 << 28) |
| #define gcvZONE_API_DFB (7 << 28) |
| #define gcvZONE_API_GDI ((gctUINT32)8 << 28) |
| #define gcvZONE_API_D3D ((gctUINT32)9 << 28) |
| #define gcvZONE_API_ES30 ((gctUINT32)10 << 28) |
| |
| |
| #define gcmZONE_GET_API(zone) ((zone) >> 28) |
| /*Set gcdZONE_MASE like 0x0 | gcvZONE_API_EGL |
| will enable print EGL module debug info*/ |
| #define gcdZONE_MASK 0x0FFFFFFF |
| |
| /* Handy zones. */ |
| #define gcvZONE_NONE 0 |
| #define gcvZONE_ALL 0x0FFFFFFF |
| |
| /*Dump API depth set 1 for API, 2 for API and API behavior*/ |
| #define gcvDUMP_API_DEPTH 1 |
| |
| /******************************************************************************* |
| ** |
| ** gcmTRACE_ZONE |
| ** |
| ** Print a message to the debugger if the correct level and zone has been |
| ** set. In retail mode this macro does nothing. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** Level Level of message. |
| ** Zone Zone of message. |
| ** Message Message. |
| ** ... Optional arguments. |
| */ |
| |
| void |
| gckOS_DebugTraceZone( |
| IN gctUINT32 Level, |
| IN gctUINT32 Zone, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gckOS_DebugTraceZoneN( |
| IN gctUINT32 Level, |
| IN gctUINT32 Zone, |
| IN gctUINT ArgumentSize, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gcoOS_DebugTraceZone( |
| IN gctUINT32 Level, |
| IN gctUINT32 Zone, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| #if gcmIS_DEBUG(gcdDEBUG_TRACE) |
| # define gcmTRACE_ZONE gcoOS_DebugTraceZone |
| # define gcmkTRACE_ZONE gckOS_DebugTraceZone |
| # define gcmkTRACE_ZONE_N gckOS_DebugTraceZoneN |
| #elif gcdHAS_ELLIPSIS |
| # define gcmTRACE_ZONE(...) |
| # define gcmkTRACE_ZONE(...) |
| # define gcmkTRACE_ZONE_N(...) |
| #else |
| gcmINLINE static void |
| __dummy_trace_zone( |
| IN gctUINT32 Level, |
| IN gctUINT32 Zone, |
| IN gctCONST_STRING Message, |
| ... |
| ) |
| { |
| } |
| |
| gcmINLINE static void |
| __dummy_trace_zone_n( |
| IN gctUINT32 Level, |
| IN gctUINT32 Zone, |
| IN gctUINT ArgumentSize, |
| IN gctCONST_STRING Message, |
| ... |
| ) |
| { |
| } |
| |
| # define gcmTRACE_ZONE __dummy_trace_zone |
| # define gcmkTRACE_ZONE __dummy_trace_zone |
| # define gcmkTRACE_ZONE_N __dummy_trace_zone_n |
| #endif |
| |
| /******************************************************************************* |
| ** |
| ** gcmDEBUG_ONLY |
| ** |
| ** Execute a statement or function only in DEBUG mode. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** f Statement or function to execute. |
| */ |
| #if gcmIS_DEBUG(gcdDEBUG_CODE) |
| # define gcmDEBUG_ONLY(f) f |
| #else |
| # define gcmDEBUG_ONLY(f) |
| #endif |
| |
| /******************************************************************************* |
| ** |
| ** gcmSTACK_PUSH |
| ** gcmSTACK_POP |
| ** gcmSTACK_DUMP |
| ** |
| ** Push or pop a function with entry arguments on the trace stack. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** Function Name of function. |
| ** Line Line number. |
| ** Text Optional text. |
| ** ... Optional arguments for text. |
| */ |
| #if gcmIS_DEBUG(gcdDEBUG_STACK) |
| void gcoOS_StackPush(IN gctINT8_PTR Identity, IN gctCONST_STRING Function, IN gctINT Line, IN gctCONST_STRING Text, ...); |
| void gcoOS_StackPop(IN gctINT8_PTR Identity, IN gctCONST_STRING Function); |
| void gcoOS_StackDump(void); |
| void gcoOS_StackRemove(IN gctHANDLE Thread); |
| |
| # define gcmSTACK_PUSH gcoOS_StackPush |
| # define gcmSTACK_POP gcoOS_StackPop |
| # define gcmSTACK_DUMP gcoOS_StackDump |
| # define gcmSTACK_REMOVE gcoOS_StackRemove |
| #elif gcdHAS_ELLIPSIS |
| # define gcmSTACK_PUSH(...) do { } while (0) |
| # define gcmSTACK_POP(...) do { } while (0) |
| # define gcmSTACK_DUMP() do { } while (0) |
| # define gcmSTACK_REMOVE(...) do { } while (0) |
| #else |
| gcmINLINE static void |
| __dummy_stack_push( |
| IN gctCONST_STRING Function, |
| IN gctINT Line, |
| IN gctCONST_STRING Text, ... |
| ) |
| { |
| } |
| # define gcmSTACK_PUSH __dummy_stack_push |
| # define gcmSTACK_POP(a,b) do { } while (0) |
| # define gcmSTACK_DUMP() do { } while (0) |
| # define gcmSTACK_REMOVE(a) do { } while (0) |
| #endif |
| |
| /******************************************************************************\ |
| ******************************** Binary Trace ********************************** |
| \******************************************************************************/ |
| typedef struct _gcsBINARY_TRACE_MESSAGE * gcsBINARY_TRACE_MESSAGE_PTR; |
| typedef struct _gcsBINARY_TRACE_MESSAGE |
| { |
| gctUINT32 signature; |
| gctUINT32 pid; |
| gctUINT32 tid; |
| gctUINT32 line; |
| gctUINT32 numArguments; |
| gctUINT8 payload; |
| } |
| gcsBINARY_TRACE_MESSAGE; |
| |
| #define gcdBINARY_TRACE_MESSAGE_SIZE 240 |
| |
| #if gcdBINARY_TRACE |
| void |
| gcoOS_BinaryTrace( |
| IN gctCONST_STRING Function, |
| IN gctINT Line, |
| IN gctCONST_STRING Text OPTIONAL, |
| ... |
| ); |
| |
| void |
| gckOS_BinaryTrace( |
| IN gctCONST_STRING Function, |
| IN gctINT Line, |
| IN gctCONST_STRING Text OPTIONAL, |
| ... |
| ); |
| |
| # define gcmBINARY_TRACE gcoOS_BinaryTrace |
| # define gcmkBINARY_TRACE gckOS_BinaryTrace |
| #elif gcdHAS_ELLIPSIS |
| # define gcmBINARY_TRACE(Function, Line, Text, ...) |
| # define gcmkBINARY_TRACE(Function, Line, Text, ...) |
| #else |
| gcmINLINE static void |
| __dummy_binary_trace( |
| IN gctCONST_STRING Function, |
| IN gctINT Line, |
| IN gctCONST_STRING Text, |
| ) |
| { |
| } |
| |
| # define gcmBINARY_TRACE __dummy_binary_trace |
| # define gcmkBINARY_TRACE __dummy_binary_trace |
| #endif |
| |
| /******************************************************************************\ |
| ******************************** Logging Macros ******************************** |
| \******************************************************************************/ |
| |
| #define gcdHEADER_LEVEL gcvLEVEL_VERBOSE |
| |
| #ifndef gcdEMPTY_HEADER_FOOTER |
| #define gcdEMPTY_HEADER_FOOTER 0 |
| #endif |
| |
| #if gcdENABLE_PROFILING |
| void |
| gcoOS_ProfileDB( |
| IN gctCONST_STRING Function, |
| IN OUT gctBOOL_PTR Initialized |
| ); |
| |
| #define gcmHEADER() \ |
| gctINT8 __user__ = 1; \ |
| static gctBOOL __profile__initialized__ = gcvFALSE; \ |
| gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__) |
| #define gcmHEADER_ARG(...) \ |
| gctINT8 __user__ = 1; \ |
| static gctBOOL __profile__initialized__ = gcvFALSE; \ |
| gcmSTACK_PUSH(&__user__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \ |
| gcoOS_ProfileDB(__FUNCTION__, &__profile__initialized__) |
| #define gcmFOOTER() \ |
| gcmSTACK_POP(&__user__, __FUNCTION__); \ |
| gcoOS_ProfileDB(__FUNCTION__, gcvNULL) |
| #define gcmFOOTER_NO() \ |
| gcmSTACK_POP(&__user__, __FUNCTION__); \ |
| gcoOS_ProfileDB(__FUNCTION__, gcvNULL) |
| #define gcmFOOTER_ARG(...) \ |
| gcmSTACK_POP(&__user__, __FUNCTION__); \ |
| gcoOS_ProfileDB(__FUNCTION__, gcvNULL) |
| #define gcmFOOTER_KILL() \ |
| gcmSTACK_POP(&__user__, __FUNCTION__); \ |
| gcoOS_ProfileDB(gcvNULL, gcvNULL) |
| |
| #else /* gcdENABLE_PROFILING */ |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmHEADER() |
| #elif gcdEMPTY_HEADER_FOOTER |
| # define gcmHEADER() |
| #elif gcdHAS_ELLIPSIS |
| #define gcmHEADER() \ |
| gctINT8 __user__ = 1; \ |
| gctINT8_PTR __user_ptr__ = &__user__; \ |
| gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "++%s(%d)", __FUNCTION__, __LINE__) |
| #else |
| gcmINLINE static void |
| __dummy_header(void) |
| { |
| } |
| # define gcmHEADER __dummy_header |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmHEADER_ARG(Text, ...) |
| #elif gcdHAS_ELLIPSIS |
| #if gcdEMPTY_HEADER_FOOTER |
| # define gcmHEADER_ARG(Text, ...) |
| #else |
| # define gcmHEADER_ARG(Text, ...) \ |
| gctINT8 __user__ = 1; \ |
| gctINT8_PTR __user_ptr__ = &__user__; \ |
| gcmSTACK_PUSH(__user_ptr__, __FUNCTION__, __LINE__, Text, __VA_ARGS__); \ |
| gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \ |
| gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__) |
| #endif |
| #else |
| gcmINLINE static void |
| __dummy_header_arg( |
| IN gctCONST_STRING Text, |
| ... |
| ) |
| { |
| } |
| # define gcmHEADER_ARG __dummy_header_arg |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| # define gcmFOOTER() |
| #elif gcdEMPTY_HEADER_FOOTER |
| # define gcmFOOTER() |
| #elif gcdHAS_ELLIPSIS |
| # define gcmFOOTER() \ |
| gcmSTACK_POP(__user_ptr__, __FUNCTION__); \ |
| gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d): status=%d(%s)", \ |
| __FUNCTION__, __LINE__, \ |
| status, gcoOS_DebugStatus2Name(status)); \ |
| *__user_ptr__ -= 1 |
| #else |
| gcmINLINE static void |
| __dummy_footer(void) |
| { |
| } |
| # define gcmFOOTER __dummy_footer |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmFOOTER_NO() |
| #elif gcdEMPTY_HEADER_FOOTER |
| # define gcmFOOTER_NO() |
| #elif gcdHAS_ELLIPSIS |
| #define gcmFOOTER_NO() \ |
| gcmSTACK_POP(__user_ptr__, __FUNCTION__); \ |
| gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d)", __FUNCTION__, __LINE__); \ |
| *__user_ptr__ -= 1 |
| #else |
| gcmINLINE static void |
| __dummy_footer_no(void) |
| { |
| } |
| # define gcmFOOTER_NO __dummy_footer_no |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmFOOTER_KILL() |
| #elif gcdEMPTY_HEADER_FOOTER |
| # define gcmFOOTER_KILL() |
| #elif gcdHAS_ELLIPSIS |
| #define gcmFOOTER_KILL() \ |
| gcmSTACK_POP(__user_ptr__, __FUNCTION__); \ |
| gcmBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d)", __FUNCTION__, __LINE__); \ |
| *__user_ptr__ -= 1 |
| #else |
| gcmINLINE static void |
| __dummy_footer_kill(void) |
| { |
| } |
| # define gcmFOOTER_KILL __dummy_footer_kill |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| # define gcmFOOTER_ARG(Text, ...) |
| #elif gcdHAS_ELLIPSIS |
| #if gcdEMPTY_HEADER_FOOTER |
| # define gcmFOOTER_ARG(Text, ...) |
| #else |
| # define gcmFOOTER_ARG(Text, ...) \ |
| gcmSTACK_POP(__user_ptr__, __FUNCTION__); \ |
| gcmBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \ |
| gcmTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__); \ |
| *__user_ptr__ -= 1 |
| #endif |
| #else |
| gcmINLINE static void |
| __dummy_footer_arg( |
| IN gctCONST_STRING Text, |
| ... |
| ) |
| { |
| } |
| # define gcmFOOTER_ARG __dummy_footer_arg |
| #endif |
| |
| #endif /* gcdENABLE_PROFILING */ |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmkHEADER() |
| #elif gcdHAS_ELLIPSIS |
| #define gcmkHEADER() \ |
| gctINT8 __kernel__ = 1; \ |
| gctINT8_PTR __kernel_ptr__ = &__kernel__; \ |
| gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "++%s(%d)", __FUNCTION__, __LINE__) |
| #else |
| gcmINLINE static void |
| __dummy_kheader(void) |
| { |
| } |
| # define gcmkHEADER __dummy_kheader |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| # define gcmkHEADER_ARG(Text, ...) |
| #elif gcdHAS_ELLIPSIS |
| # define gcmkHEADER_ARG(Text, ...) \ |
| gctINT8 __kernel__ = 1; \ |
| gctINT8_PTR __kernel_ptr__ = &__kernel__; \ |
| gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \ |
| gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "++%s(%d): " Text, __FUNCTION__, __LINE__, __VA_ARGS__) |
| #else |
| gcmINLINE static void |
| __dummy_kheader_arg( |
| IN gctCONST_STRING Text, |
| ... |
| ) |
| { |
| } |
| # define gcmkHEADER_ARG __dummy_kheader_arg |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmkFOOTER() |
| #elif gcdHAS_ELLIPSIS |
| #define gcmkFOOTER() \ |
| gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, status); \ |
| gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d): status=%d(%s)", \ |
| __FUNCTION__, __LINE__, status, gckOS_DebugStatus2Name(status)); \ |
| *__kernel_ptr__ -= 1 |
| #else |
| gcmINLINE static void |
| __dummy_kfooter(void) |
| { |
| } |
| # define gcmkFOOTER __dummy_kfooter |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| #define gcmkFOOTER_NO() |
| #elif gcdHAS_ELLIPSIS |
| #define gcmkFOOTER_NO() \ |
| gcmkBINARY_TRACE(__FUNCTION__, __LINE__, gcvNULL, gcvNULL); \ |
| gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d)", __FUNCTION__, __LINE__); \ |
| *__kernel_ptr__ -= 1 |
| #else |
| gcmINLINE static void |
| __dummy_kfooter_no(void) |
| { |
| } |
| # define gcmkFOOTER_NO __dummy_kfooter_no |
| #endif |
| |
| #ifdef gcdFSL_REL_BUILD |
| # define gcmkFOOTER_ARG(Text, ...) |
| #elif gcdHAS_ELLIPSIS |
| # define gcmkFOOTER_ARG(Text, ...) \ |
| gcmkBINARY_TRACE(__FUNCTION__, __LINE__, Text, __VA_ARGS__); \ |
| gcmkTRACE_ZONE(gcdHEADER_LEVEL, _GC_OBJ_ZONE, \ |
| "--%s(%d): " Text, \ |
| __FUNCTION__, __LINE__, __VA_ARGS__); \ |
| *__kernel_ptr__ -= 1 |
| #else |
| gcmINLINE static void |
| __dummy_kfooter_arg( |
| IN gctCONST_STRING Text, |
| ... |
| ) |
| { |
| } |
| # define gcmkFOOTER_ARG __dummy_kfooter_arg |
| #endif |
| |
| #define gcmOPT_VALUE(ptr) (((ptr) == gcvNULL) ? 0 : *(ptr)) |
| #define gcmOPT_VALUE_INDEX(ptr, index) (((ptr) == gcvNULL) ? 0 : ptr[index]) |
| #define gcmOPT_POINTER(ptr) (((ptr) == gcvNULL) ? gcvNULL : *(ptr)) |
| #define gcmOPT_STRING(ptr) (((ptr) == gcvNULL) ? "(nil)" : (ptr)) |
| |
| void |
| gckOS_Print( |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gckOS_PrintN( |
| IN gctUINT ArgumentSize, |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gckOS_CopyPrint( |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| void |
| gcoOS_Print( |
| IN gctCONST_STRING Message, |
| ... |
| ); |
| |
| #define gcmPRINT gcoOS_Print |
| #define gcmkPRINT gckOS_Print |
| #define gcmkPRINT_N gckOS_PrintN |
| |
| #if gcdPRINT_VERSION |
| # define gcmPRINT_VERSION() do { \ |
| _gcmPRINT_VERSION(gcm); \ |
| gcmSTACK_DUMP(); \ |
| } while (0) |
| # define gcmkPRINT_VERSION() _gcmPRINT_VERSION(gcmk) |
| # define _gcmPRINT_VERSION(prefix) \ |
| prefix##TRACE(gcvLEVEL_ERROR, \ |
| "Vivante HAL version %d.%d.%d build %d %s %s", \ |
| gcvVERSION_MAJOR, gcvVERSION_MINOR, gcvVERSION_PATCH, \ |
| gcvVERSION_BUILD, gcvVERSION_DATE, gcvVERSION_TIME ) |
| #else |
| # define gcmPRINT_VERSION() do { gcmSTACK_DUMP(); } while (gcvFALSE) |
| # define gcmkPRINT_VERSION() do { } while (gcvFALSE) |
| #endif |
| |
| typedef enum _gceDUMP_BUFFER |
| { |
| gceDUMP_BUFFER_CONTEXT, |
| gceDUMP_BUFFER_USER, |
| gceDUMP_BUFFER_KERNEL, |
| gceDUMP_BUFFER_LINK, |
| gceDUMP_BUFFER_WAITLINK, |
| gceDUMP_BUFFER_FROM_USER, |
| } |
| gceDUMP_BUFFER; |
| |
| void |
| gckOS_DumpBuffer( |
| IN gckOS Os, |
| IN gctPOINTER Buffer, |
| IN gctUINT Size, |
| IN gceDUMP_BUFFER Type, |
| IN gctBOOL CopyMessage |
| ); |
| |
| #define gcmkDUMPBUFFER gckOS_DumpBuffer |
| |
| #if gcdDUMP_COMMAND |
| # define gcmkDUMPCOMMAND(Os, Buffer, Size, Type, CopyMessage) \ |
| gcmkDUMPBUFFER(Os, Buffer, Size, Type, CopyMessage) |
| #else |
| # define gcmkDUMPCOMMAND(Os, Buffer, Size, Type, CopyMessage) |
| #endif |
| |
| #if gcmIS_DEBUG(gcdDEBUG_CODE) |
| |
| void |
| gckOS_DebugFlush( |
| gctCONST_STRING CallerName, |
| gctUINT LineNumber, |
| gctUINT32 DmaAddress |
| ); |
| |
| # define gcmkDEBUGFLUSH(DmaAddress) \ |
| gckOS_DebugFlush(__FUNCTION__, __LINE__, DmaAddress) |
| #else |
| # define gcmkDEBUGFLUSH(DmaAddress) |
| #endif |
| |
| /******************************************************************************* |
| ** |
| ** gcmDUMP_FRAMERATE |
| ** |
| ** Print average frame rate |
| ** |
| */ |
| #if gcdDUMP_FRAMERATE |
| gceSTATUS |
| gcfDumpFrameRate( |
| void |
| ); |
| # define gcmDUMP_FRAMERATE gcfDumpFrameRate |
| #elif gcdHAS_ELLIPSIS |
| # define gcmDUMP_FRAMERATE(...) |
| #else |
| gcmINLINE static void |
| __dummy_dump_frame_rate( |
| void |
| ) |
| { |
| } |
| # define gcmDUMP_FRAMERATE __dummy_dump_frame_rate |
| #endif |
| |
| |
| /******************************************************************************* |
| ** |
| ** gcmDUMP |
| ** |
| ** Print a dump message. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** gctSTRING Message. |
| ** |
| ** ... Optional arguments. |
| */ |
| #if gcdDUMP |
| gceSTATUS |
| gcfDump( |
| IN gcoOS Os, |
| IN gctCONST_STRING String, |
| ... |
| ); |
| # define gcmDUMP gcfDump |
| #elif gcdHAS_ELLIPSIS |
| # define gcmDUMP(...) |
| #else |
| gcmINLINE static void |
| __dummy_dump( |
| IN gcoOS Os, |
| IN gctCONST_STRING Message, |
| ... |
| ) |
| { |
| } |
| # define gcmDUMP __dummy_dump |
| #endif |
| |
| /******************************************************************************* |
| ** |
| ** gcmDUMP_DATA |
| ** |
| ** Add data to the dump. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** gctSTRING Tag |
| ** Tag for dump. |
| ** |
| ** gctPOINTER Logical |
| ** Logical address of buffer. |
| ** |
| ** gctSIZE_T Bytes |
| ** Number of bytes. |
| */ |
| |
| #if gcdDUMP || gcdDUMP_COMMAND |
| gceSTATUS |
| gcfDumpData( |
| IN gcoOS Os, |
| IN gctSTRING Tag, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes |
| ); |
| # define gcmDUMP_DATA gcfDumpData |
| #elif gcdHAS_ELLIPSIS |
| # define gcmDUMP_DATA(...) |
| #else |
| gcmINLINE static void |
| __dummy_dump_data( |
| IN gcoOS Os, |
| IN gctSTRING Tag, |
| IN gctPOINTER Logical, |
| IN gctSIZE_T Bytes |
| ) |
| { |
| } |
| # define gcmDUMP_DATA __dummy_dump_data |
| #endif |
| |
| /******************************************************************************* |
| ** |
| ** gcmDUMP_BUFFER |
| ** |
| ** Print a buffer to the dump. |
| ** |
| ** ARGUMENTS: |
| ** |
| ** gctSTRING Tag |
| ** Tag for dump. |
| ** |
| ** gctUINT32 Physical |
| ** Physical address of buffer. |
| ** |
| ** gctPOINTER Logical |
| ** Logical address of buffer. |
| ** |
| ** gctUINT32 Offset |
| ** Offset into buffer. |
| ** |
| ** gctSIZE_T Bytes |
| ** Number of bytes. |
| */ |
| |
| #if gcdDUMP || gcdDUMP_COMMAND |
| gceSTATUS |
| gcfDumpBuffer( |
| IN gcoOS Os, |
| IN gctSTRING Tag, |
| IN gctUINT32 Physical, |
| IN gctPOINTER Logical, |
| IN gctUINT32 Offset, |
| IN gctSIZE_T Bytes |
| ); |
| # define gcmDUMP_BUFFER gcfDumpBuffer |
| #elif gcdHAS_ELLIPSIS |
| # define gcmDUMP_BUFFER(...) |
| #else |
| gcmINLINE static void |
| __dummy_dump_buffer( |
| IN gcoOS Os, |
| IN gctSTRING Tag, |