Files
AC707N/SDK/interface/ui/cpu/br35/gpu_port.h
T
huxi dc11ee3fc4 1、添加virfat备份与恢复;
2、修复sensorhub低功耗越界问题;
3、修复rcsp传输相关问题;
4、更新flash_params_v3.bin;
5、修复摄像头、科大讯飞相关问题;
2025-12-26 15:26:30 +08:00

1500 lines
56 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Copyright(C) 2024, JIELI TECHNOLOGY, Inc.
* All right reserved.
*/
/* ------------------------------------------------------------------------------------*/
/**
* @file gpu_port.h
*
* @brief jlgpu 任务管理
*
* @author zhuhaifang@zh-jieli.com
*
* @version V1.0.0
*
* @date 2024-05-21
*/
/* ------------------------------------------------------------------------------------*/
/*
一般流程:
1. module_init GPU 硬件模块初始化
2. create_head 创建新的GPU任务链
3. create_task 创建新的GPU任务
4. 配置、运行任务链
5. free_head 释放任务链
6. module_free 关闭 GPU硬件模块
注:配置参数中有“默认”标志的参数,可根据实际情况配置,也可使用默认值
*/
#ifndef __PUBLIC_GPU_PORT_H__
#define __PUBLIC_GPU_PORT_H__
#include "generic/rect.h"
#include "jlgpu_math.h"
#include "jlgpu_driver.h"
#include "res/resfile.h"
#include "gpu_format.h"
#define JLGPU_ID_NONE (-1) // GPU任务或控件ID 无效或不存在
#define GPU_CACHE_RES_RESIDENT (0XFF)//gpu_cache资源常驻
/* GPU task type defined */
typedef enum {
GPU_TASK_FILL, // color fill task
GPU_TASK_TEXT, // text task
GPU_TASK_DRAW, // custom draw task
GPU_TASK_IMAGE, // image task
GPU_TASK_LINEAR,// linegrad task
GPU_TASK_CUSTOM = 0x0100, // custom GPU task mode
GPU_TASK_TRANS = 0X0200, // affine_to_perspective
} TASK_TYPE;
/* The source of lut tab. */
enum {
CLUT_TAB_NULL,
CLUT_TAB_FROM_FLASH, // lut tab from flash.
CLUT_TAB_FROM_RAM, // lut tab from ram
};
enum {
GPU_SYNTHESIS_AND_DRAW,
GPU_SYNTHESIS,
GPU_DRAW,
GPU_DRAW_EACH_GROUP,
};
/* MASK功能参数 */
struct mask_param {
u8 big_end; // 是否大端,1大端,0小端(默认)
u8 mask_inv; // 是否取反,1取反,0不取反(默认)
int mask_stride; // 行步进
GPU_mask_format_t mask_format; // MASK格式
u8 *mask_data; // mask数据,不支持压缩
struct rect rect; // mask绘制区域
};
/* 变换功能参数 */
struct tran_param { // 变换参数(杰理UI框架必须用框架API配置)
float ratio_w; // 缩放参数,scale_en使能时有效
float ratio_h;
s16 rotate_cx; // 旋转参数,rotate_en使能时有效
s16 rotate_cy;
s16 rotate_dx;
s16 rotate_dy;
float rotate_angle;
u8 sample_mode; // 插值方式:0最近邻,1双线性,3 3x3滤波,4 5x5滤波。注意:没有sample_mode=2的方式
u8 shift_sel; // 右移参数:sample_mode=0/1时,shift_sel=6,其它根据插值系数配置
u8 coeff0; // 高斯模糊参数,gaussian_en使能时有效
u8 coeff1;
u8 coeff2;
u8 coeff3;
u8 coeff4;
u8 coeff5;
};
/* 填充功能参数 */
struct fill_param {
union {
struct mask_param mask; // 填充+MASK
struct tran_param tran; // 填充+变换
};
};
/* 渐变功能参数 */
struct linegrad_param {
u8 lut_lvl; // 颜色点个数,颜色表中颜色值的数量(2^(lut_lvl)+1)个颜色,与clut表颜色个数匹配
u8 spread_mode; // 渐变方式,0一次,1反射,2重复
/*
示例:在点0到点1之间,产生从2到0的渐变
方式: 0一次 1反射 2重复 (spread_mode)
点位置: 0 1 0 1 0 1 (x0,y0)(x1,y1)
|222210000| |101210121| |210210210|
|222210000| |101210121| |210210210|
|222210000| |101210121| |210210210|
*/
/* 一次渐变周期坐标区间,渐变通过clut表,从P0指向P1,向量方向即为渐变方向 */
u16 x0;
u16 y0;
u16 x1;
u16 y1;
struct tran_param tran; // 渐变+变换
};
/* 纹理功能参数 */
struct texture_param {
u8 big_end; // 是否大端,1大端,0小端(默认)
u8 alpha_end; // alpha在高/低位,1低位,0高位(默认)
u8 rbs; // R,B交换,1交换,0不交换(默认)
u8 color_ext_mode;
u8 not_compress; // 数据不压缩,1不压缩,0压缩(默认)。注意:基础参数的image结构体要配置
u8 adr_mode; // 不压缩的数据排列方式,0按块排列,1按行排列(默认)
u8 mmu_page_size; // mmu tab页size,参考GPU_mmu_page_size_tmmu_tab_base不为NULL时有效
u8 *mmu_tab_base; // mmu tab起始地址,不等于NULL时有效
u8 *data; // 纹理起始地址(SRAM/PSRAM/NORFLASH 地址)
u8 *mmu_clut_tab; // 只对mmu_tab_base非NULL时有效, (LX/ALXX/AX格式)纹理颜色表起始地址
u32 mmu_clut_offset; // 只对mmu_tab_base非NULL时有效, 在mmu_clut_tab[0]里的偏移地址
struct rect crop; // 裁剪区域,当crop_en为true时裁剪,否则为{left=0, top=0, width=img_w, height=img_h}
union {
struct mask_param mask; // 纹理+MASK
struct tran_param tran; // 纹理+变换
};
};
/* 基础功能参数 */
typedef struct gpu_task_param {
TASK_TYPE task_type;// must, 任务类型
u32 task_id; // must, 任务ID
u32 element_id; // must, 控件ID
s16 priority; // optional, 优先级,可自行修改,若等于-1,内部会自动按链表顺序赋值
u8 invisible; // optional, 默认隐藏,true 隐藏,false 显示(默认)
u8 global_alpha; // optional, 全局alpha,默认128
u8 blend_mode; // 混合模式,默认GPU_BLEND_SRC_OVER,参照jlgpu_driver.h配置
u8 premult; // alpha预乘,true使能,false不使能(默认)
u8 mask_en; // MASK 使能,true使能(需配置mask参数),false不使能(默认)
u8 perspective_en; // 透视变换使能,true使能(需配置tran参数),false不使能(默认)
u8 scale_en; // 缩放使能,true使能(需配置tran参数),false不使能(默认)
u8 rotate_en; // 旋转使能,true使能(需配置tran参数),false不使能(默认)
u8 crop_en; // 裁剪使能,true使能(需配置纹理中crop参数),false不使能(默认)
u8 draw_en; // 自定义绘图使能,true使能(需配置自定义绘图参数),false不使能(默认)
u8 color_key_en; // 待完善
u8 dither_en;
u8 ext_mode; // 拓展模式使能,true使能,false不使能(默认)
u8 gaussian_en; // 高斯模糊使能,true使能(需配置tran中coeff参数),false不使能(默认)
u8 custom_color; // 自定义颜色,true使能(自动将颜色表颜色改为下面参数颜色),flase不使能(默认)
u8 has_clut; // 颜色表参数,颜色表来源(CLUT_TAB_FROM_FLASH, CLUT_TAB_FROM_RAM, CLUT_TAB_NULL(默认))
u8 clut_format; // 颜色表格式,(ARGB8888(默认), ARGB8565, RGB888, RGB565
u8 gpu_free_data; // 由GPU释放纹理buf标志,true使能(GPU任务销毁时会释放纹理buf),false不使能(默认)
int clut_size; // 颜色表长度
u8 *clut_tab; // 颜色表地址,(has_clut != CLUT_TAB_NULL 时有效),注意:每次配置GPU任务时会释放,需重新malloc buf缓存
/* 颜色值(ARGB8888),纯色填充时,为填充颜色;custom_color使能时,为自定义颜色 */
u8 alpha; // 颜色,透明度(0~100
u8 red; // 颜色,红(8bit
u8 green; // 颜色,绿(8bit
u8 blue; // 颜色,蓝(8bit
GPU_format_t format; // must, 输入颜色格式
gpu_matrix_t *matrix; // optional, 叠加矩阵,一般指父控件矩阵,用于父子控件特效叠加,如果需自己管理矩阵,也可用作自定义矩阵
struct rect area; // must, 限制区域,相当于父控件区域,绘图最终必须落在area范围内
struct rect draw; // must, 绘制区域,当前任务要绘制到哪个区域,相对于0坐标计算
float offset_x;
float offset_y;
struct image_file image; // 从flash读取数据时的图片信息
struct flash_file_info info; // flash 信息
/* 自定义绘图参数,draw_en使能时才会生效 */
void (*cb_func);
void (*cb_exit);
void *priv;
u32 priv_len;
int draw_id;
/************ 自定义绘图参数结束 ***********/
/* 功能参数,根据不同的功能进行配置 */
union {
struct fill_param fill; // 填充功能
struct linegrad_param linegrad; // 渐变功能
struct texture_param texture; // 纹理功能
};
} JLGPUTaskParam_t, *pJLGPUTaskParam_t;
// GPU任务公共的基础参数初始化,默认设置,所有GPU任务默认设置都一致
#define jlgpu_task_basic_param_init(tsk_type, tsk_id, elm_id) \
JLGPUTaskParam_t task_param = {0}; \
task_param.task_type = (tsk_type); \
task_param.task_id = (tsk_id); \
task_param.element_id = (elm_id); \
task_param.global_alpha = 128; \
task_param.blend_mode = GPU_BLEND_SRC_OVER; \
task_param.dither_en = 1; \
task_param.premult = 1; \
task_param.priority = -1; \
#define jlgpu_task_texture_big_endian_enable(big_endian) \
task_param.texture.big_end = big_endian; //字库buf字节位序翻转
// 填充任务的参数初始化
#define jlgpu_task_fill_param_init(task_id, elm_id, a, r, g, b) \
jlgpu_task_basic_param_init(GPU_TASK_FILL, task_id, elm_id); \
task_param.alpha = (a); \
task_param.red = (r); \
task_param.green = (g); \
task_param.blue = (b); \
// 渐变任务的参数初始化
#define jlgpu_task_linegrad_param_init(task_id, elm_id) \
jlgpu_task_basic_param_init(GPU_TASK_LINEAR, task_id, elm_id); \
// 纹理任务的参数初始化
#define jlgpu_task_texture_param_init(task_id, elm_id) \
jlgpu_task_basic_param_init(GPU_TASK_IMAGE, task_id, elm_id); \
task_param.texture.mmu_page_size = MMU_PAGE_4K; \
task_param.texture.adr_mode = 1; \
// 3x3高斯模糊参数配置
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 1; \
// (tran)->coeff2 = 56; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 2; \
// (tran)->coeff2 = 52; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 3; \
// (tran)->coeff2 = 48; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 4; \
// (tran)->coeff2 = 44; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 5; \
// (tran)->coeff2 = 40; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 6; \
// (tran)->coeff2 = 36; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 7; \
// (tran)->coeff2 = 32; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 8; \
// (tran)->coeff2 = 28; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 9; \
// (tran)->coeff2 = 24; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
#define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 3; \
(tran)->shift_sel = 6; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 10; \
(tran)->coeff2 = 20; \
(tran)->coeff3 = 0; \
(tran)->coeff4 = 0; \
(tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 11; \
// (tran)->coeff2 = 16; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
// #define jlgpu_task_param_3x3_gaussian_low_level(param, tran) \
// (param)->gaussian_en = 1; \
// (tran)->sample_mode = 3; \
// (tran)->shift_sel = 6; \
// (tran)->coeff0 = 1; \
// (tran)->coeff1 = 12; \
// (tran)->coeff2 = 12; \
// (tran)->coeff3 = 0; \
// (tran)->coeff4 = 0; \
// (tran)->coeff5 = 0;
#define jlgpu_task_param_3x3_gaussian_middle_level(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 3; \
(tran)->shift_sel = 5; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 5; \
(tran)->coeff2 = 8; \
(tran)->coeff3 = 0; \
(tran)->coeff4 = 0; \
(tran)->coeff5 = 0;
#define jlgpu_task_param_3x3_gaussian_high_level(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 3; \
(tran)->shift_sel = 4; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 2; \
(tran)->coeff2 = 4; \
(tran)->coeff3 = 0; \
(tran)->coeff4 = 0; \
(tran)->coeff5 = 0;
// 5x5高斯模糊参数配置
#define jlgpu_task_param_5x5_gaussian_level0(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 4; \
(tran)->shift_sel = 9; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 5; \
(tran)->coeff2 = 24; \
(tran)->coeff3 = 10; \
(tran)->coeff4 = 62; \
(tran)->coeff5 = 84;
#define jlgpu_task_param_5x5_gaussian_level1(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 4; \
(tran)->shift_sel = 8; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 3; \
(tran)->coeff2 = 15; \
(tran)->coeff3 = 6; \
(tran)->coeff4 = 24; \
(tran)->coeff5 = 48;
#define jlgpu_task_param_5x5_gaussian_level2(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 4; \
(tran)->shift_sel = 7; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 2; \
(tran)->coeff2 = 8; \
(tran)->coeff3 = 4; \
(tran)->coeff4 = 11; \
(tran)->coeff5 = 16;
#define jlgpu_task_param_5x5_gaussian_level3(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 4; \
(tran)->shift_sel = 6; \
(tran)->coeff0 = 1; \
(tran)->coeff1 = 1; \
(tran)->coeff2 = 4; \
(tran)->coeff3 = 2; \
(tran)->coeff4 = 5; \
(tran)->coeff5 = 8;
#define jlgpu_task_param_5x5_gaussian_level4(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 4; \
(tran)->shift_sel = 6; \
(tran)->coeff0 = 2; \
(tran)->coeff1 = 2; \
(tran)->coeff2 = 3; \
(tran)->coeff3 = 3; \
(tran)->coeff4 = 3; \
(tran)->coeff5 = 4;
#define jlgpu_task_param_5x5_gaussian_level5(param, tran) \
(param)->gaussian_en = 1; \
(tran)->sample_mode = 4; \
(tran)->shift_sel = 10; \
(tran)->coeff0 = 41; \
(tran)->coeff1 = 41; \
(tran)->coeff2 = 41; \
(tran)->coeff3 = 41; \
(tran)->coeff4 = 41; \
(tran)->coeff5 = 40;
// 自定义绘图回调
typedef struct gpu_task_draw {
void (*cb_func)(int id, u8 *dst_buf, struct rect *dst_r, struct rect *src_r, u8 bytes_per_pixel, void *priv, void *matrix);
void (*cb_exit)(void *draw_info, void *priv);
void *priv;
int priv_len;
int draw_id;
struct rect task_r;
} JLGPUTaskDraw_t, *pJLGPUTaskDraw_t;
/* ------------------------------------------------------------------------------------*/
/**
* @brief rect_to_bbox rect结构体转gpu_boundbox_t结构体
*
* @Params rect rect结构体指针
* @Params bbox bbox结构体指针
*
* @return void
*/
/* ------------------------------------------------------------------------------------*/
#define rect_to_bbox(rect, bbox) { \
(bbox)->minx = (rect)->left; \
(bbox)->maxx = (rect)->left + (rect)->width; \
(bbox)->miny = (rect)->top; \
(bbox)->maxy = (rect)->top + (rect)->height; \
}
/* ------------------------------------------------------------------------------------*/
/**
* @brief bbox_to_rect gpu_boundbox_t结构体转rect结构体
*
* @Params bbox bbox结构体指针
* @Params rect rect结构体指针
*
* @return void
*/
/* ------------------------------------------------------------------------------------*/
#define bbox_to_rect(bbox, rect) { \
(rect)->left = (bbox)->minx; \
(rect)->width = (bbox)->maxx - (bbox)->minx; \
(rect)->top = (bbox)->miny; \
(rect)->height = (bbox)->maxy - (bbox)->miny; \
}
/* GPU task information structure defined.
Cache required, resources must be saved. */
typedef struct gpu_task_info {
u32 rev1: 16; // 预留
u32 need_free_data: 1; // 是否由GPU释放数据buf
u32 matrix_from_task: 1; // 拷贝链表从gpu链表获取的矩阵
u32 own_matrix: 1; // 矩阵是否属于自己标志(1自己申请的矩阵,0继承的父控件矩阵)
u32 enable: 1; // enable
u32 priority: 12; // 优先级
//4bytes
u32 image_width: 11; //
u32 image_height: 11; //
u32 group: 10; //
//8bytes
u32 task_id; // 任务ID
u32 element_id; // 控件ID
//16bytes
u8 *clut_tab; // 颜色表
gpu_matrix_t *matrix; // 当前任务的变换矩阵
pJLGPUTaskDraw_t draw_info; // custom draw
//19bytes
} JLGPUTaskInfo_t, *pJLGPUTaskInfo_t;
/* GPU task unit structure defined. */
typedef struct gpu_task_unit {
JLGPUTaskInfo_t info; // GPU task information structure.
u32 task_addr; // GPU task instructions address.
} JLGPUTaskUnit_t, *pJLGPUTaskUnit_t;
/* GPU task chain head structure defined. */
typedef struct gpu_task_head {
gpu_out_params_t out_param; // GPU output instructions structure.
struct rect win_rect;
void *gpu_task_base_adr; // First GPU task instructions address.
} JLGPUTaskHead_t, *pJLGPUTaskHead_t;
enum HEAD_STATUS {
HEAD_STATUS_IDLE,
HEAD_STATUS_READY,
};
typedef struct gpu_head_list {
pJLGPUTaskHead_t head;
enum HEAD_STATUS status;
u8 index;
} JLGPUMultHeadList_t, *pJLGPUMultHeadList_t;
/* Multi task chain management unit structure defined. */
typedef struct gpu_mult_list {
struct list_head list; // list node.
JLGPUMultHeadList_t head_list[3];
pJLGPUMultHeadList_t curr_head;
pJLGPUMultHeadList_t last_head;
pJLGPUTaskHead_t head; // Head pointer of GPU task chain.
struct rect win_rect;
struct rect gpu_rect;
struct rect lcd_rect;
u8 index; // Index of GPU task chain, unique correspondence with head.
} JLGPUMultTaskList_t, *pJLGPUMultTaskList_t;
/* ================================= GPU 模块接口 ================================= */
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_module_init GPU模块初始化
*
* @Params malloc 内存申请回调
* @Params free 内存释放回调
* @Params screen_width 屏幕宽度
* @Params screen_height 屏幕高度
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_module_init(
void *(*malloc)(int size, u32 ram_type, u32 module_type),
void (*free)(void *p, u32 ram_type, u32 module_type),
u16 screen_width, u16 screen_height);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_module_free GPU模块关闭
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_module_free();
/* ================================= GPU 任务链接口 ================================= */
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_create_task_list_head 创建GPU任务链
*
* @return NULL 创建失败,其它 创建成功
*
* @note 链表头用malloc的buf缓存,释放时需用delete接口释放
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskHead_t jlgpu_create_task_list_head();
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_free_all_task 释放指定任务链中的所有任务
*
* @Params head GPU链表头
*
* @note 只释放gpu任务,不释放链表头
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_free_all_task(pJLGPUTaskHead_t head);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_delete_task_list_head 删除GPU任务链
*
* @Params head GPU任务链头
*
* @note 会释放任务链中所有的GPU任务,并将任务链头释放掉
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_delete_task_list_head(pJLGPUTaskHead_t head);
pJLGPUTaskHead_t jlgpu_shadow_task_list_head(pJLGPUTaskHead_t head); // 内部使用
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_task_list_out_format 设置GPU任务链输出格式
*
* @Params head GPU任务链头
* @Params out_format GPU任务链输出格式
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_task_list_out_format(pJLGPUTaskHead_t head, GPU_out_format_t out_format);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_task_list_out_rbs 设置GPU任务链输出R、B是否交换
*
* @Params head GPU任务链头
* @Params rbs R、B是否交换,0不交换(默认), 1交换
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_task_list_out_rbs(pJLGPUTaskHead_t head, u8 rbs);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_task_list_out_rgba 设置GPU任务链输出 alpha 位置
*
* @Params head GPU任务链头
* @Params rgba alpha排列方式,0 alpha在高位(默认)1 alpha在低位
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_task_list_out_rgba(pJLGPUTaskHead_t head, u8 rgba);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_task_list_out_endian 设置GPU任务链输出大小端
*
* @Params head GPU任务链头
* @Params endian 大小端选择,0 小端(默认),1 大端
*
* @note 只支持Bpp<8或RGB565
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_task_list_out_endian(pJLGPUTaskHead_t head, u8 endian);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_get_task_list_out_format 获取任务链输出格式
*
* @Params head 任务链表头
*
* @return 输出格式
*/
/* ------------------------------------------------------------------------------------*/
GPU_out_format_t jlgpu_get_task_list_out_format(pJLGPUTaskHead_t head);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_task_list_out_buf 设置GPU任务链绘制区域和buf
*
* @Params head GPU任务链头
* @Params out_buf 输出buf指针
* @Params rect 本次输出区域
* @Params left 左右移动步进
* @Params stride 移动时的行步进,left != 0时有效
*
* @note 这里的rect与out_buf大小对应,每次run任务链之前进行配置,rect为每个分块的区域,out_buf为每个分块的输出buf
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_task_list_out_buf(pJLGPUTaskHead_t head, u8 *out_buf, struct rect *rect, int left, int stride);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_list_run 启动GPU任务链合成绘制
*
* @Params head GPU任务链头
*
* @note 本函数会等GPU合成完毕才退出,退出时out_buf已经是GPU混合好的输出数据
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_list_run(pJLGPUTaskHead_t head);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_list_reorder GPU任务链按照priority重排序
*
* @Params head GPU任务链头
*
* priority默认按照GPU任务创建顺序递增,修改priority后需重排才能调整GPU混合顺序
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_list_reorder(pJLGPUTaskHead_t head);
/* ================================= 特效接口 ================================= */
// 创建&拷贝gpu任务链
pJLGPUTaskHead_t jlgpu_task_list_copy_create_with_backcolor(u32 backcolor, pJLGPUTaskHead_t head, gpu_matrix_t *matrix, int group);
// 拷贝gpu任务链
pJLGPUTaskHead_t jlgpu_task_list_copy_create(pJLGPUTaskHead_t new_head, pJLGPUTaskHead_t head, gpu_matrix_t *matrix, int group);
// 释放拷贝的gpu任务链
void jlgpu_task_list_copy_destroy(pJLGPUTaskHead_t head);
// 更新指定group的gpu任务矩阵
int jlgpu_task_list_copy_update_matrix_by_group(pJLGPUTaskHead_t new_head, pJLGPUTaskHead_t head, int group);
// 指定group的gpu任务进行矩阵相乘
void jlgpu_task_list_copy_mul_matrix_by_group(pJLGPUTaskHead_t head, gpu_matrix_t *matrix, int group);
// 显示/隐藏指定group的gpu任务
void jlgpu_task_list_copy_enable_by_group(pJLGPUTaskHead_t head, int group, int enable);
// 销毁指定group的gpu任务
void jlgpu_task_list_copy_destroy_by_group(pJLGPUTaskHead_t head, int group);
// 链表指令顺序重排
int jlgpu_task_list_copy_group_order_adjust(pJLGPUTaskHead_t head, u8 *order_tab, int order_tab_size);
// 链表指令透明度重置
int jlgpu_task_list_copy_group_global_alpha_reset(pJLGPUTaskHead_t head, u8 *order_tab, u8 *global_alpha_tab, int global_alpha_tab_size);
/* ================================= GPU 任务接口 ================================= */
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_create_task 创建GPU任务,并添加到head链表中
*
* @Params head GPU任务链头
* @Params param GPU任务参数
*
* @return NULL 创建任务失败,其它 创建的GPU任务单元
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_create_task(pJLGPUTaskHead_t head, pJLGPUTaskParam_t param);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_update_task 更新GPU任务单元
*
* @Params taskp GPU任务单元
* @Params param GPU任务参数
*
* @return GPU任务单元,传入的taskp
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_update_task(pJLGPUTaskUnit_t taskp, pJLGPUTaskParam_t param);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_delete_task 删除GPU任务单元
*
* @Params head GPU任务链头
* @Params taskp GPU任务单元(待删除的单元)
*
* @return 0 删除成功,-1 删除失败(任务单元不在任务链中)
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_delete_task(pJLGPUTaskHead_t head, pJLGPUTaskUnit_t taskp);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_get_task_rect 获取GPU任务的绘制区域
*
* @Params taskp GPU任务单元
* @Params rect GPU任务单元的绘制区域(输出)
*
* @note GPU绘制区域会有一定的映射,与配置进去的区域不一定相同
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_get_task_rect(pJLGPUTaskUnit_t taskp, struct rect *rect);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_get_win_rect 获取GPU绘制窗口区域
*
* @Params rect GPU窗口区域(输出)
*
* @note GPU模块初始化后才能获取,GPU模块会根据屏幕宽高映射到一定坐标
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_get_win_rect(struct rect *rect);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_win_rect 设置GPU绘制窗口区域
*
* @Params rect GPU窗口区域(输入)
*
* @note GPU模块初始化后,可以通过本接口移动窗口位置,满足需移动到0坐标的特效使用
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_win_rect(struct rect *rect);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_shift_rect 将rect方框区域映射到GPU绘制窗口内
*
* @Params rect 待映射的区域(输入&输出)
*
* @note 未创建GPU任务的方框区域(相对于0坐标),可通过本接口映射到GPU绘制窗口内
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_shift_rect(struct rect *rect);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_new_mode 通过参数获取gpu任务类型
*
* @param param gpu参数
*
* @return GPU任务类型
*/
/* ------------------------------------------------------------------------------------*/
u8 jlgpu_task_new_mode(pJLGPUTaskParam_t param);
/* ================================= 通过ID操作任务接口 ================================= */
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_get_task_by_id 通过ID在任务链中搜素任务
*
* @Params head GPU任务链头
* @Params task_id GPU任务ID
* @Params element_id 控件ID
*
* @return NULL 未找到GPU任务,其它 从GPU任务链中找到的任务单元
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_get_task_by_id(pJLGPUTaskHead_t head, u32 task_id, u32 element_id);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_enable_by_id 通过ID设置GPU任务的使能
*
* @Params head GPU任务链头
* @Params task_id 任务ID
* @Params element_id 控件ID
* @Params enable 使能标志,1使能,0不使能
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_enable_by_id(pJLGPUTaskHead_t head, u32 task_id, u32 element_id, int enable);
void jlgpu_task_enable(pJLGPUTaskUnit_t taskp, int enable);
void jlgpu_task_layer_enable(pJLGPUTaskHead_t head, int enable);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_delete_by_id 通过ID删除GPU任务
*
* @Params head 任务链头
* @Params task_id 任务ID
* @Params element_id 控件ID
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_delete_by_id(pJLGPUTaskHead_t head, u32 task_id, u32 element_id);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_set_prior_by_id 通过ID设置GPU任务优先级
*
* @Params head 任务链头
* @Params task_id 任务ID
* @Params element_id 控件ID
* @Params priority 优先级
* @Params reorder 是否重新排序,true 是,false 否
*
* @note 如果需设置多个优先级,可在都设置完后再调用一次重新排序,不必每次都排序
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_set_prior_by_id(pJLGPUTaskHead_t head, u32 task_id, u32 element_id, u32 priority, int reorder);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_clean_up_by_id 清空指定控件ID下超过某索引的GPU任务
*
* @Params head 任务链头
* @Params element_id 控件ID
* @Params task_index 需要删除的GPU任务索引起始值
*
* @note 可将element_id理解为组,task_id理解为组内按顺序增长的索引,这里删除某组内超过task_index索引的GPU任务
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_clean_up_by_id(pJLGPUTaskHead_t head, u32 element_id, u8 task_index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_clean_up_by_id 清空指定控件ID下超过某索引的GPU任务
*
* @Params head 任务链头
* @Params element_id 控件ID
* @Params task_index 需要删除的GPU任务索引起始值
* @Params sync 同步回调接口(适用于双链表)
*
* @note 可将element_id理解为组,task_id理解为组内按顺序增长的索引,这里删除某组内超过task_index索引的GPU任务
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_task_clean_up_sync_by_id(pJLGPUTaskHead_t head, u32 element_id, u8 task_index, int (*wait_sync)(void));
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_find_task_by_id 通过ID查找匹配的GPU任务配置
*
* @Params head 任务链头
* @Params task_id 任务ID
* @Params element_id 控件ID
*
* @return NULL GPU任务单元不存在,其它 找到匹配的的GPU任务单元
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_find_task_by_id(pJLGPUTaskHead_t head, u32 task_id, u32 element_id);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_update_task_by_id 通过ID更新GPU任务配置
*
* @Params head 任务链头
* @Params task_id 任务ID
* @Params element_id 控件ID
* @Params param 任务配置参数
*
* @return NULL 配置失败,其它 更新了配置的GPU任务单元
*
* @note 当任务链中不存在指定任务时,这里会重新创建,返回NULL表示创建失败
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_update_task_by_id(pJLGPUTaskHead_t head, u32 task_id, u32 element_id, pJLGPUTaskParam_t param);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_find_first_task 获取任务链的第一个任务
*
* @Params head 任务链头
*
* @return NULL 任务不存在,其它 任务链的第一个任务
*
* @note 无
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_task_find_first_task(pJLGPUTaskHead_t head);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_find_next_task 获取当前任务的下一个任务
*
* @Params curr_task 当前任务
*
* @return NULL 任务不存在,其它 当前任务的下一个任务
*
* @note 如果当前任务为所在任务链的最后一个任务,则返回NULL
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskUnit_t jlgpu_find_next_task(pJLGPUTaskUnit_t curr_task);
/* ================================= 多任务链管理接口 ================================= */
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_get_common_root 获取多任务链管理句柄
*
* @return 多任务链管理句柄
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUMultTaskList_t jlgpu_mult_task_list_get_common_root();
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_check 检查多任务链管理句柄是否合法
*
* @Params mult_list 待检查的多任务链管理句柄
*
* @return 1 多任务链管理句柄合法,0 多任务链管理句柄不合法
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_mult_task_list_check(pJLGPUMultTaskList_t mult_list);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_switch_root 切换多任务链管理句柄
*
* @Params mult_list 当前使用的多任务链管理句柄
*
* @return 影子组多任务链管理句柄
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUMultTaskList_t jlgpu_mult_task_list_switch_root(pJLGPUMultTaskList_t mult_list);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_get_head_num 获取多任务链管理句柄管理的任务链条数
*
* @Params mult_list 多任务链管理句柄
*
* @return 多任务链管理句柄管理的任务链数量
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_mult_task_list_get_head_num(pJLGPUMultTaskList_t mult_list);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_add 增加任务链到多任务链管理句柄管理
*
* @Params mult_list 多任务链管理句柄
* @Params task_head 待加入管理的GPU任务链
* @Params index GPU任务链索引
*
* @return 0添加成功,1添加失败
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_mult_task_list_add(pJLGPUMultTaskList_t mult_list, pJLGPUTaskHead_t task_head, u8 index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_del 从任务链管理句柄删除GPU任务链
*
* @Params mult_list 多任务链管理句柄
* @Params task_head 待从多任务链管理句柄删除的任务链
*
* @return false 删除失败,true 删除成功
*
* @note 这里只会从多任务链管理句柄剔除任务链,并不会释放任务链本身。要释放任务链需用任务链清空接口
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_mult_task_list_del(pJLGPUMultTaskList_t mult_list, pJLGPUTaskHead_t task_head);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_clr 清空多任务链管理句柄管理的任务链
*
* @Params mult_list 多任务链管理句柄
*
* @return 0 清空成功,1 清空失败
*
* @note 注意,这里会释放句柄中管理的所有任务链
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_mult_task_list_clr(pJLGPUMultTaskList_t mult_list);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_list_sync_shadow 同步影子组多任务链管理句柄
*
* @Params mult_list 当前使用的多任务链管理句柄
*
* @return 影子组多任务链管理器句柄
*
* @notes 注意,这里会将当前使用的多任务链管理句柄拷贝一份放到影子组,GPU任务链使用的内存增长一倍
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUMultTaskList_t jlgpu_mult_task_list_sync_shadow(pJLGPUMultTaskList_t mult_list);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_head_by_index 通过index获取GPU任务链
*
* @Params mult_list 多任务链管理句柄
* @Params index 需获取的GPU任务链索引
*
* @return NULL 获取失败,其它 获取成功
*/
/* ------------------------------------------------------------------------------------*/
pJLGPUTaskHead_t jlgpu_mult_task_head_by_index(pJLGPUMultTaskList_t mult_list, int index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_mult_task_head_modify_by_index 替换指定索引的GPU任务链
*
* @Params mult_list 多任务链管理句柄
* @Params index GPU任务链索引
* @Params new_head 新的GPU任务链
*
* @return 0 替换成功,-1 替换失败
*
* @note 注意,这里会将指定索引的GPU任务链替换,如果原GPU任务链未记录或未释放,可能出现内存泄露
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_mult_task_head_modify_by_index(pJLGPUMultTaskList_t mult_list, int index, pJLGPUTaskHead_t new_head);
int jlgpu_mult_task_head_set_rect_by_index(pJLGPUMultTaskList_t mult_list, int index, struct rect *page_r, struct rect *gpu_r, struct rect *lcd_r);
int jlgpu_mult_task_head_get_rect_by_index(pJLGPUMultTaskList_t mult_list, int index, struct rect *page_r, struct rect *gpu_r, struct rect *lcd_r);
pJLGPUTaskHead_t jlgpu_mult_task_head_idle_by_index(pJLGPUMultTaskList_t mult_list, u8 index, pJLGPUTaskHead_t curr_head);
int jlgpu_mult_task_list_get(pJLGPUMultTaskList_t mult_list, int *index_tab);
int jlgpu_mult_task_list_del_by_index(pJLGPUMultTaskList_t mult_list, u8 index);
void jlgpu_driver_fill_enchange_perspective(void *p, int clip_x_min, int clip_x_max, int clip_y_min, int clip_y_max);
void jlgpu_driver_texture_enchange_perspective(void *p, int clip_x_min, int clip_x_max, int clip_y_min, int clip_y_max);
void jlgpu_driver_set_clut_addr(void *p, u32 clut_addr);
/* ================================= 调试打印接口 ================================= */
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_dump_task_head 打印GPU任务链头配置
*
* @Params head GPU任务链头
*
* @note 这里只打印任务链头信息,不打印任务链中的任务信息
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_dump_task_head(pJLGPUTaskHead_t head);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_dump_task_info 打印GPU任务单元信息
*
* @Params task 任务单元指针
* @Params count 当前任务个数
*
* @note count 参数在打印多个任务单元时用作区分,打印时会将count打印出来,本身不具有含义
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_dump_task_info(pJLGPUTaskUnit_t task, int count);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_dump_all_task 打印任务链中所有信息
*
* @Params head 任务链头
* @Params func 调用本接口的函数,一般用 __func__ 即可
* @Params line 调用本接口的行数,一般用 __LINE__ 即可
*
* @note 这里会将任务链头及任务链中所有任务信息都打印出来
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_dump_all_task(pJLGPUTaskHead_t head, const char *func, int line);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_dump_mult_list_node 打印GPU多任务链管理单元
*
* @Params mult_list GPU多任务链管理单元
* @Params dump_task_unit 是否打印具体GPU任务信息
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_dump_mult_list_node(pJLGPUMultTaskList_t mult_list, u8 dump_task_unit);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_dump_mult_list 打印多任务链管理句柄
*
* @Params dump_task_unit 是否打印具体任务信息
* 1 将所有任务链的任务单元信息打印;
* 0 只打印多任务链管理有那些任务链,不打印具体任务信息;
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_dump_mult_list(u8 dump_task_unit);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_get_res_len 通过gpu任务获取资源大小
*
* @param task_addr gpu访问的地址
*
* @return
> 0 资源长度
0 获取不到长度(压缩方式不支持)
-1 任务格式不匹配(非纹理)
*/
/* ------------------------------------------------------------------------------------*/
int jlgpu_task_get_res_len(void *task_addr);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_get_res_info
*
* @param task_addr gpu任务地址
* @param len addr长度(bytes)
当资源为res_mmu时,返回res_mmu长度*4bytes
当资源为非res_mmu时,返回资源实际长度bytes
*
* @return 资源地址
*/
/* ------------------------------------------------------------------------------------*/
void *jlgpu_task_get_res_info(void *task_addr, int *len);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_task_get_mask_info
*
* @param task_addr gpu任务地址
* @param len mask_len 长度
*
* @return mask地址
*/
/* ------------------------------------------------------------------------------------*/
void *jlgpu_task_get_mask_info(void *task_addr, int *len);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_get_matrix 从gpu任务里获取矩阵
*
* @Params task 任务单元指针
* @Params matrix 矩阵指针
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_get_matrix(pJLGPUTaskUnit_t task, gpu_matrix_t *matrix);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_matrix 设置矩阵到gpu任务里
*
* @Params task 任务单元指针
* @Params matrix 矩阵指针
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_matrix(pJLGPUTaskUnit_t task, gpu_matrix_t *matrix);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_set_texture_big_end 设置纹理的大小端排列(只支持bpp<8 or RGB565格式)
*
* @Params task 任务单元指针
* @Params big_end 字节顺序
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_set_texture_big_end(pJLGPUTaskUnit_t task, int big_end);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_set_alloc_cb 注册cache申请数据的接口,不注册时默认使用psram
*
* @param malloc
* @param free
*/
/* ------------------------------------------------------------------------------------*/
void gpu_input_stream_cache_set_alloc_cb(void *(*malloc)(int size, u32 ram_type, u32 module_type), void (*free)(void *buf, u32 ram_type, u32 module_type));
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_init 初始化gpu cache 模块
*
* @param read_cb 读数据回调
* @param free_cache 释放cache数据回调
*/
/* ------------------------------------------------------------------------------------*/
void gpu_input_stream_cache_init(void (*read_cb)(void *priv, void *dst, void *src, int len), int (*free_cache)(void *cache));
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_free 释放cache模块句柄,需要先清空数据再释放
*/
/* ------------------------------------------------------------------------------------*/
void gpu_input_stream_cache_free();
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_add 加载数据
*
* @param priv 私有句柄,传文件句柄、资源地址等
* @param data 需要拷贝的数据地址
* @param len 拷贝数据长度
* @param check 数据特征值,可以是crc、hash,或者其他规则
* @param mmu_tb 是否使用flash_mmu
* @param mmu_size flash_mmu大小
*
* @param note vaild = BIT(1)|BIT(0)
* @return
*/
/* ------------------------------------------------------------------------------------*/
void *gpu_input_stream_cache_add(void *priv, void *data, int len, u32 check, void *mmu_tb, int mmu_size);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_add_with_callback 支持数据私有回调
*
* @param priv
* @param data
* @param len
* @param check
* @param mmu_tb
* @param mmu_size
* @param read_cb
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
void *gpu_input_stream_cache_add_with_callback(void *priv, void *data, int len, u32 check, void *mmu_tb, int mmu_size, void (*read_cb)(void *priv, void *dst, void *src, int len));
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_del 清cache数据
*
* @param cache_addr cache地址
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_del(void *cache_addr);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_check 通过特征值check找资源地址
*
* @param check
*
* @return 返回cache资源地址,如果资源不存在则返回NULL
*/
/* ------------------------------------------------------------------------------------*/
void *gpu_input_stream_cache_check(u32 check);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_realloc 更新cache缓存buf的大小
*
* 注意:这里是重新申请一个指定大小的buf,原来的buf会被释放掉
*
* @Params size 新buf需要的大小
* @Params check 校验值
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
void *gpu_input_stream_cache_realloc(int size, u32 check);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_invaild_all_by_index 将所有数据的index标记为无效(按bit管理)
*
* @param index 0~7 all data vaild &= ~BIT(index)
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_invaild_all_by_index(u8 index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_vaild_value_set_by_index 设置有效值(按数值管理)vaild = 0xff不自减
*
* @param cache_addr
* @param value 有效值
*
* @return
*
* @note gpu_input_stream_cache_vaild_set_by_index作废
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_vaild_value_set_by_index(u32 cache_addr, u8 value);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_vaild_sub 所有vaild自减(按数值管理),vaild = 0xff不自减
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_vaild_sub();
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_vaild_add_by_addr 有效值自增(按数值管理)
*
* @param cache_addr
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_vaild_add_by_addr(u32 cache_addr);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_clr_all_invaild 将所有vaild 为0的数据清除
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_clr_all_invaild();
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_clr_non_resident 清空非常驻资源(有效值非0也会清除)
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_clr_non_resident();
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_clr_resident 清空常驻资源(有效值非0也会清除)
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_clr_resident();
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_reset 清空cache数据(常驻非常驻资源均清空)
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_reset();
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_set_index
* 设置资源归宿索引,用于多链表管理
* 与 gpu_input_stream_cache_vaild_add_by_addr 联用
*
* @param cache_addr
* @param index0~255
*
* @return
*
* @default index = 0,没有设置时,资源索引为0
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_set_index(u32 cache_addr, u8 index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_vaild_sub_by_index
* 按资源index,将有效值-1vaild= 0xff的资源不自减
* 需要先设置资源索引 gpu_input_stream_cache_set_index
*
* @
*
* @param index: 0~255
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_vaild_sub_by_index(u8 index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_clr_by_index 按索引清理资源
*
* @param index 链表索引(dc->index
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_clr_by_index(u8 index);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_addr_check 检查资源是否存在psram(通过gpu_cache接口管理)
*
* @param adr
* @param len
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_addr_check(u32 adr, int len);
/* ------------------------------------------------------------------------------------*/
/**
* @brief gpu_input_stream_cache_dump 打印gpu_cache信息
*
* @param index -1:打印所有信息,0~255:按链表索引打印
*
* @return
*/
/* ------------------------------------------------------------------------------------*/
int gpu_input_stream_cache_dump(int index, const char *func, int line);
/* ------------------------------------------------------------------------------------*/
/**
* @brief jlgpu_check_res_all_task
*
* @param head 任务链表头
* @param gpu_cache_check
校验gpu_cache资源(nandflash+psram版本)
1:校验不过时打印信息,
2:校验不过时打印信息并触发断言
* @param func 调用函数
* @param line 调用行号
*/
/* ------------------------------------------------------------------------------------*/
void jlgpu_check_res_all_task(pJLGPUTaskHead_t head, int gpu_cache_check, const char *func, int line);
#endif