📄 fgl.h
字号:
/**
* Samsung Project
* Copyright (c) 2007 Mobile XG, Samsung Electronics, Inc.
* All right reserved.
*
* This software is the confidential and proprietary information
* of Samsung Electronics Inc. ("Confidential Information"). You
* shall not disclose such Confidential Information and shall use
* it only in accordance with the terms of the license agreement
* you entered into with Samsung Electronics.
*/
/**
* @file fgl.h
* @brief This is the header file for fgl library.
* @author Cheolkyoo Kim
* @version 1.5
*/
#if !defined(__FIMG_H__)
#define __FIMG_H__
#include "fglconfig.h"
#if defined __cplusplus
extern "C" {
#endif
/****************************************************************************
* Typedefs
****************************************************************************/
typedef unsigned int FGL_BOOL;
typedef unsigned int FG_BOOL;
/****************************************************************************
* Defines
****************************************************************************/
#define FGL_TRUE (1==1)
#define FGL_FALSE (!(FGL_TRUE))
#define FGL_NULL ((void*)0)
#define FGL_ZERO 0
#define FGL_ONE 1
#define NO_ERROR 0
#define ERROR -1
#define NOT_SUPPORTED -2 /* test not supported by this config */
/* Vertex/Pixel Shader */
#define BUILD_SHADER_VERSION(major, minor) (0xFFFF0000 | (((minor)&0xFF)<<8) | ((major) & 0xFF))
#define VERTEX_SHADER_MAGIC (((('V')&0xFF)<<0)|((('S')&0xFF)<<8)|(((' ')&0xFF)<<16)|(((' ')&0xFF)<<24))
#define PIXEL_SHADER_MAGIC (((('P')&0xFF)<<0)|((('S')&0xFF)<<8)|(((' ')&0xFF)<<16)|(((' ')&0xFF)<<24))
#define SHADER_VERSION BUILD_SHADER_VERSION(3,0)
#define SET_BIT(n) (1<<n)
/****************************************************************************
* Macros
****************************************************************************/
/** GLOBAL REGISTER PIPELINE STATE BIT POSITION */
#define FGL_PIPESTATE_HOSTFIFO_BIT (0)
#define FGL_PIPESTATE_HI_BIT (1)
#define FGL_PIPESTATE_HI2VS_BIT (2)
#define FGL_PIPESTATE_VC_BIT (3)
#define FGL_PIPESTATE_VS_BIT (4)
#define FGL_PIPESTATE_PE_BIT (8)
#define FGL_PIPESTATE_TSE_BIT (9)
#define FGL_PIPESTATE_RA_BIT (10)
#define FGL_PIPESTATE_PS0_BIT (12)
#define FGL_PIPESTATE_PS1_BIT (13)
#define FGL_PIPESTATE_PF0_BIT (16)
#define FGL_PIPESTATE_PF1_BIT (17)
#define FGL_PIPESTATE_CCACHE0_BIT (18)
#define FGL_PIPESTATE_CCACHE1_BIT (19)
#define FGL_PIPESTATE_HOSTFIFO (1)
#define FGL_PIPESTATE_HI (1 << FGL_PIPESTATE_HI_BIT)
#define FGL_PIPESTATE_HI2VS (1 << FGL_PIPESTATE_HI2VS_BIT)
#define FGL_PIPESTATE_VC (1 << FGL_PIPESTATE_VC_BIT)
#define FGL_PIPESTATE_VS (1 << FGL_PIPESTATE_VS_BIT)
#define FGL_PIPESTATE_PE (1 << FGL_PIPESTATE_PE_BIT)
#define FGL_PIPESTATE_TSE (1 << FGL_PIPESTATE_TSE_BIT)
#define FGL_PIPESTATE_RA (1 << FGL_PIPESTATE_RA_BIT)
#define FGL_PIPESTATE_PS0 (1 << FGL_PIPESTATE_PS0_BIT)
#define FGL_PIPESTATE_PS1 (1 << FGL_PIPESTATE_PS1_BIT)
#define FGL_PIPESTATE_PF0 (1 << FGL_PIPESTATE_PF0_BIT)
#define FGL_PIPESTATE_PF1 (1 << FGL_PIPESTATE_PF1_BIT)
#define FGL_PIPESTATE_CCACHE0 (1 << FGL_PIPESTATE_CCACHE0_BIT)
#define FGL_PIPESTATE_CCACHE1 (1 << FGL_PIPESTATE_CCACHE1_BIT)
#ifndef _FIMG_PIPELINE_SINGLE
#define FGL_PIPESTATE_PS (FGL_PIPESTATE_PS0 \
| FGL_PIPESTATE_PS1)
#define FGL_PIPESTATE_PF (FGL_PIPESTATE_PF0 \
| FGL_PIPESTATE_PF1)
#define FGL_PIPESTATE_CCACHE (FGL_PIPESTATE_CCACHE0 \
| FGL_PIPESTATE_CCACHE1)
#else // _FIMG_PIPELINE_SINGLE
#define FGL_PIPESTATE_CCACHE FGL_PIPESTATE_CCACHE0
#define FGL_PIPESTATE_PS FGL_PIPESTATE_PS0
#define FGL_PIPESTATE_PF FGL_PIPESTATE_PF0
#endif // _FIMG_PIPELINE_SINGLE
#define FGL_PIPESTATE_ALL (FGL_PIPESTATE_HOSTFIFO \
| FGL_PIPESTATE_HI \
| FGL_PIPESTATE_HI2VS \
| FGL_PIPESTATE_VC \
| FGL_PIPESTATE_VS \
| FGL_PIPESTATE_PE \
| FGL_PIPESTATE_TSE \
| FGL_PIPESTATE_RA \
| FGL_PIPESTATE_PS \
| FGL_PIPESTATE_PF)
// for Blend
#define FGL_PIPESTATE_ALL_WITH_CCACHE (FGL_PIPESTATE_HOSTFIFO \
| FGL_PIPESTATE_HI \
| FGL_PIPESTATE_HI2VS \
| FGL_PIPESTATE_VC \
| FGL_PIPESTATE_VS \
| FGL_PIPESTATE_PE \
| FGL_PIPESTATE_TSE \
| FGL_PIPESTATE_RA \
| FGL_PIPESTATE_PS \
| FGL_PIPESTATE_PF \
| FGL_PIPESTATE_CCACHE)
/** GLOBAL REGISTER CACHE STATE BIT POSITION */
#define FGL_CACHECTL_FLUSH_ZCACHE0 (1)
#define FGL_CACHECTL_FLUSH_ZCACHE1 (1 << 1)
#define FGL_CACHECTL_FLUSH_CCACHE0 (1 << 4)
#define FGL_CACHECTL_FLUSH_CCACHE1 (1 << 5)
#define FGL_CACHECTL_CLEAR_TCACHE0 (1 << 8)
#define FGL_CACHECTL_CLEAR_TCACHE1 (1 << 9)
#define FGL_CACHECTL_CLEAR_VTCACHE (1 << 12)
#ifndef _FIMG_PIPELINE_SINGLE
#define FGL_CACHECTL_FLUSH_ZCACHE (FGL_CACHECTL_FLUSH_ZCACHE0 \
| FGL_CACHECTL_FLUSH_ZCACHE1)
#define FGL_CACHECTL_FLUSH_CCACHE (FGL_CACHECTL_FLUSH_CCACHE0 \
| FGL_CACHECTL_FLUSH_CCACHE1)
#define FGL_CACHECTL_CLEAR_TCACHE (FGL_CACHECTL_CLEAR_TCACHE0 \
| FGL_CACHECTL_CLEAR_TCACHE1)
#else // _FIMG_PIPELINE_SINGLE
#define FGL_CACHECTL_FLUSH_ZCACHE FGL_CACHECTL_FLUSH_ZCACHE0
#define FGL_CACHECTL_FLUSH_CCACHE FGL_CACHECTL_FLUSH_CCACHE0
// #define FGL_CACHECTL_CLEAR_TCACHE FGL_CACHECTL_CLEAR_TCACHE0
// Texture cache always 2 bit-checked
#define FGL_CACHECTL_CLEAR_TCACHE (FGL_CACHECTL_CLEAR_TCACHE0 \
| FGL_CACHECTL_CLEAR_TCACHE1)
#endif // _FIMG_PIPELINE_SINGLE
#define FGL_CACHECTL_INIT_ALL (FGL_CACHECTL_FLUSH_ZCACHE \
| FGL_CACHECTL_FLUSH_CCACHE \
| FGL_CACHECTL_CLEAR_TCACHE \
| FGL_CACHECTL_CLEAR_VTCACHE)
/****************************************************************************
* Enumerated types
****************************************************************************/
typedef enum FGL_ErrorTag
{
FGL_ERR_UNKNOWN = 0,
FGL_ERR_NO_ERROR,
FGL_ERR_INVALID_PARAMETER,
FGL_ERR_INVALID_PRIMITIVE,
FGL_ERR_INVALID_WIDTH,
FGL_ERR_INVALID_HEIGHT,
FGL_ERR_INVALID_SIZE,
FGL_ERR_INVALID_VALUE,
FGL_ERR_INVALID_SHADER_CODE,
FGL_ERR_STATUS_BUSY,
FGL_ERR_NO_SUPPORT
} FGL_Error;
typedef enum FGL_CacheClearFlagsTag
{
FGL_CLEAR_DEPTH_CACHE = 3,
FGL_CLEAR_COLOR_CACHE = (3 << 4),
FGL_CLEAR_TEX_CACHE = (3 << 8),
FGL_CLEAR_VTXTEX_CACHE = (1 << 12)
} FGL_CacheClearFlags;
typedef enum FGL_ResetFlagsTag
{
FGL_RESET_TEX_UNIT = SET_BIT(0),
FGL_RESET_PERFRAG_UNIT = SET_BIT(1),
FGL_RESET_PIXEL_SHADER = SET_BIT(1),
FGL_RESET_RASTER_UNIT = SET_BIT(2),
FGL_RESET_SETUP_ENGINE = SET_BIT(3),
FGL_RESET_GEOM_ENGINE = SET_BIT(4),
FGL_RESET_VERTEX_SHADER = SET_BIT(5),
FGL_RESET_HOST_INTERFACE = SET_BIT(7)
} FGL_ResetFlags;
// Host Interface
typedef enum FGL_IndexDataTypeTag
{
FGL_INDEX_DATA_UINT,
FGL_INDEX_DATA_USHORT,
FGL_INDEX_DATA_UBYTE
} FGL_IndexDataType;
typedef enum FGL_AttribDataTypeTag
{
FGL_ATTRIB_DATA_BYTE = 0,
FGL_ATTRIB_DATA_SHORT,
FGL_ATTRIB_DATA_INT,
FGL_ATTRIB_DATA_FIXED,
FGL_ATTRIB_DATA_UBYTE,
FGL_ATTRIB_DATA_USHORT,
FGL_ATTRIB_DATA_UINT,
FGL_ATTRIB_DATA_FLOAT,
FGL_ATTRIB_DATA_NBYTE,
FGL_ATTRIB_DATA_NSHORT,
FGL_ATTRIB_DATA_NINT,
FGL_ATTRIB_DATA_NFIXED,
FGL_ATTRIB_DATA_NUBYTE,
FGL_ATTRIB_DATA_NUSHORT,
FGL_ATTRIB_DATA_NUINT
} FGL_AttribDataType;
typedef enum FGL_AttribCompOrderTag
{
FGL_ATTRIB_ORDER_1ST = 0,
FGL_ATTRIB_ORDER_2ND,
FGL_ATTRIB_ORDER_3RD,
FGL_ATTRIB_ORDER_4TH
} FGL_AttribCompOrder;
// Vertex Shader
typedef enum FGL_AttribTableIdxTag
{
FGL_INPUT_ATTRIB_IDX0,
FGL_INPUT_ATTRIB_IDX1,
FGL_INPUT_ATTRIB_IDX2,
FGL_OUTPUT_ATTRIB_IDX0,
FGL_OUTPUT_ATTRIB_IDX1,
FGL_OUTPUT_ATTRIB_IDX2
} FGL_AttribTableIdx;
// Primitive Engine
typedef enum FGL_PrimitiveTag
{
FGL_PRIM_TRIANGLES,
FGL_PRIM_TRIANGLE_FAN,
FGL_PRIM_TRIANGLE_STRIP,
FGL_PRIM_LINES,
FGL_PRIM_LINE_LOOP,
FGL_PRIM_LINE_STRIP,
FGL_PRIM_POINTS,
FGL_PRIM_POINT_SPRITE
} FGL_Primitive;
typedef enum FGL_ShadingTag
{
FGL_SHADING_FLAT,
FGL_SHADING_SMOOTH
} FGL_Shading;
// Raster Engine
typedef enum FGL_SampleTag
{
FGL_SAMPLE_CENTER,
FGL_SAMPLE_LEFTTOP
} FGL_Sample;
typedef enum FGL_DepthOffsetParamTag {
FGL_DEPTH_OFFSET_FACTOR,
FGL_DEPTH_OFFSET_UNITS,
FGL_DEPTH_OFFSET_R
} FGL_DepthOffsetParam;
typedef enum FGL_FaceTag
{
FGL_FACE_BACK,
FGL_FACE_FRONT,
FGL_FACE_RESERVED,
FGL_FACE_FRONT_AND_BACK = 3
} FGL_Face;
typedef enum FGL_LodCoeffTag
{
FGL_LODCOEFF_DISABLE,
FGL_LODCOEFF_ENABLE_LOD,
FGL_LODCOEFF_ENABLE_DDX,
FGL_LODCOEFF_ENABLE_DDX_LOD,
FGL_LODCOEFF_ENABLE_DDY,
FGL_LODCOEFF_ENABLE_DDY_LOD,
FGL_LODCOEFF_ENABLE_DDY_DDX,
FGL_LODCOEFF_ENABLE_ALL
} FGL_LodCoeff;
// Texture Units
typedef enum FGL_TexTypeTag
{
FGL_TEX_2D = 1,
FGL_TEX_CUBE,
FGL_TEX_3D
} FGL_TexType;
typedef enum FGL_TexelFormatTag
{
FGL_TEXEL_ARGB1555,
FGL_TEXEL_RGB565,
FGL_TEXEL_ARGB4444,
FGL_TEXEL_DEPTH24,
FGL_TEXEL_IA88,
FGL_TEXEL_I8,
FGL_TEXEL_ARGB8888,
FGL_TEXEL_1BPP,
FGL_TEXEL_2BPP,
FGL_TEXEL_4BPP,
FGL_TEXEL_8BPP,
FGL_TEXEL_S3TC,
FGL_TEXEL_Y1VY0U,
FGL_TEXEL_VY1UY0,
FGL_TEXEL_Y1UY0V,
FGL_TEXEL_UY1VY0
} FGL_TexelFormat;
typedef enum FGL_PaletteFormatTag
{
FGL_PALETTE_ARGB1555,
FGL_PALETTE_RGB565,
FGL_PALETTE_ARGB4444,
FGL_PALETTE_ARGB8888
} FGL_PaletteFormat;
typedef enum FGL_TexWrapModeTag
{
FGL_TEX_WRAP_REPEAT,
FGL_TEX_WRAP_FLIP,
FGL_TEX_WRAP_CLAMP
} FGL_TexWrapMode;
typedef enum FGL_CKeySelTag
{
FGL_CKEY_DISABLE,
FGL_CKEY_SEL1,
FGL_CKEY_DISABLE2,
FGL_CKEY_SEL2 = 3
} FGL_CKeySel;
typedef enum FGL_MipMapFilterTag
{
FGL_FILTER_DISABLE,
FGL_FILTER_NEAREST,
FGL_FILTER_LINEAR
} FGL_MipMapFilter;
typedef enum FGL_TexSizeTag {
FGL_TEX_SIZE_1P,
FGL_TEX_SIZE_2P,
FGL_TEX_SIZE_4P,
FGL_TEX_SIZE_8P,
FGL_TEX_SIZE_16P,
FGL_TEX_SIZE_32P,
FGL_TEX_SIZE_64P,
FGL_TEX_SIZE_128P,
FGL_TEX_SIZE_256P,
FGL_TEX_SIZE_512P,
FGL_TEX_SIZE_1024P,
FGL_TEX_SIZE_2048P
} FGL_TexSize;
typedef enum FGL_MipmapLevelTag {
FGL_MIPMAP_MIN_LEVEL,
FGL_MIPMAP_MAX_LEVEL
} FGL_MipmapLevel;
// Per-fragment Unit
typedef enum FGL_PerFragUnitTag
{
FGL_PF_SCISSOR = SET_BIT(0),
FGL_PF_ALPHA = SET_BIT(1),
FGL_PF_STENCIL = SET_BIT(2),
FGL_PF_DEPTH = SET_BIT(3),
FGL_PF_BLENDING = SET_BIT(4),
FGL_PF_LOGICALOP = SET_BIT(5)
} FGL_PerFragUnit;
typedef enum FGL_CompareFuncTag
{
FGL_COMP_NEVER,
FGL_COMP_ALWAYS,
FGL_COMP_LESS,
FGL_COMP_LEQUAL,
FGL_COMP_EQUAL,
FGL_COMP_GREATER,
FGL_COMP_GEQUAL,
FGL_COMP_NOTEQUAL
} FGL_CompareFunc;
typedef enum FGL_StencilActTag
{
FGL_ACT_KEEP,
FGL_ACT_ZERO,
FGL_ACT_REPLACE,
FGL_ACT_INCR,
FGL_ACT_DECR,
FGL_ACT_INVERT,
FGL_ACT_INCRWRAP,
FGL_ACT_DECRWRAP
} FGL_StencilAct;
typedef enum FGL_BlendFuncTag
{ /* source destination */
FGL_BLEND_ZERO, /* ok ok(default) */
FGL_BLEND_ONE, /* ok(default) ok */
FGL_BLEND_SRC_COLOR, /* ok ok */
FGL_BLEND_ONE_MINUS_SRC_COLOR, /* ok ok */
FGL_BLEND_DST_COLOR, /* ok ok */
FGL_BLEND_ONE_MINUS_DST_COLOR, /* ok ok */
FGL_BLEND_SRC_ALPHA, /* ok ok */
FGL_BLEND_ONE_MINUS_SRC_ALPHA, /* ok ok */
FGL_BLEND_DST_ALPHA, /* ok ok */
FGL_BLEND_ONE_MINUS_DST_ALPHA, /* ok ok */
FGL_BLEND_CONSTANT_COLOR, /* ok ok */
FGL_BLEND_ONE_MINUS_CONSTANT_COLOR, /* ok ok */
FGL_BLEND_CONSTANT_ALPHA, /* ok ok */
FGL_BLEND_ONE_MINUS_CONSTANT_ALPHA, /* ok ok */
FGL_BLEND_SRC_ALPHA_SATURATE /* ok n/a */
} FGL_BlendFunc;
typedef enum FGL_BlendEquaTag
{
FGL_EQ_ADD,
FGL_EQ_SUBTRACT,
FGL_EQ_REV_SUBTRACT,
FGL_EQ_MIN,
FGL_EQ_MAX
} FGL_BlendEqua;
typedef enum FGL_LogicalOpTag
{
FGL_OP_CLEAR,
FGL_OP_AND,
FGL_OP_AND_REVERSE,
FGL_OP_COPY,
FGL_OP_AND_INVERTED,
FGL_OP_NOOP,
FGL_OP_XOR,
FGL_OP_OR,
FGL_OP_NOR,
FGL_OP_EQUIV,
FGL_OP_INVERT,
FGL_OP_OR_REVERSE,
FGL_OP_COPY_INVERTED,
FGL_OP_OR_INVERTED,
FGL_OP_NAND,
FGL_OP_SET
} FGL_LogicalOp;
typedef enum FGL_PixelFormatTag
{
FGL_PIXEL_RGB555,
FGL_PIXEL_RGB565,
FGL_PIXEL_ARGB4444,
FGL_PIXEL_ARGB1555,
FGL_PIXEL_ARGB0888,
FGL_PIXEL_ARGB8888
} FGL_PixelFormat;
// Memory Access Arbiter
typedef enum FGL_DMAPriorityTag
{
FGL_DMA_FIXED,
FGL_DMA_ROTATING,
FGL_DMA_PARTIALLY_FIXED
} FGL_DMAPriority;
typedef enum FGL_DMAAccessOrderTag
{
FGL_ORDER_0123,
FGL_ORDER_1230,
FGL_ORDER_2301,
FGL_ORDER_3012
} FGL_DMAAccessOrder;
/****************************************************************************
* Data structures
****************************************************************************/
// global registers (Chapter 0)
#if 0
typedef struct FGL_PipelineStatusTag
{
FG_BOOL isEmptyPF1; // per-fragment #2
FG_BOOL isEmptyPF0; // per-fragment #1
FG_BOOL isEmptyPS1; // pixel shader #2
FG_BOOL isEmptyPS0; // pixel shader #1
FG_BOOL isEmptyRA; // raster engine
FG_BOOL isEmptyTSE; // triangle setup engine
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -