K230 GPU API参考
1. 功能介绍
本模块主要用于加速矢量图形的绘制,可用于绘制菜单等页面等,支持加速部分lvgl绘制。GPU有一系列绘制指令,将绘制指令写入内存,提交地址及指令总长度给GPU后即可开始绘制。本模块支持多边形、二次贝塞尔曲线、三次贝塞尔曲线和椭圆曲线的填充绘制,支持线性渐变色 填充,支持颜色查找表,支持图像合成和混合以及BLIT。
2. 数据流向
GPU软件驱动部分包括设备/dev/vg_lite及其内核模块驱动程序vg_lite.ko,以及用户态函数库libvg_lite.so,libvg_lite.so会打开/dev/vg_lite设备,通过ioctl()及mmap()与内核态的驱动程序进行交互。内核态驱动主要由vg_lite_hal.c实现,vg_lite.c中的函数通过vg_lite_kernel函数调用vg_lite_hal.c中的函数,执行实际的寄存器操作。
注意:驱动不会检查绘制指令中的物理地址,调用VGLite API可以间接读写DDR内存的所有物理地址。
3. 软件接口
软件接口详见软件包中的头文件vg_lite.h。
3.1 主要类型及定义
3.1.1 参数类型
名称 | 类型定义 | 含义 |
---|---|---|
Int32_t | int | 32位有符号整数 |
uint32_t | Unsigned int | 32位无符号整数 |
VG_LITE_S8 | enum vg_lite_format_t | 8位有符号整数坐标 |
VG_LITE_S16 | enum vg_lite_format_t | 16位有符号整数坐标 |
VG_LITE_S32 | enum vg_lite_format_t | 32位有符号整数坐标 |
vg_lite_float_t | float | 单精度浮点数 |
vg_lite_color_t | uint32_t | 32位颜色值 颜色值指定了各种功能中使用的颜色。颜色是用8位RGBA通道形成的。红色通道在颜色值的最低8位,其次是绿色和蓝色通道。alpha通道在颜色值的最高8位。 对于L8目标格式,通过使用默认的ITU-R BT.709转换规则将RGB颜色转换为L8。 |
3.1.2 错误类型 vg_lite_error_t
枚举 | 描述 |
---|---|
VG_LITE_GENERIC_IO | 无法与内核驱动通信 |
VG_LITE_INVALID_ARGUMENT | 非法参数 |
VG_LITE_MULTI_THREAD_FAIL | 多线程错误 |
VG_LITE_NO_CONTEXT | 无上下文错误 |
VG_LITE_NOT_SUPPORT | 功能不支持 |
VG_LITE_OUT_OF_MEMORY | 无可分配的驱动堆内存 |
VG_LITE_OUT_OF_RESOURCES | 无可分配的系统堆内存 |
VG_LITE_SUCCESS | 成功 |
VG_LITE_TIMEOUT | 超时 |
VG_LITE_ALREADY_EXISTS | 对象已存在 |
VG_LITE_NOT_ALIGNED | 数据对齐错误 |
3.1.3 功能枚举
枚举 | 描述 |
---|---|
gcFEATURE_BIT_VG_BORDER_CULLING | 边界剪裁 |
gcFEATURE_BIT_VG_GLOBAL_ALPHA | 全局Alpha |
gcFEATURE_BIT_VG_IM_FASTCLEAR | 快速清除 |
gcFEATURE_BIT_VG_IM_INDEX_FORMAT | 颜色索引 |
gcFEATURE_BIT_VG_PE_PREMULTIPLY | Alpha通道预乘 |
gcFEATURE_BIT_VG_RADIAL_GRADIENT | 径向灰度 |
gcFEATURE_BIT_VG_RGBA2_FORMAT | RGBA2222格式 |
3.2 GPU控制
如果没有特殊说明,那么在调用任何API函数之前,应用程序必须通过调用vg_lite_init来初始化GPU隐式(全局)上下文,该函数将填充特征表、重置快速清除缓冲区、重置合成目标缓冲区,以及分配命令和细分缓冲区。
GPU驱动程序只支持一个当前上下文和一个线程来向GPU发布命令。GPU驱动程序不支持在多个线程/进程中同时运行的多个并发上下文,因为GPU内核驱动程序不支持上下文切换。GPU应用程序在任何时候都只能使用一个上下文来向GPU硬件发出命令。如果GPU应用程序需要切换上下文,应该调用vg_lite_close来关闭当前线程中的当前上下文,然后可以调用vg_lite_init来初始化当前线程中或其他线程/进程中的新上下文。
如果没有特殊说明,则所有函数都返回vg_lite_error_t。