TIM-VX/unified-tina/inc/HAL/gc_hal_engine.h

2070 lines
64 KiB
C

/****************************************************************************
*
* Copyright (c) 2005 - 2023 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_engine_h_
#define __gc_hal_engine_h_
#include "gc_hal_types.h"
#include "gc_hal_enum.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _gcsSURF_RESOLVE_ARGS {
gceHAL_ARG_VERSION version;
union _gcsSURF_RESOLVE_ARGS_UNION {
struct _gcsSURF_RESOLVE_ARG_v2 {
gctBOOL yInverted;
gctBOOL directCopy;
gctBOOL resample;
gctBOOL bUploadTex; /* used for upload tex.*/
gctBOOL bSwap; /* used for swap.*/
gctBOOL visualizeDepth; /* convert depth to visible color */
gcsPOINT srcOrigin;
gcsPOINT dstOrigin;
gcsPOINT rectSize;
gctUINT numSlices;
gceENGINE engine; /* 3DBlit engine */
gctBOOL gpuOnly; /* need only try HW path.*/
gctBOOL dump; /* need dump for verify */
gctBOOL srcSwizzle; /* src surface format swizzle information */
gctBOOL dstSwizzle; /* dst surface format swizzle information */
gctBOOL srcCompressed; /* src compressed format*/
gctBOOL dstCompressed; /* dst compressed format*/
gctUINT blitToSelf;
gctUINT rotate; /* rotate of 3DBlt engine */
} v2;
} uArgs;
} gcsSURF_RESOLVE_ARGS;
typedef struct _gscBUFFER_VIEW {
gctUINT32 cmd;
} gcsBUFFER_VIEW, *gcsBUFFER_VIEW_PTR;
typedef struct _gcsIMAGE_VIEW {
gctUINT32 cmd;
} gcsIMAGE_VIEW, *gcsIMAGE_VIEW_PTR;
#if gcdENABLE_3D
/******************************************************************************
***************************** Object Declarations ****************************
******************************************************************************/
typedef struct _gcoSTREAM *gcoSTREAM;
typedef struct _gcoVERTEX *gcoVERTEX;
typedef struct _gcoTEXTURE *gcoTEXTURE;
typedef struct _gcoINDEX *gcoINDEX;
typedef struct _gcsVERTEX_ATTRIBUTES *gcsVERTEX_ATTRIBUTES_PTR;
typedef struct _gcoVERTEXARRAY *gcoVERTEXARRAY;
typedef struct _gcoBUFOBJ *gcoBUFOBJ;
# define gcdATTRIBUTE_COUNT 32
# define gcdVERTEXARRAY_POOL_CAPACITY 32
# define gcdSTREAM_POOL_SIZE 128
# define gcdSTREAM_GROUP_SIZE 16
# define gcdSTREAM_SIGNAL_NUM \
((gcdSTREAM_POOL_SIZE + gcdSTREAM_GROUP_SIZE - 1) / gcdSTREAM_GROUP_SIZE)
# define gcvPORGRAM_STAGE_GPIPE (gcvPROGRAM_STAGE_VERTEX_BIT | \
gcvPROGRAM_STAGE_TCS_BIT | \
gcvPROGRAM_STAGE_TES_BIT | \
gcvPROGRAM_STAGE_GEOMETRY_BIT)
/******************************************************************************
******************************** gcoHAL Object *******************************
******************************************************************************/
gceSTATUS
gcoHAL_QueryShaderCaps(IN gcoHAL Hal,
OUT gctUINT *UnifiedUniforms,
OUT gctUINT *VertUniforms,
OUT gctUINT *FragUniforms,
OUT gctUINT *Varyings,
OUT gctUINT *ShaderCoreCount,
OUT gctUINT *ThreadCount,
OUT gctUINT *VertInstructionCount,
OUT gctUINT *FragInstructionCount);
gceSTATUS
gcoHAL_QuerySamplerBase(IN gcoHAL Hal,
OUT gctUINT32 *VertexCount,
OUT gctINT_PTR VertexBase,
OUT gctUINT32 *FragmentCount,
OUT gctINT_PTR FragmentBase);
gceSTATUS
gcoHAL_QueryUniformBase(IN gcoHAL Hal, OUT gctUINT32 *VertexBase,
OUT gctUINT32 *FragmentBase);
gceSTATUS
gcoHAL_QueryTextureCaps(IN gcoHAL Hal,
OUT gctUINT *MaxWidth,
OUT gctUINT *MaxHeight,
OUT gctUINT *MaxDepth,
OUT gctBOOL *Cubic,
OUT gctBOOL *NonPowerOfTwo,
OUT gctUINT *VertexSamplers,
OUT gctUINT *PixelSamplers);
gceSTATUS
gcoHAL_QueryTextureMaxAniso(IN gcoHAL Hal, OUT gctUINT *MaxAnisoValue);
gceSTATUS
gcoHAL_QueryStreamCaps(IN gcoHAL Hal,
OUT gctUINT32 *MaxAttributes,
OUT gctUINT32 *MaxStreamStride,
OUT gctUINT32 *NumberOfStreams,
OUT gctUINT32 *Alignment,
OUT gctUINT32 *MaxAttribOffset);
/******************************************************************************
******************************** gcoSURF Object ******************************
******************************************************************************/
/*----------------------------------------------------------------------------*/
/*--------------------------------- gcoSURF 3D --------------------------------*/
typedef struct _gcsSURF_BLIT_ARGS {
gcoSURF srcSurface;
gctINT srcX, srcY, srcZ;
gctINT srcWidth, srcHeight, srcDepth;
gcoSURF dstSurface;
gctINT dstX, dstY, dstZ;
gctINT dstWidth, dstHeight, dstDepth;
gctBOOL xReverse;
gctBOOL yReverse;
gctBOOL scissorTest;
gcsRECT scissor;
gctUINT flags;
gctUINT srcNumSlice, dstNumSlice;
gctBOOL needDecode;
gctBOOL readSwap;
gctBOOL writeSwap;
} gcsSURF_BLIT_ARGS;
typedef struct _gcsSURF_CLEAR_ARGS {
/*
** Color to fill the color portion of the framebuffer when clear
** is called.
*/
struct {
gcuVALUE r;
gcuVALUE g;
gcuVALUE b;
gcuVALUE a;
/* Color has multiple value type so we must specify it. */
gceVALUE_TYPE valueType;
} color;
gcuVALUE depth;
gctUINT stencil;
gctUINT8 stencilMask; /* stencil bit-wise mask */
gctBOOL depthMask; /* Depth Write Mask */
gctUINT8 colorMask; /* 4-bit channel Mask: ABGR:MSB->LSB */
gcsRECT_PTR clearRect; /* NULL means full clear */
gceCLEAR flags; /* clear flags */
gctUINT32 offset; /* Offset in surface to cube/array/3D, obsolete in v2 version */
} gcsSURF_CLEAR_ARGS, *gcsSURF_CLEAR_ARGS_PTR;
typedef struct _gscSURF_BLITDRAW_BLIT {
gcoSURF srcSurface;
gcoSURF dstSurface;
gcsRECT srcRect;
gcsRECT dstRect;
gceTEXTURE_FILTER filterMode;
gctBOOL xReverse;
gctBOOL yReverse;
gctBOOL scissorEnabled;
gcsRECT scissor;
} gscSURF_BLITDRAW_BLIT;
typedef gceSTATUS (*gctSPLIT_DRAW_FUNC_PTR)(IN gctPOINTER gc,
IN gctPOINTER instantDraw,
IN gctPOINTER splitDrawInfo);
typedef struct _gcsSPLIT_DRAW_INFO {
gceSPLIT_DRAW_TYPE splitDrawType;
gctSPLIT_DRAW_FUNC_PTR splitDrawFunc;
union _gcsSPLIT_DRAW_UNION {
/* This path will split many draw.*/
struct __gcsSPLIT_DRAW_INFO_TCS {
gctPOINTER indexPtr;
gctUINT indexPerPatch;
} info_tcs;
/* This path split into two draw at most.
** es11 path follow the old code, es30 path
** add more info parameter to record
*/
struct __gcsSPLIT_DRAW_INFO_INDEX_FETCH {
gctSIZE_T instanceCount;
gctSIZE_T splitCount;
gcePRIMITIVE splitPrimMode;
gctSIZE_T splitPrimCount;
} info_index_fetch;
} u;
} gcsSPLIT_DRAW_INFO, *gcsSPLIT_DRAW_INFO_PTR;
typedef struct _gscSURF_BLITDRAW_ARGS {
/* always the fist member */
gceHAL_ARG_VERSION version;
union _gcsSURF_BLITDRAW_ARGS_UNION {
struct _gscSURF_BLITDRAW_ARG_v1 {
/* Whether it's clear or blit operation, can be extended. */
gceBLIT_TYPE type;
union _gscSURF_BLITDRAW_UNION {
gscSURF_BLITDRAW_BLIT blit;
struct _gscSURF_BLITDRAW_CLEAR {
gcsSURF_CLEAR_ARGS clearArgs;
gcoSURF rtSurface;
gcoSURF dsSurface;
} clear;
} u;
} v1;
} uArgs;
} gcsSURF_BLITDRAW_ARGS;
typedef struct _gcsSURF_BLITBLT_ARGS {
gctCONST_POINTER buf;
gceSURF_FORMAT format;
gctUINT32 stride;
gcoSURF dstSurf;
gcsPOINT dstOrigin;
gcsPOINT rectSize;
gctUINT32 dstOffset;
} gcsSURF_BLITBLT_ARGS;
/* CPU Blit with format (including linear <-> tile) conversion*/
gceSTATUS
gcoSURF_BlitCPU(gcsSURF_BLIT_ARGS *args);
/* Copy a rectangular area with format conversion. */
gceSTATUS
gcoSURF_CopyPixels(IN gcsSURF_VIEW *SrcView,
IN gcsSURF_VIEW *DstView,
IN gcsSURF_RESOLVE_ARGS *Args);
/* Clear surface function. */
gceSTATUS
gcoSURF_Clear(IN gcsSURF_VIEW *SurfView,
IN gcsSURF_CLEAR_ARGS_PTR ClearArgs);
/* Preserve pixels from source. */
gceSTATUS
gcoSURF_Preserve(IN gcoSURF SrcSurf,
IN gcoSURF DstSurf,
IN gcsRECT_PTR MaskRect);
/* TO BE REMOVED */
gceSTATUS
depr_gcoSURF_Resolve(IN gcoSURF SrcSurface,
IN gcoSURF DestSurface,
IN gctADDRESS DestAddress,
IN gctPOINTER DestBits,
IN gctINT DestStride,
IN gceSURF_TYPE DestType,
IN gceSURF_FORMAT DestFormat,
IN gctUINT DestWidth,
IN gctUINT DestHeight);
gceSTATUS
depr_gcoSURF_ResolveRect(IN gcoSURF SrcSurface,
IN gcoSURF DstSurface,
IN gctADDRESS DstAddress,
IN gctPOINTER DstBits,
IN gctINT DstStride,
IN gceSURF_TYPE DstType,
IN gceSURF_FORMAT DstFormat,
IN gctUINT DstWidth,
IN gctUINT DstHeight,
IN gcsPOINT_PTR SrcOrigin,
IN gcsPOINT_PTR gcoSURF,
IN gcsPOINT_PTR RectSize);
/* Resample surface. */
gceSTATUS
gcoSURF_Resample(IN gcoSURF SrcSurf,
IN gcoSURF DstSurf,
IN gctBOOL sRGBDecode);
/* Resolve rectangular area of a surface. */
gceSTATUS
gcoSURF_ResolveRect(IN gcsSURF_VIEW *SrcView,
IN gcsSURF_VIEW *DstView,
IN gcsSURF_RESOLVE_ARGS *Args);
gceSTATUS
gcoSURF_GetResolveAlignment(IN gcoSURF Surface,
OUT gctUINT *originX,
OUT gctUINT *originY,
OUT gctUINT *sizeX,
OUT gctUINT *sizeY);
gceSTATUS
gcoSURF_IsHWResolveable(IN gcoSURF SrcSurf,
IN gcoSURF DstSurf,
IN gcsPOINT_PTR SrcOrigin,
IN gcsPOINT_PTR DstOrigin,
IN gcsPOINT_PTR RectSize);
/* Set surface resolvability. */
gceSTATUS
gcoSURF_SetResolvability(IN gcoSURF Surface, IN gctBOOL Resolvable);
gceSTATUS
gcoSURF_IsRenderable(IN gcoSURF Surface);
gceSTATUS
gcoSURF_IsFormatRenderableAsRT(IN gcoSURF Surface);
gceSTATUS
gcoBUFOBJ_SetBindingTarget(IN gcoHAL Hal, IN gctUINT TargetIndex, IN gcoBUFOBJ BufObj);
gceSTATUS
gcoBUFOBJ_GetFence(IN gcoBUFOBJ BufObj, IN gceFENCE_TYPE Type);
gceSTATUS
gcoBUFOBJ_WaitFence(IN gcoBUFOBJ BufObj, IN gceFENCE_TYPE Type);
gceSTATUS
gcoBUFOBJ_IsFenceEnabled(IN gcoBUFOBJ BufObj);
gceSTATUS
gcoSURF_GetFence(IN gcoSURF Surface, IN gceFENCE_TYPE Type);
gceSTATUS
gcoSURF_WaitFence(IN gcoSURF Surface);
gceSTATUS
gcoSTREAM_GetFence(IN gcoSTREAM stream);
gceSTATUS
gcoSTREAM_WaitFence(IN gcoSTREAM stream);
gceSTATUS
gcoINDEX_GetFence(IN gcoINDEX Index);
gceSTATUS
gcoINDEX_WaitFence(IN gcoINDEX Index, IN gceFENCE_TYPE Type);
gceSTATUS
gcoSURF_DrawBlit(gcsSURF_VIEW *SrcView,
gcsSURF_VIEW *DstView,
gscSURF_BLITDRAW_BLIT *Args);
gceSTATUS
gcoSURF_DrawBlitDepth(gcsSURF_VIEW *SrcView,
gcsSURF_VIEW *DstView,
gscSURF_BLITDRAW_BLIT *Args);
gceSTATUS
gcoSURF_ComputeBlit(gcsSURF_VIEW *SrcView,
gcsSURF_VIEW *DstView,
gscSURF_BLITDRAW_BLIT *Args);
/******************************************************************************
******************************* gcoINDEX Object ******************************
******************************************************************************/
/* Construct a new gcoINDEX object. */
gceSTATUS
gcoINDEX_Construct(IN gcoHAL Hal, OUT gcoINDEX *Index);
/* Destroy a gcoINDEX object. */
gceSTATUS
gcoINDEX_Destroy(IN gcoINDEX Index);
/* Lock index in memory. */
gceSTATUS
gcoINDEX_Lock(IN gcoINDEX Index,
OUT gctADDRESS *Address,
OUT gctPOINTER *Memory);
/* Unlock index that was previously locked with gcoINDEX_Lock. */
gceSTATUS
gcoINDEX_Unlock(IN gcoINDEX Index);
/* Upload index data into the memory. */
gceSTATUS
gcoINDEX_Load(IN gcoINDEX Index,
IN gceINDEX_TYPE IndexType,
IN gctUINT32 IndexCount,
IN gctPOINTER IndexBuffer);
/* Bind an index object to the hardware. */
gceSTATUS
gcoINDEX_Bind(IN gcoINDEX Index, IN gceINDEX_TYPE Type);
/* Bind an index object to the hardware. */
gceSTATUS
gcoINDEX_BindOffset(IN gcoINDEX Index,
IN gceINDEX_TYPE Type,
IN gctSIZE_T Offset);
/* Free existing index buffer. */
gceSTATUS
gcoINDEX_Free(IN gcoINDEX Index);
/* Upload data into an index buffer. */
gceSTATUS
gcoINDEX_Upload(IN gcoINDEX Index,
IN gctCONST_POINTER Buffer,
IN gctSIZE_T Bytes);
/* Upload data into an index buffer starting at an offset. */
gceSTATUS
gcoINDEX_UploadOffset(IN gcoINDEX Index,
IN gctSIZE_T Offset,
IN gctCONST_POINTER Buffer,
IN gctSIZE_T Bytes);
/*Merge index2 to index1 from 0, index2 must subset of inex1*/
gceSTATUS
gcoINDEX_Merge(IN gcoINDEX Index1, IN gcoINDEX Index2);
/*check if index buffer is enough for this draw*/
gctBOOL
gcoINDEX_CheckRange(IN gcoINDEX Index,
IN gceINDEX_TYPE Type,
IN gctINT Count,
IN gctUINT32 Indices);
/* Query the index capabilities. */
gceSTATUS
gcoINDEX_QueryCaps(OUT gctBOOL *Index8,
OUT gctBOOL *Index16,
OUT gctBOOL *Index32,
OUT gctUINT *MaxIndex);
/* Determine the index range in the current index buffer. */
gceSTATUS
gcoINDEX_GetIndexRange(IN gcoINDEX Index,
IN gceINDEX_TYPE Type,
IN gctSIZE_T Offset,
IN gctUINT32 Count,
OUT gctUINT32 *MinimumIndex,
OUT gctUINT32 *MaximumIndex);
/* Dynamic buffer management. */
gceSTATUS
gcoINDEX_SetDynamic(IN gcoINDEX Index,
IN gctSIZE_T Bytes,
IN gctUINT Buffers);
gceSTATUS
gcoCLHardware_Construct(void);
/******************************************************************************
********************************* gco3D Object *******************************
******************************************************************************/
/* Construct a new gco3D object. */
gceSTATUS
gco3D_Construct(IN gcoHAL Hal, IN gctBOOL Robust, OUT gco3D *Engine);
/* Destroy an gco3D object. */
gceSTATUS
gco3D_Destroy(IN gco3D Engine);
/* Set 3D API type. */
gceSTATUS
gco3D_SetAPI(IN gco3D Engine, IN gceAPI ApiType);
/* Get 3D API type. */
gceSTATUS
gco3D_GetAPI(IN gco3D Engine, OUT gceAPI *ApiType);
gceSTATUS
gco3D_SetTarget(IN gco3D Engine,
IN gctUINT32 TargetIndex,
IN gcsSURF_VIEW *SurfView,
IN gctUINT32 LayerIndex);
gceSTATUS
gco3D_UnsetTarget(IN gco3D Engine, IN gctUINT32 TargetIndex, IN gcoSURF Surface);
gceSTATUS
gco3D_SetPSOutputMapping(IN gco3D Engine, IN gctINT32 *psOutputMapping);
gceSTATUS
gco3D_SetRenderLayered(IN gco3D Engine, IN gctBOOL Enable, IN gctUINT MaxLayers);
gceSTATUS
gco3D_SetShaderLayered(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_IsProgramSwitched(IN gco3D Engine);
/* Set depth buffer. */
gceSTATUS
gco3D_SetDepth(IN gco3D Engine, IN gcsSURF_VIEW *SurfView);
/* Unset depth buffer. */
gceSTATUS
gco3D_UnsetDepth(IN gco3D Engine, IN gcoSURF Surface);
/* Set viewport. */
gceSTATUS
gco3D_SetViewport(IN gco3D Engine,
IN gctINT32 Left,
IN gctINT32 Top,
IN gctINT32 Right,
IN gctINT32 Bottom);
/* Set scissors. */
gceSTATUS
gco3D_SetScissors(IN gco3D Engine,
IN gctINT32 Left,
IN gctINT32 Top,
IN gctINT32 Right,
IN gctINT32 Bottom);
/* Set clear color. */
gceSTATUS
gco3D_SetClearColor(IN gco3D Engine,
IN gctUINT8 Red,
IN gctUINT8 Green,
IN gctUINT8 Blue,
IN gctUINT8 Alpha);
/* Set fixed point clear color. */
gceSTATUS
gco3D_SetClearColorX(IN gco3D Engine,
IN gctFIXED_POINT Red,
IN gctFIXED_POINT Green,
IN gctFIXED_POINT Blue,
IN gctFIXED_POINT Alpha);
/* Set floating point clear color. */
gceSTATUS
gco3D_SetClearColorF(IN gco3D Engine,
IN gctFLOAT Red,
IN gctFLOAT Green,
IN gctFLOAT Blue,
IN gctFLOAT Alpha);
/* Set fixed point clear depth. */
gceSTATUS
gco3D_SetClearDepthX(IN gco3D Engine, IN gctFIXED_POINT Depth);
/* Set floating point clear depth. */
gceSTATUS
gco3D_SetClearDepthF(IN gco3D Engine, IN gctFLOAT Depth);
/* Set clear stencil. */
gceSTATUS
gco3D_SetClearStencil(IN gco3D Engine, IN gctUINT32 Stencil);
/* Set shading mode. */
gceSTATUS
gco3D_SetShading(IN gco3D Engine, IN gceSHADING Shading);
/* Set blending mode. */
gceSTATUS
gco3D_EnableBlending(IN gco3D Engine, IN gctBOOL Enable);
/* Set blending function. */
gceSTATUS
gco3D_SetBlendFunction(IN gco3D Engine,
IN gceBLEND_UNIT Unit,
IN gceBLEND_FUNCTION FunctionRGB,
IN gceBLEND_FUNCTION FunctionAlpha);
/* Set blending mode. */
gceSTATUS
gco3D_SetBlendMode(IN gco3D Engine, IN gceBLEND_MODE ModeRGB, IN gceBLEND_MODE ModeAlpha);
/* Set blending mode for separate rt control */
gceSTATUS
gco3D_EnableBlendingIndexed(IN gco3D Engine, IN gctUINT Index, IN gctBOOL Enable);
/* Set blending function for separate rt control */
gceSTATUS
gco3D_SetBlendFunctionIndexed(IN gco3D Engine,
IN gctUINT Index,
IN gceBLEND_UNIT Unit,
IN gceBLEND_FUNCTION FunctionRGB,
IN gceBLEND_FUNCTION FunctionAlpha);
/* Set blending mode for separate rt control*/
gceSTATUS
gco3D_SetBlendModeIndexed(IN gco3D Engine,
IN gctUINT Index,
IN gceBLEND_MODE ModeRGB,
IN gceBLEND_MODE ModeAlpha);
/* Set blending color. */
gceSTATUS
gco3D_SetBlendColor(IN gco3D Engine,
IN gctUINT Red,
IN gctUINT Green,
IN gctUINT Blue,
IN gctUINT Alpha);
/* Set fixed point blending color. */
gceSTATUS
gco3D_SetBlendColorX(IN gco3D Engine,
IN gctFIXED_POINT Red,
IN gctFIXED_POINT Green,
IN gctFIXED_POINT Blue,
IN gctFIXED_POINT Alpha);
/* Set floating point blending color. */
gceSTATUS
gco3D_SetBlendColorF(IN gco3D Engine,
IN gctFLOAT Red,
IN gctFLOAT Green,
IN gctFLOAT Blue,
IN gctFLOAT Alpha);
/* Set culling mode. */
gceSTATUS
gco3D_SetCulling(IN gco3D Engine, IN gceCULL Mode);
/* Enable point size */
gceSTATUS
gco3D_SetPointSizeEnable(IN gco3D Engine, IN gctBOOL Enable);
/* Set point sprite */
gceSTATUS
gco3D_SetPointSprite(IN gco3D Engine, IN gctBOOL Enable);
/* Enable/Disable primitive-id. */
gceSTATUS
gco3D_SetPrimitiveIdEnable(IN gco3D Engine, IN gctBOOL Enable);
/* Set fill mode. */
gceSTATUS
gco3D_SetFill(IN gco3D Engine, IN gceFILL Mode);
/* Set depth compare mode. */
gceSTATUS
gco3D_SetDepthCompare(IN gco3D Engine, IN gceCOMPARE Compare);
/* Enable depth writing. */
gceSTATUS
gco3D_EnableDepthWrite(IN gco3D Engine, IN gctBOOL Enable);
/* Set depth mode. */
gceSTATUS
gco3D_SetDepthMode(IN gco3D Engine, IN gceDEPTH_MODE Mode);
/* Set depth range. */
gceSTATUS
gco3D_SetDepthRangeX(IN gco3D Engine,
IN gceDEPTH_MODE Mode,
IN gctFIXED_POINT Near,
IN gctFIXED_POINT Far);
/* Set depth range. */
gceSTATUS
gco3D_SetDepthRangeF(IN gco3D Engine, IN gceDEPTH_MODE Mode,
IN gctFLOAT Near, IN gctFLOAT Far);
/* Set last pixel enable */
gceSTATUS
gco3D_SetLastPixelEnable(IN gco3D Engine, IN gctBOOL Enable);
/* Set depth Bias and Scale */
gceSTATUS
gco3D_SetDepthScaleBiasX(IN gco3D Engine,
IN gctFIXED_POINT DepthScale,
IN gctFIXED_POINT DepthBias);
gceSTATUS
gco3D_SetDepthScaleBiasF(IN gco3D Engine, IN gctFLOAT DepthScale, IN gctFLOAT DepthBias);
/* Set depth near and far clipping plane. */
gceSTATUS
gco3D_SetDepthPlaneF(IN gco3D Engine, IN gctFLOAT Near, IN gctFLOAT Far);
/* Enable or disable dithering. */
gceSTATUS
gco3D_EnableDither(IN gco3D Engine, IN gctBOOL Enable);
/* Set color write enable bits. */
gceSTATUS
gco3D_SetColorWrite(IN gco3D Engine, IN gctUINT8 Enable);
/* Set color write enable bits for separate rt control */
gceSTATUS
gco3D_SetColorWriteIndexed(IN gco3D Engine, IN gctUINT Index, IN gctUINT8 Enable);
/* Enable or disable early depth. */
gceSTATUS
gco3D_SetEarlyDepth(IN gco3D Engine, IN gctBOOL Enable);
/* Deprecated: Enable or disable all early depth operations. */
gceSTATUS
gco3D_SetAllEarlyDepthModes(IN gco3D Engine, IN gctBOOL Disable);
gceSTATUS
gco3D_SetEarlyDepthFromAPP(IN gco3D Engine, IN gctBOOL EarlyDepthFromAPP);
gceSTATUS
gco3D_SetRADepthWrite(IN gco3D Engine, IN gctBOOL Disable,
IN gctBOOL psReadZ, IN gctBOOL psReadW);
gceSTATUS
gco3D_SetPatchVertices(IN gco3D Engine, IN gctINT PatchVertices);
/* Switch dynamic early mode */
gceSTATUS
gco3D_SwitchDynamicEarlyDepthMode(IN gco3D Engine);
/* Set dynamic early mode */
gceSTATUS
gco3D_DisableDynamicEarlyDepthMode(IN gco3D Engine, IN gctBOOL Disable);
/* Enable or disable depth-only mode. */
gceSTATUS
gco3D_SetDepthOnly(IN gco3D Engine, IN gctBOOL Enable);
typedef struct _gcsSTENCIL_INFO *gcsSTENCIL_INFO_PTR;
typedef struct _gcsSTENCIL_INFO {
gceSTENCIL_MODE mode;
gctUINT8 maskFront;
gctUINT8 maskBack;
gctUINT8 writeMaskFront;
gctUINT8 writeMaskBack;
gctUINT8 referenceFront;
gceCOMPARE compareFront;
gceSTENCIL_OPERATION passFront;
gceSTENCIL_OPERATION failFront;
gceSTENCIL_OPERATION depthFailFront;
gctUINT8 referenceBack;
gceCOMPARE compareBack;
gceSTENCIL_OPERATION passBack;
gceSTENCIL_OPERATION failBack;
gceSTENCIL_OPERATION depthFailBack;
} gcsSTENCIL_INFO;
/* Set stencil mode. */
gceSTATUS
gco3D_SetStencilMode(IN gco3D Engine, IN gceSTENCIL_MODE Mode);
/* Set stencil mask. */
gceSTATUS
gco3D_SetStencilMask(IN gco3D Engine, IN gctUINT8 Mask);
/* Set stencil back mask. */
gceSTATUS
gco3D_SetStencilMaskBack(IN gco3D Engine, IN gctUINT8 Mask);
/* Set stencil write mask. */
gceSTATUS
gco3D_SetStencilWriteMask(IN gco3D Engine, IN gctUINT8 Mask);
/* Set stencil back write mask. */
gceSTATUS
gco3D_SetStencilWriteMaskBack(IN gco3D Engine, IN gctUINT8 Mask);
/* Set stencil reference. */
gceSTATUS
gco3D_SetStencilReference(IN gco3D Engine,
IN gctUINT8 Reference,
IN gctBOOL Front);
/* Set stencil compare. */
gceSTATUS
gco3D_SetStencilCompare(IN gco3D Engine,
IN gceSTENCIL_WHERE Where,
IN gceCOMPARE Compare);
/* Set stencil operation on pass. */
gceSTATUS
gco3D_SetStencilPass(IN gco3D Engine,
IN gceSTENCIL_WHERE Where,
IN gceSTENCIL_OPERATION Operation);
/* Set stencil operation on fail. */
gceSTATUS
gco3D_SetStencilFail(IN gco3D Engine,
IN gceSTENCIL_WHERE Where,
IN gceSTENCIL_OPERATION Operation);
/* Set stencil operation on depth fail. */
gceSTATUS
gco3D_SetStencilDepthFail(IN gco3D Engine,
IN gceSTENCIL_WHERE Where,
IN gceSTENCIL_OPERATION Operation);
/* Set all stencil states in one blow. */
gceSTATUS
gco3D_SetStencilAll(IN gco3D Engine, IN gcsSTENCIL_INFO_PTR Info);
typedef struct _gcsALPHA_INFO *gcsALPHA_INFO_PTR;
typedef struct _gcsALPHA_INFO {
/* Alpha test states. */
gctBOOL test;
gceCOMPARE compare;
gctUINT8 reference;
gctFLOAT floatReference;
/* Alpha blending states. */
gctBOOL blend[gcdMAX_DRAW_BUFFERS];
gceBLEND_FUNCTION srcFuncColor[gcdMAX_DRAW_BUFFERS];
gceBLEND_FUNCTION srcFuncAlpha[gcdMAX_DRAW_BUFFERS];
gceBLEND_FUNCTION trgFuncColor[gcdMAX_DRAW_BUFFERS];
gceBLEND_FUNCTION trgFuncAlpha[gcdMAX_DRAW_BUFFERS];
gceBLEND_MODE modeColor[gcdMAX_DRAW_BUFFERS];
gceBLEND_MODE modeAlpha[gcdMAX_DRAW_BUFFERS];
gctUINT32 color;
gctBOOL anyBlendEnabled;
} gcsALPHA_INFO;
/* Enable or disable alpha test. */
gceSTATUS
gco3D_SetAlphaTest(IN gco3D Engine, IN gctBOOL Enable);
/* Set alpha test compare. */
gceSTATUS
gco3D_SetAlphaCompare(IN gco3D Engine, IN gceCOMPARE Compare);
/* Set alpha test reference in unsigned integer. */
gceSTATUS
gco3D_SetAlphaReference(IN gco3D Engine, IN gctUINT8 Reference,
IN gctFLOAT FloatReference);
/* Set alpha test reference in fixed point. */
gceSTATUS
gco3D_SetAlphaReferenceX(IN gco3D Engine, IN gctFIXED_POINT Reference);
/* Set alpha test reference in floating point. */
gceSTATUS
gco3D_SetAlphaReferenceF(IN gco3D Engine, IN gctFLOAT Reference);
#if gcdALPHA_KILL_IN_SHADER
gceSTATUS
gco3D_SetAlphaKill(IN gco3D Engine, IN gctBOOL AlphaKill,
IN gctBOOL ColorKill);
# endif
/* Enable/Disable anti-alias line. */
gceSTATUS
gco3D_SetAntiAliasLine(IN gco3D Engine, IN gctBOOL Enable);
/* Set texture slot for anti-alias line. */
gceSTATUS
gco3D_SetAALineTexSlot(IN gco3D Engine, IN gctUINT TexSlot);
/* Set anti-alias line width scale. */
gceSTATUS
gco3D_SetAALineWidth(IN gco3D Engine, IN gctFLOAT Width);
/* Draw a number of primitives. */
gceSTATUS
gco3D_DrawPrimitives(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctSIZE_T StartVertex,
IN gctSIZE_T PrimitiveCount);
gceSTATUS
gco3D_DrawIndirectPrimitives(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctBOOL DrawIndex,
IN gctINT BaseOffset,
IN gcoBUFOBJ BufObj);
gceSTATUS
gco3D_MultiDrawIndirectPrimitives(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctBOOL DrawIndex,
IN gctINT BaseOffset,
IN gctINT DrawCount,
IN gctINT Stride,
IN gcoBUFOBJ BufObj);
gceSTATUS
gco3D_DrawInstancedPrimitives(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctBOOL DrawIndex,
IN gctINT StartVertex,
IN gctSIZE_T StartIndex,
IN gctSIZE_T PrimitiveCount,
IN gctSIZE_T VertexCount,
IN gctSIZE_T InstanceCount);
gceSTATUS
gco3D_DrawNullPrimitives(IN gco3D Engine);
gceSTATUS
gco3D_DrawPrimitivesCount(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctINT *StartVertex,
IN gctSIZE_T *VertexCount,
IN gctSIZE_T PrimitiveCount);
/* Draw a number of primitives using offsets. */
gceSTATUS
gco3D_DrawPrimitivesOffset(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctINT32 StartOffset,
IN gctSIZE_T PrimitiveCount);
/* Draw a number of indexed primitives. */
gceSTATUS
gco3D_DrawIndexedPrimitives(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctSIZE_T BaseVertex,
IN gctSIZE_T StartIndex,
IN gctSIZE_T PrimitiveCount);
/* Draw a number of indexed primitives using offsets. */
gceSTATUS
gco3D_DrawIndexedPrimitivesOffset(IN gco3D Engine,
IN gcePRIMITIVE Type,
IN gctINT32 BaseOffset,
IN gctINT32 StartOffset,
IN gctSIZE_T PrimitiveCount);
/* Draw a element from pattern */
gceSTATUS
gco3D_DrawPattern(IN gco3D Engine, IN gcsFAST_FLUSH_PTR FastFlushInfo);
/* Enable or disable anti-aliasing. */
gceSTATUS
gco3D_SetAntiAlias(IN gco3D Engine, IN gctBOOL Enable);
/* Set msaa samples */
gceSTATUS
gco3D_SetSamples(IN gco3D Engine, IN gctUINT32 Samples);
/* Write data into the command buffer. */
gceSTATUS
gco3D_WriteBuffer(IN gco3D Engine, IN gctCONST_POINTER Data,
IN gctSIZE_T Bytes, IN gctBOOL Aligned);
/* Send sempahore and stall until sempahore is signalled. */
gceSTATUS
gco3D_Semaphore(IN gco3D Engine, IN gceWHERE From,
IN gceWHERE To, IN gceHOW How);
/* Explicitly flush pipeline */
gceSTATUS
gco3D_FlushPipe(IN gco3D Engine);
/* Explicitly flush shader L1 cache */
gceSTATUS
gco3D_FlushSHL1Cache(IN gco3D Engine);
/* Set the subpixels center. */
gceSTATUS
gco3D_SetCentroids(IN gco3D Engine, IN gctUINT32 Index, IN gctPOINTER Centroids);
/* query msaa sample coordinates */
gceSTATUS
gco3D_GetSampleCoords(IN gco3D Engine,
IN gctUINT32 SampleIndex,
IN gctBOOL yInverted,
OUT gctFLOAT_PTR Coords);
gceSTATUS
gco3D_SetLogicOp(IN gco3D Engine, IN gctUINT8 Rop);
gceSTATUS
gco3D_SetQuery(IN gco3D Engine,
IN gctADDRESS QueryHeader,
IN gceQueryType Type,
IN gctBOOL Enable,
IN gctUINT32 Index);
gceSTATUS
gco3D_GetQuery(IN gco3D Engine,
IN gceQueryType Type,
IN gcsSURF_NODE_PTR Node,
IN gctUINT32 Size,
IN gctPOINTER Locked,
IN gctUINT32 IndexedId,
OUT gctINT32 *Index);
gceSTATUS
gco3D_SetXfbHeader(IN gco3D Engine, IN gctADDRESS Physical);
gceSTATUS
gco3D_SetXfbBuffer(IN gco3D Engine,
IN gctUINT32 Index,
IN gctADDRESS BufferAddr,
IN gctUINT32 BufferStride,
IN gctUINT32 BufferSize);
gceSTATUS
gco3D_SetXfbCmd(IN gco3D Engine, IN gceXfbCmd Cmd);
gceSTATUS
gco3D_SetRasterDiscard(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_SetColorOutCount(IN gco3D Engine, IN gctUINT32 ColorOutCount);
gceSTATUS
gco3D_SetColorCacheMode(IN gco3D Engine);
gceSTATUS
gco3D_Set3DEngine(IN gco3D Engine);
gceSTATUS
gco3D_UnSet3DEngine(IN gco3D Engine);
gceSTATUS
gco3D_Get3DEngine(OUT gco3D *Engine);
gceSTATUS
gco3D_QueryReset(IN gco3D Engine, OUT gctBOOL_PTR Innocent);
/* OCL thread walker information. */
typedef struct _gcsTHREAD_WALKER_INFO *gcsTHREAD_WALKER_INFO_PTR;
typedef struct _gcsTHREAD_WALKER_INFO {
gctUINT32 dimensions;
gctUINT32 traverseOrder;
gctUINT32 enableSwathX;
gctUINT32 enableSwathY;
gctUINT32 enableSwathZ;
gctUINT32 swathSizeX;
gctUINT32 swathSizeY;
gctUINT32 swathSizeZ;
gctUINT32 valueOrder;
gctUINT32 globalSizeX;
gctUINT32 globalOffsetX;
gctUINT32 globalSizeY;
gctUINT32 globalOffsetY;
gctUINT32 globalSizeZ;
gctUINT32 globalOffsetZ;
gctUINT32 globalScaleX;
gctUINT32 globalScaleY;
gctUINT32 globalScaleZ;
gctUINT32 workGroupSizeX;
gctUINT32 workGroupCountX;
gctUINT32 workGroupSizeY;
gctUINT32 workGroupCountY;
gctUINT32 workGroupSizeZ;
gctUINT32 workGroupCountZ;
gctUINT32 threadAllocation;
gctBOOL barrierUsed;
gctUINT32 memoryAccessFlag; /* same as gceMEMORY_ACCESS_FLAG */
gctBOOL indirect;
gctUINT32 groupNumberUniformIdx;
gctADDRESS baseAddress;
gctBOOL bDual16;
gctUINT32 coreCount;
gctUINT32 coreIDs[gcdMAX_3DGPU_COUNT];
} gcsTHREAD_WALKER_INFO;
#if gcdENABLE_3D && gcdUSE_VX
/* VX thread walker parameters. */
typedef struct _gcsVX_THREAD_WALKER_PARAMETERS *gcsVX_THREAD_WALKER_PARAMETERS_PTR;
typedef struct _gcsVX_THREAD_WALKER_PARAMETERS {
gctUINT32 valueOrder;
gctUINT32 workDim;
gctUINT32 workGroupSizeX;
gctUINT32 workGroupCountX;
gctUINT32 workGroupSizeY;
gctUINT32 workGroupCountY;
gctUINT32 globalOffsetX;
gctUINT32 globalScaleX;
gctUINT32 globalOffsetY;
gctUINT32 globalScaleY;
#if gcdVX_OPTIMIZER > 1
gctBOOL tileMode;
# endif
} gcsVX_THREAD_WALKER_PARAMETERS;
typedef struct _gcsVX_IMAGE_INFO *gcsVX_IMAGE_INFO_PTR;
typedef struct _gcsVX_IMAGE_INFO {
gctUINT32 format;
gctUINT32 rect[4];
gctSIZE_T width;
gctSIZE_T height;
/*arraySize, sliceSize is for imageArray / image3D */
gctSIZE_T arraySize;
gctUINT64 sliceSize;
gctUINT32 bpp;
gctUINT32 planes;
gctUINT32 componentCount;
gctBOOL isFloat;
gctUINT32 uPixels;
gctUINT32 vPixels;
gceSURF_FORMAT internalFormat;
gctUINT32 border;
/*vx_imagepatch_addressing_t == (gctUINT32 * 8) */
void *base_addr[3];
gctUINT64 stride[3];
gctPOINTER logicals[3];
gctADDRESS physicals[3];
gctUINT32 bytes;
gcsSURF_NODE_PTR nodes[3];
gctBOOL isVXC;
#if gcdVX_OPTIMIZER
gctUINT32 uniformData[3][4];
# endif
/* the uniform data type of save nbg */
gctUINT32 uniformSaveDataType;
} gcsVX_IMAGE_INFO;
typedef struct _gcsVX_DISTRIBUTION_INFO *gcsVX_DISTRIBUTION_INFO_PTR;
typedef struct _gcsVX_DISTRIBUTION_INFO {
gctUINT32 logical;
gctADDRESS physical;
gctUINT32 bytes;
gcsSURF_NODE_PTR node;
} gcsVX_DISTRIBUTION_INFO;
# endif
/* Start OCL thread walker. */
gceSTATUS
gco3D_InvokeThreadWalker(IN gco3D Engine, IN gcsTHREAD_WALKER_INFO_PTR Info);
gceSTATUS
gco3D_GetClosestRenderFormat(IN gco3D Engine,
IN gceSURF_FORMAT InFormat,
OUT gceSURF_FORMAT *OutFormat);
/* Set w clip and w plane limit value. */
gceSTATUS
gco3D_SetWClipEnable(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_GetWClipEnable(IN gco3D Engine, OUT gctBOOL *Enable);
gceSTATUS
gco3D_SetWPlaneLimitF(IN gco3D Engine, IN gctFLOAT Value);
gceSTATUS
gco3D_SetWPlaneLimitX(IN gco3D Engine, IN gctFIXED_POINT Value);
gceSTATUS
gco3D_SetWPlaneLimit(IN gco3D Engine, IN gctFLOAT Value);
gceSTATUS
gco3D_PrimitiveRestart(IN gco3D Engine, IN gctBOOL PrimitiveRestart);
gceSTATUS
gco3D_LoadProgram(IN gco3D Engine,
IN gcePROGRAM_STAGE_BIT StageBits,
IN gctPOINTER ProgramState);
gceSTATUS
gco3D_EnableAlphaToCoverage(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_EnableSampleCoverage(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_SetSampleCoverageValue(IN gco3D Engine,
IN gctFLOAT CoverageValue,
IN gctBOOL Invert);
gceSTATUS
gco3D_EnableSampleMask(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_SetSampleMask(IN gco3D Engine, IN gctUINT32 SampleMask);
gceSTATUS
gco3D_EnableSampleShading(IN gco3D Engine, IN gctBOOL Enable);
gceSTATUS
gco3D_SetMinSampleShadingValue(IN gco3D Engine, IN gctFLOAT MinSampleShadingValue);
gceSTATUS
gco3D_SetSampleShading(IN gco3D Engine,
IN gctBOOL Enable,
IN gctBOOL IsSampleIn,
IN gctFLOAT SampleShadingValue);
gceSTATUS
gco3D_EnableSampleMaskOut(IN gco3D Engine, IN gctBOOL Enable, IN gctINT SampleMaskLoc);
/*----------------------------------------------------------------------------*/
/*-------------------------- gco3D Fragment Processor ------------------------*/
/* Set the fragment processor configuration. */
gceSTATUS
gco3D_SetFragmentConfiguration(IN gco3D Engine,
IN gctBOOL ColorFromStream,
IN gctBOOL EnableFog,
IN gctBOOL EnableSmoothPoint,
IN gctUINT32 ClipPlanes);
/* Enable/disable texture stage operation. */
gceSTATUS
gco3D_EnableTextureStage(IN gco3D Engine, IN gctINT Stage, IN gctBOOL Enable);
/* Program the channel enable masks for the color texture function. */
gceSTATUS
gco3D_SetTextureColorMask(IN gco3D Engine,
IN gctINT Stage,
IN gctBOOL ColorEnabled,
IN gctBOOL AlphaEnabled);
/* Program the channel enable masks for the alpha texture function. */
gceSTATUS
gco3D_SetTextureAlphaMask(IN gco3D Engine,
IN gctINT Stage,
IN gctBOOL ColorEnabled,
IN gctBOOL AlphaEnabled);
/* Program the constant fragment color. */
gceSTATUS
gco3D_SetFragmentColorX(IN gco3D Engine,
IN gctFIXED_POINT Red,
IN gctFIXED_POINT Green,
IN gctFIXED_POINT Blue,
IN gctFIXED_POINT Alpha);
gceSTATUS
gco3D_SetFragmentColorF(IN gco3D Engine,
IN gctFLOAT Red,
IN gctFLOAT Green,
IN gctFLOAT Blue,
IN gctFLOAT Alpha);
/* Program the constant fog color. */
gceSTATUS
gco3D_SetFogColorX(IN gco3D Engine,
IN gctFIXED_POINT Red,
IN gctFIXED_POINT Green,
IN gctFIXED_POINT Blue,
IN gctFIXED_POINT Alpha);
gceSTATUS
gco3D_SetFogColorF(IN gco3D Engine,
IN gctFLOAT Red,
IN gctFLOAT Green,
IN gctFLOAT Blue,
IN gctFLOAT Alpha);
/* Program the constant texture color. */
gceSTATUS
gco3D_SetTetxureColorX(IN gco3D Engine,
IN gctINT Stage,
IN gctFIXED_POINT Red,
IN gctFIXED_POINT Green,
IN gctFIXED_POINT Blue,
IN gctFIXED_POINT Alpha);
gceSTATUS
gco3D_SetTetxureColorF(IN gco3D Engine,
IN gctINT Stage,
IN gctFLOAT Red,
IN gctFLOAT Green,
IN gctFLOAT Blue,
IN gctFLOAT Alpha);
/* Configure color texture function. */
gceSTATUS
gco3D_SetColorTextureFunction(IN gco3D Engine,
IN gctINT Stage,
IN gceTEXTURE_FUNCTION Function,
IN gceTEXTURE_SOURCE Source0,
IN gceTEXTURE_CHANNEL Channel0,
IN gceTEXTURE_SOURCE Source1,
IN gceTEXTURE_CHANNEL Channel1,
IN gceTEXTURE_SOURCE Source2,
IN gceTEXTURE_CHANNEL Channel2,
IN gctINT Scale);
/* Configure alpha texture function. */
gceSTATUS
gco3D_SetAlphaTextureFunction(IN gco3D Engine,
IN gctINT Stage,
IN gceTEXTURE_FUNCTION Function,
IN gceTEXTURE_SOURCE Source0,
IN gceTEXTURE_CHANNEL Channel0,
IN gceTEXTURE_SOURCE Source1,
IN gceTEXTURE_CHANNEL Channel1,
IN gceTEXTURE_SOURCE Source2,
IN gceTEXTURE_CHANNEL Channel2,
IN gctINT Scale);
/******************************************************************************
****************************** gcoTEXTURE Object *****************************
******************************************************************************/
typedef struct _gcsTEXTURE {
/* Addressing modes. */
gceTEXTURE_ADDRESSING s;
gceTEXTURE_ADDRESSING t;
gceTEXTURE_ADDRESSING r;
gceTEXTURE_SWIZZLE swizzle[gcvTEXTURE_COMPONENT_NUM];
/* Border color. */
gctUINT8 border[gcvTEXTURE_COMPONENT_NUM];
/* Filters. */
gceTEXTURE_FILTER minFilter;
gceTEXTURE_FILTER magFilter;
gceTEXTURE_FILTER mipFilter;
gctUINT anisoFilter;
/* Level of detail. */
gctFLOAT lodBias;
gctFLOAT lodMin;
gctFLOAT lodMax;
/* base/max level */
gctINT32 baseLevel;
gctINT32 maxLevel;
/* depth texture comparison */
gceTEXTURE_COMPARE_MODE compareMode;
gceCOMPARE compareFunc;
gceTEXTURE_DS_TEX_MODE dsTextureMode;
gceTEXTURE_DS_MODE dsMode;
/* sRGB decode */
gceTEXTURE_SRGBDECODE sRGB;
gcuVALUE borderColor[4];
gctBOOL descDirty;
/* texture stage */
gctINT stage;
} gcsTEXTURE, *gcsTEXTURE_PTR;
typedef struct _gcsTEXTURE_BINDTEXTS_ARGS {
/* must be the first member */
gceHAL_ARG_VERSION version;
} gcsTEXTURE_BINDTEXTS_ARGS;
/* Construct a new gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_Construct(IN gcoHAL Hal, OUT gcoTEXTURE *Texture);
/* Construct a new gcoTEXTURE object with type information. */
gceSTATUS
gcoTEXTURE_ConstructEx(IN gcoHAL Hal, IN gceTEXTURE_TYPE Type, OUT gcoTEXTURE *Texture);
/* Construct a new sized gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_ConstructSized(IN gcoHAL Hal,
IN gceSURF_FORMAT Format,
IN gceTILING Tiling,
IN gctUINT Width,
IN gctUINT Height,
IN gctUINT Depth,
IN gctUINT Faces,
IN gctUINT MipMapCount,
IN gcePOOL Pool,
OUT gcoTEXTURE *Texture);
/* Destroy an gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_Destroy(IN gcoTEXTURE Texture);
/* Check src and dst format support of 3D Blit. */
gceSTATUS
gcoTEXTURE_CheckHWSupportedImage(
IN gceSURF_FORMAT srcFormat,
IN gceSURF_FORMAT dstFormat
);
/* Upload data to an gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_Upload(IN gcoTEXTURE Texture,
IN gctINT MipMap,
IN gceTEXTURE_FACE Face,
IN gctSIZE_T Width,
IN gctSIZE_T Height,
IN gctUINT Slice,
IN gctCONST_POINTER Memory,
IN gctSIZE_T Stride,
IN gceSURF_FORMAT Format,
IN gceSURF_COLOR_SPACE SrcColorSpace);
/* Upload data to an gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_UploadSub(IN gcoTEXTURE Texture,
IN gctINT MipMap,
IN gceTEXTURE_FACE Face,
IN gctSIZE_T X,
IN gctSIZE_T Y,
IN gctSIZE_T Width,
IN gctSIZE_T Height,
IN gctUINT Slice,
IN gctCONST_POINTER Memory,
IN gctSIZE_T Stride,
IN gceSURF_FORMAT Format,
IN gceSURF_COLOR_SPACE SrcColorSpace,
IN gctADDRESS PhysicalAddress);
/* Upload YUV data to an gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_UploadYUV(IN gcoTEXTURE Texture,
IN gceTEXTURE_FACE Face,
IN gctUINT Width,
IN gctUINT Height,
IN gctUINT Slice,
IN gctPOINTER Memory[3],
IN gctINT Stride[3],
IN gceSURF_FORMAT Format);
/* Upload compressed data to an gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_UploadCompressed(IN gcoTEXTURE Texture,
IN gctINT MipMap,
IN gceTEXTURE_FACE Face,
IN gctSIZE_T Width,
IN gctSIZE_T Height,
IN gctUINT Slice,
IN gctCONST_POINTER Memory,
IN gctSIZE_T Bytes);
/* Upload compressed sub data to an gcoTEXTURE object. */
gceSTATUS
gcoTEXTURE_UploadCompressedSub(IN gcoTEXTURE Texture,
IN gctINT MipMap,
IN gceTEXTURE_FACE Face,
IN gctSIZE_T XOffset,
IN gctSIZE_T YOffset,
IN gctSIZE_T Width,
IN gctSIZE_T Height,
IN gctUINT Slice,
IN gctCONST_POINTER Memory,
IN gctSIZE_T Size);
/* Get gcoSURF object for a mipmap level. */
gceSTATUS
gcoTEXTURE_GetMipMap(IN gcoTEXTURE Texture, IN gctUINT MipMap, OUT gcoSURF *Surface);
/* Get gcoSURF object for a mipmap level and face offset. */
gceSTATUS
gcoTEXTURE_GetMipMapFace(IN gcoTEXTURE Texture,
IN gctUINT MipMap,
IN gceTEXTURE_FACE Face,
OUT gcoSURF *Surface,
OUT gctSIZE_T_PTR Offset);
gceSTATUS
gcoTEXTURE_GetMipMapSlice(IN gcoTEXTURE Texture,
IN gctUINT MipMap,
IN gctUINT Slice,
OUT gcoSURF *Surface,
OUT gctSIZE_T_PTR Offset);
gceSTATUS
gcoTEXTURE_AddMipMap(IN gcoTEXTURE Texture,
IN gctINT Level,
IN gctINT InternalFormat,
IN gceSURF_FORMAT Format,
IN gctSIZE_T Width,
IN gctSIZE_T Height,
IN gctSIZE_T Depth,
IN gctUINT Faces,
IN gcePOOL Pool,
IN gctBOOL Filterable,
OUT gcoSURF *Surface);
gceSTATUS
gcoTEXTURE_AddMipMapEx(IN gcoTEXTURE Texture,
IN gctINT Level,
IN gctINT InternalFormat,
IN gceSURF_FORMAT Format,
IN gctSIZE_T Width,
IN gctSIZE_T Height,
IN gctSIZE_T Depth,
IN gctUINT Faces,
IN gcePOOL Pool,
IN gctUINT32 Samples,
IN gctBOOL Protected,
IN gctBOOL Filterable,
OUT gcoSURF *Surface);
gceSTATUS
gcoTEXTURE_AddMipMapFromClient(IN gcoTEXTURE Texture,
IN gctINT Level,
IN gcoSURF Surface);
gceSTATUS
gcoTEXTURE_AddMipMapFromSurface(IN gcoTEXTURE Texture,
IN gctINT Level,
IN gcoSURF Surface);
gceSTATUS
gcoTEXTURE_LockMipMap(IN gcoTEXTURE Texture,
IN gctUINT MipMap,
OPTIONAL OUT gctADDRESS *Address,
OPTIONAL OUT gctPOINTER *Memory);
gceSTATUS
gcoTEXTURE_SetEndianHint(IN gcoTEXTURE Texture, IN gceENDIAN_HINT EndianHint);
gceSTATUS
gcoTEXTURE_SetSurfType(IN gcoTEXTURE Texture, IN gceSURF_TYPE type);
gceSTATUS
gcoTEXTURE_Disable(IN gcoHAL Hal, IN gctINT Sampler, IN gctBOOL DefaultInteger);
gceSTATUS
gcoTEXTURE_Clear(IN gcoTEXTURE Texture, IN gctINT MipMap);
gceSTATUS
gcoTEXTURE_Flush(IN gcoTEXTURE Texture);
gceSTATUS
gcoTEXTURE_FlushVS(IN gcoTEXTURE Texture);
gceSTATUS
gcoTEXTURE_QueryCaps(IN gcoHAL Hal,
OUT gctUINT *MaxWidth,
OUT gctUINT *MaxHeight,
OUT gctUINT *MaxDepth,
OUT gctBOOL *Cubic,
OUT gctBOOL *NonPowerOfTwo,
OUT gctUINT *VertexSamplers,
OUT gctUINT *PixelSamplers);
gceSTATUS
gcoTEXTURE_GetClosestFormat(IN gcoHAL Hal,
IN gceSURF_FORMAT InFormat,
OUT gceSURF_FORMAT *OutFormat);
gceSTATUS
gcoTEXTURE_GetClosestFormatEx(IN gcoHAL Hal,
IN gceSURF_FORMAT InFormat,
IN gceTEXTURE_TYPE TextureType,
OUT gceSURF_FORMAT *OutFormat);
gceSTATUS
gcoTEXTURE_GetFormatInfo(IN gcoTEXTURE Texture,
IN gctINT preferLevel,
OUT gcsSURF_FORMAT_INFO_PTR *TxFormatInfo);
gceSTATUS
gcoTEXTURE_GetTextureFormatName(IN gcsSURF_FORMAT_INFO_PTR TxFormatInfo,
OUT gctCONST_STRING *TxName);
gceSTATUS
gcoTEXTURE_RenderIntoMipMap(IN gcoTEXTURE Texture, IN gctINT Level);
gceSTATUS
gcoTEXTURE_RenderIntoMipMap2(IN gcoTEXTURE Texture, IN gctINT Level, IN gctBOOL Sync);
gceSTATUS
gcoTEXTURE_IsRenderable(IN gcoTEXTURE Texture, IN gctUINT Level);
gceSTATUS
gcoTEXTURE_IsComplete(IN gcoTEXTURE Texture,
IN gcsTEXTURE_PTR Info,
IN gctINT BaseLevel,
IN gctINT MaxLevel);
gceSTATUS
gcoTEXTURE_CheckTexLevel0Attrib(IN gcoTEXTURE Texture,
IN gctINT MaxLevel,
IN gctINT usedLevel);
gceSTATUS
gcoTEXTURE_BindTexture(IN gcoTEXTURE Texture,
IN gctINT Target,
IN gctINT Sampler,
IN gcsTEXTURE_PTR Info);
gceSTATUS
gcoTEXTURE_BindTextureEx(IN gcoTEXTURE Texture,
IN gctINT Target,
IN gctINT Sampler,
IN gcsTEXTURE_PTR Info,
IN gctINT textureLayer);
gceSTATUS
gcoTEXTURE_BindTextureDesc(IN gcoTEXTURE Texture,
IN gctINT Sampler,
IN gcsTEXTURE_PTR Info,
IN gctINT TextureLayer);
gceSTATUS
gcoTEXTURE_SetDescDirty(IN gcoTEXTURE Texture);
gceSTATUS
gcoTEXTURE_InitParams(IN gcoHAL Hal, IN gcsTEXTURE_PTR TexParams);
gceSTATUS
gcoTEXTURE_SetDepthTextureFlag(IN gcoTEXTURE Texture, IN gctBOOL unsized);
gceSTATUS
gcoTEXTURE_SetSpecialSwap(IN gcoTEXTURE Texture, IN gctBOOL needSwap);
gceSTATUS
gcoTEXTURE_BindTextureTS(IN gcsTEXTURE_BINDTEXTS_ARGS *args);
gceSTATUS
gcoTEXTURE_GenerateMipMap(IN gcoTEXTURE Texture,
IN gctINT BaseLevel,
IN gctINT MaxLevel,
IN gctBOOL sRGBDecode);
/******************************************************************************
****************************** gcoSTREAM Object ******************************
******************************************************************************/
gceSTATUS
gcoSTREAM_Construct(IN gcoHAL Hal, OUT gcoSTREAM *Stream);
gceSTATUS
gcoSTREAM_Destroy(IN gcoSTREAM Stream);
gceSTATUS
gcoSTREAM_Upload(IN gcoSTREAM Stream,
IN gctCONST_POINTER Buffer,
IN gctSIZE_T Offset,
IN gctSIZE_T Bytes,
IN gctBOOL Dynamic);
gceSTATUS
gcoSTREAM_ReAllocBufNode(IN gcoSTREAM Stream);
gceSTATUS
gcoSTREAM_SetStride(IN gcoSTREAM Stream, IN gctUINT32 Stride);
gceSTATUS
gcoSTREAM_Node(IN gcoSTREAM Stream, OUT gcsSURF_NODE_PTR *Node);
gceSTATUS
gcoSTREAM_Lock(IN gcoSTREAM Stream,
OUT gctPOINTER *Logical,
OUT gctADDRESS *Physical);
gceSTATUS
gcoSTREAM_Unlock(IN gcoSTREAM Stream);
gceSTATUS
gcoSTREAM_Reserve(IN gcoSTREAM Stream, IN gctSIZE_T Bytes);
gceSTATUS
gcoSTREAM_Flush(IN gcoSTREAM Stream);
typedef struct _gcsSTREAM_INFO {
gctUINT index;
gceVERTEX_FORMAT format;
gctBOOL normalized;
gctUINT components;
gctSIZE_T size;
gctCONST_POINTER data;
gctUINT stride;
} gcsSTREAM_INFO, *gcsSTREAM_INFO_PTR;
gceSTATUS
gcoSTREAM_CPUCacheOperation(IN gcoSTREAM Stream, IN gceCACHEOPERATION Operation);
gceSTATUS
gcoSTREAM_CPUCacheOperation_Range(IN gcoSTREAM Stream,
IN gctSIZE_T Offset,
IN gctSIZE_T Length,
IN gceCACHEOPERATION Operation);
/******************************************************************************
******************************* gcoVERTEX Object *****************************
******************************************************************************/
typedef struct _gcsVERTEX_ATTRIBUTES {
gceVERTEX_FORMAT format;
gctBOOL normalized;
gctUINT32 components;
gctSIZE_T size;
gctUINT32 stream;
gctUINT32 offset;
gctUINT32 stride;
} gcsVERTEX_ATTRIBUTES;
gceSTATUS
gcoVERTEX_Construct(IN gcoHAL Hal, OUT gcoVERTEX *Vertex);
gceSTATUS
gcoVERTEX_Destroy(IN gcoVERTEX Vertex);
gceSTATUS
gcoVERTEX_Reset(IN gcoVERTEX Vertex);
gceSTATUS
gcoVERTEX_EnableAttribute(IN gcoVERTEX Vertex,
IN gctUINT32 Index,
IN gceVERTEX_FORMAT Format,
IN gctBOOL Normalized,
IN gctUINT32 Components,
IN gcoSTREAM Stream,
IN gctUINT32 Offset,
IN gctUINT32 Stride);
gceSTATUS
gcoVERTEX_DisableAttribute(IN gcoVERTEX Vertex, IN gctUINT32 Index);
gceSTATUS
gcoVERTEX_Bind(IN gcoVERTEX Vertex);
/******************************************************************************
**** gcoVERTEXARRAY Object ***************************************************/
typedef struct _gcsATTRIBUTE {
/* Enabled. */
gctBOOL enable;
/* Number of components. */
gctINT size;
/* Attribute format. */
gceVERTEX_FORMAT format;
/* Flag whether the attribute is normalized or not. */
gctBOOL normalized;
/* Stride of the component. */
gctSIZE_T stride;
/* Divisor of the attribute */
gctUINT divisor;
/* Offset of the attribute */
gctUINT offset;
/* Pointer to the attribute data. */
gctCONST_POINTER pointer;
/* Stream object owning the attribute data. */
gcoBUFOBJ stream;
/* Generic values for attribute. */
gctFLOAT genericValue[4];
/* Generic size for attribute. */
gctINT genericSize;
/* Vertex shader linkage. */
gctUINT linkage;
#if gcdUSE_WCLIP_PATCH
/* Does it hold positions? */
gctBOOL isPosition;
#endif
/* Index to vertex array */
gctINT arrayIdx;
gctINT arrayLoc[32];
gceATTRIB_SCHEME convertScheme;
/* Pointer to the temporary buffer to be freed */
gcoBUFOBJ tempStream;
/* Pointer to the temporary memory to be freed */
gctCONST_POINTER tempMemory;
} gcsATTRIBUTE, *gcsATTRIBUTE_PTR;
typedef struct _gcsVERTEXARRAY {
/* Enabled. */
gctBOOL enable;
/* Number of components. */
gctINT size;
/* Attribute format. */
gceVERTEX_FORMAT format;
/* Flag whether the attribute is normalized or not. */
gctBOOL normalized;
/* Stride of the component. */
gctUINT stride;
/* Divisor of the attribute */
gctUINT divisor;
/* Pointer to the attribute data. */
gctCONST_POINTER pointer;
/* Stream object owning the attribute data. */
gcoSTREAM stream;
/* Generic values for attribute. */
gctFLOAT genericValue[4];
/* Generic size for attribute. */
gctINT genericSize;
/* Vertex shader linkage. */
gctUINT linkage;
gctBOOL isPosition;
} gcsVERTEXARRAY, *gcsVERTEXARRAY_PTR;
gceSTATUS
gcoVERTEXARRAY_Construct(IN gcoHAL Hal, OUT gcoVERTEXARRAY *Vertex);
gceSTATUS
gcoVERTEXARRAY_Destroy(IN gcoVERTEXARRAY Vertex);
/* If don't consider isolation, STREAM_INFO / INDEX_INFO could be
* include in the struct of instantDraw in chip level.
*/
typedef struct _gcsVERTEXARRAY_STREAM_INFO {
gctUINT attribMask;
gctSIZE_T first;
gctSIZE_T count;
gcePRIMITIVE primMode;
gctSIZE_T primCount;
gctINT vertexInstIndex;
gctBOOL instanced;
gctSIZE_T instanceCount;
union _gcsVERTEXARRAY_STREAM_INFO_UNION {
struct _gcsVERTEXARRAY_STREAM_ES11_INFO {
gcsVERTEXARRAY_PTR attributes;
} es11;
struct _gcsVERTEXARRAY_STREAM_ES30_INFO {
gcsATTRIBUTE_PTR attributes;
} es30;
} u;
} gcsVERTEXARRAY_STREAM_INFO, *gcsVERTEXARRAY_STREAM_INFO_PTR;
typedef const struct _gcsVERTEXARRAY_STREAM_INFO *gcsVERTEXARRAY_STREAM_INFO_CONST_PTR;
typedef struct _gcsVERTEXARRAY_INDEX_INFO {
gctSIZE_T count;
gceINDEX_TYPE indexType;
gctPOINTER indexMemory;
gctUINT restartElement;
union _gcsVERTEXARRAY_INDEX_INFO_UNION {
struct _gcsVERTEXARRAY_INDEX_ES11_INFO {
gcoINDEX indexBuffer;
} es11;
struct _gcsVERTEXARRAY_INDEX_ES30_INFO {
gcoBUFOBJ indexBuffer;
} es30;
} u;
} gcsVERTEXARRAY_INDEX_INFO, *gcsVERTEXARRAY_INDEX_INFO_PTR;
typedef const struct _gcsVERTEXARRAY_INDEX_INFO *gcsVERTEXARRAY_INDEX_INFO_CONST_PTR;
gceSTATUS
gcoVERTEXARRAY_IndexBind(IN gcoVERTEXARRAY Vertex,
IN gcsVERTEXARRAY_INDEX_INFO_PTR IndexInfo);
#if gcdUSE_WCLIP_PATCH
gceSTATUS
gcoVERTEXARRAY_StreamBind(IN gcoVERTEXARRAY Vertex,
IN OUT gctFLOAT *WLimitRms,
IN OUT gctBOOL *WLimitRmsDirty,
IN gcsVERTEXARRAY_STREAM_INFO_CONST_PTR StreamInfo,
IN gcsVERTEXARRAY_INDEX_INFO_CONST_PTR IndexInfo);
gceSTATUS
gcoVERTEXARRAY_StreamBind_Ex(IN gcoVERTEXARRAY Vertex,
IN OUT gctFLOAT *WLimitRms,
IN OUT gctBOOL *WLimitRmsDirty,
IN OUT gcsVERTEXARRAY_STREAM_INFO_PTR StreamInfo,
IN gcsVERTEXARRAY_INDEX_INFO_PTR IndexInfo);
# else
gceSTATUS
gcoVERTEXARRAY_StreamBind(IN gcoVERTEXARRAY Vertex,
IN gcsVERTEXARRAY_STREAM_INFO_CONST_PTR StreamInfo,
IN gcsVERTEXARRAY_INDEX_INFO_CONST_PTR IndexInfo);
gceSTATUS
gcoVERTEXARRAY_StreamBind_Ex(IN gcoVERTEXARRAY Vertex,
IN OUT gcsVERTEXARRAY_STREAM_INFO_PTR StreamInfo,
IN gcsVERTEXARRAY_INDEX_INFO_PTR IndexInfo);
# endif
gceSTATUS
gcoVERTEXARRAY_IndexBind_Ex(IN gcoVERTEXARRAY Vertex,
IN OUT gcsVERTEXARRAY_STREAM_INFO_PTR StreamInfo,
IN gcsVERTEXARRAY_INDEX_INFO_PTR IndexInfo);
gceSTATUS
gcoVERTEXARRAY_Bind(IN gcoVERTEXARRAY Vertex,
IN gctUINT32 EnableBits,
IN gcsVERTEXARRAY_PTR VertexArray,
IN gctUINT First,
IN gctSIZE_T *Count,
IN gceINDEX_TYPE IndexType,
IN gcoINDEX IndexObject,
IN gctPOINTER IndexMemory,
IN OUT gcePRIMITIVE *PrimitiveType,
#if gcdUSE_WCLIP_PATCH
IN OUT gctUINT *PrimitiveCount,
IN OUT gctFLOAT *wLimitRms,
IN OUT gctBOOL *wLimitDirty
# else
IN OUT gctUINT *PrimitiveCount
# endif
);
/* Frame Database */
gceSTATUS
gcoHAL_AddFrameDB(void);
gceSTATUS
gcoHAL_DumpFrameDB(gctCONST_STRING Filename OPTIONAL);
gceSTATUS
gcoHAL_InitGPUProfile(void);
/******************************************************************************
*********************gcoBUFOBJ object*****************************************
******************************************************************************/
/* Construct a new gcoBUFOBJ object. */
gceSTATUS
gcoBUFOBJ_Construct(IN gcoHAL Hal, IN gceBUFOBJ_TYPE Type, OUT gcoBUFOBJ *BufObj);
/* Destroy a gcoBUFOBJ object. */
gceSTATUS
gcoBUFOBJ_Destroy(IN gcoBUFOBJ BufObj);
/* Lock pbo in memory. */
gceSTATUS
gcoBUFOBJ_Lock(IN gcoBUFOBJ BufObj,
OUT gctADDRESS *Address,
OUT gctPOINTER *Memory);
/* Lock pbo in memory. */
gceSTATUS
gcoBUFOBJ_FastLock(IN gcoBUFOBJ BufObj,
OUT gctADDRESS *Address,
OUT gctPOINTER *Memory);
/* Unlock pbo that was previously locked with gcoBUFOBJ_Lock. */
gceSTATUS
gcoBUFOBJ_Unlock(IN gcoBUFOBJ BufObj);
/* Free existing pbo buffer. */
gceSTATUS
gcoBUFOBJ_Free(IN gcoBUFOBJ BufObj);
/* Upload data into an pbo buffer. */
gceSTATUS
gcoBUFOBJ_Upload(IN gcoBUFOBJ BufObj,
IN gctCONST_POINTER Buffer,
IN gctSIZE_T Offset,
IN gctSIZE_T Bytes,
IN gceBUFOBJ_USAGE Usage);
/* Bind an index object to the hardware. */
gceSTATUS
gcoBUFOBJ_IndexBind(IN gcoBUFOBJ Index,
IN gceINDEX_TYPE Type,
IN gctSIZE_T Offset,
IN gctSIZE_T Count,
IN gctUINT RestartElement);
/* Find min and max index for the index buffer */
gceSTATUS
gcoBUFOBJ_IndexGetRange(IN gcoBUFOBJ Index,
IN gceINDEX_TYPE Type,
IN gctSIZE_T Offset,
IN gctUINT32 Count,
OUT gctUINT32 *MinimumIndex,
OUT gctUINT32 *MaximumIndex);
/* Sets buffer upload endian hint */
gceSTATUS
gcoBUFOBJ_SetBufferEndianHint(IN gcoBUFOBJ BufObj);
/* Query a buffer object dirty status */
gceSTATUS
gcoBUFOBJ_SetDirty(IN gcoBUFOBJ BufObj, IN gctBOOL Dirty);
/* Sets a buffer object as dirty */
gctBOOL
gcoBUFOBJ_IsDirty(IN gcoBUFOBJ BufObj);
/* Creates a new buffer if needed */
gceSTATUS
gcoBUFOBJ_AlignIndexBufferWhenNeeded(IN gcoBUFOBJ BufObj,
IN gctSIZE_T Offset,
OUT gcoBUFOBJ *AlignedBufObj);
/* Cache operations on whole range */
gceSTATUS
gcoBUFOBJ_CPUCacheOperation(IN gcoBUFOBJ BufObj, IN gceCACHEOPERATION Operation);
/* Cache operations on a specified range */
gceSTATUS
gcoBUFOBJ_CPUCacheOperation_Range(IN gcoBUFOBJ BufObj,
IN gctSIZE_T Offset,
IN gctSIZE_T Length,
IN gceCACHEOPERATION Operation);
/* Return size of the bufobj */
gceSTATUS
gcoBUFOBJ_GetSize(IN gcoBUFOBJ BufObj, OUT gctSIZE_T_PTR Size);
/* Return memory node of the bufobj */
gceSTATUS
gcoBUFOBJ_GetNode(IN gcoBUFOBJ BufObj, OUT gcsSURF_NODE_PTR *Node);
gceSTATUS
gcoBUFOBJ_ReAllocBufNode(IN gcoBUFOBJ BufObj);
/* Handle GPU cache operations */
gceSTATUS
gcoBUFOBJ_SetCPUWrite(gcoBUFOBJ BufObj, gctBOOL Value);
/* Dump buffer. */
void
gcoBUFOBJ_Dump(IN gcoBUFOBJ BufObj);
#endif /* gcdENABLE_3D */
#ifdef __cplusplus
}
#endif
#endif /* __gc_hal_engine_h_ */