2021-01-29

TI芯片中的图形和显示

  1. 图形和显示
    此SDK支持的TI SoC设备系列具有专用硬件块,用于加速3D图形和显示合成。此页提供有关这些硬件块支持的功能的详细信息。
    1.1. 介绍
    像AM335x、AM437x、AM57xx和AM65xx这样的TI SOC都支持3D内核,能够使用专用硬件加速3D操作。专用硬件是基于SGX系列设备的想象技术。图形内核只加速图形操作,不执行视频解码操作。有关视频加速,请参阅SOC的相应技术参考手册。
    下表列出了此SDK支持的各种TI系列,以及SGX核心信息
TI SOC Name	SGX Core	SGX Core Revision	Max SGX Core Frequency (MHz)
AM335x	SGX530	1.2.5	200
AM437x	SGX530	1.2.5	200
AM57xx	SGX544	1.1.6	532
AM65xx	SGX544	1.1.7	450

表:TI系统芯片和SGX内核
AM家族中的SGX内核支持OpenGL®ES 1.1和OpenGL®ES 2.0 api。
OpenGL®ES和EGL®库打包在处理器SDK Linux中,并被Wayland/Weston等图形栈使用。驱动程序运行在ARM内核上,并通过用户应用程序提交的渲染命令对运行在GPU内核中的固件进行编程。
本页的其余部分将涵盖以下主题:
•图形软件架构
•关于如何运行图形演示的说明
•关于如何运行DSS应用程序的说明
•关于如何启动Weston的说明
•关于如何运行PVR工具的说明
•SoC性能监控工具
•QT和GTK+图形框架
•迁移指南
•AM3 Beagle Bone黑板配置
•SGX调试提示
1.2. 软件体系结构
下图显示了Linux处理器SDK中图形的软件架构。
图3.3图形软件栈
1.3.图形演示
除了图形驱动程序和用户空间库,SDK还包括示例应用程序。一些演示基于IMG Native_SDK示例。
通过Maritx演示
以下3D图形演示通过Matrix提供。下表提供了这些演示的列表,并进行了简要说明。

Demo Name	Details
ChameleonMan	This demo shows a matrix skinned character in combination with bump mapping.
CoverFlow	This is a demonstration of a coverflow style effect
ExampleUI	This demo shows how to efficiently render sprites and interface elements.
Navigation	This is a demonstration of how to implement rendering algorithms for Navigation software.
Kmscube	This demo shows how to render and display multi-colored spinning cube

在空窗口系统模式下运行演示

图形演示也可以作为全屏应用程序在Wayland窗口系统之外的空窗口系统模式下运行。为此,在连接EVM的键盘上按Ctrl-Alt Backspace退出Weston。然后,如果LCD屏幕停留在“Please wait…”,请按Ctrl-Alt-F1转到LCD控制台上的命令行。之后,可以从串行控制台、SSH控制台或LCD控制台使用命令行。

在运行这些演示之前,请确保该板至少连接到一个显示器。

target # /usr/bin/SGX/demos/DRM/OGLES2Coverflow
target # /usr/bin/SGX/demos/DRM/OGLES2ChameleonMan
target # /usr/bin/SGX/demos/DRM/OGLES2ExampleUI
target # /usr/bin/SGX/demos/DRM/OGLES2Navigation

在显示界面上看到输出后,按q终止应用程序。
在空窗口系统下的一些演示要求用户传递drm连接器id。有关如何获取连接器id的信息,请参阅显示部分。
1.4. 显示
TI SoC配备了显示子系统(DSS)硬件,为覆盖层的alpha混合和颜色转换提供硬件加速。DSS硬件暴露于通过libdrm模块提供的软件drmapi。通过这个drm接口,用户空间程序可以执行显示器的模式设置。
drm模块将显示硬件建模为一系列抽象的硬件块,并通过API对其进行管理。这些块是:
•CRTC[1]:表示扫描输出引擎,该引擎根据扫描输出缓冲区指向的数据生成视频定时信号
•连接器:表示视频定时信号发送到显示器的位置
•编码器:将来自CRTC的视频定时信号转换为适合通过连接器发送的格式
•平面:表示CRTC可以使用的覆盖缓冲区
实用程序应用程序modetest可用于获取可用drm块的列表。使用它可以显示设备的所有可用信息。
1.4.1. 查找连接器ID
运行以下modetest命令:

target #  modetest -c
寻找需要连接器ID的显示设备-如HDMI, LCD等.
Connectors:
id      encoder status          type    size (mm)       modes   encoders
4       3       connected       HDMI-A  480x270         20      3
  modes:
        name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  1920x1080 60 1920 2008 2052 2200 1080 1084 1089 1125 flags: phsync, pvsync; type: preferred, driver
...
16      15      connected       unknown 0x0             1       15
  modes:
        name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
  800x480 60 800 1010 1040 1056 480 502 515 525 flags: nhsync, nvsync; type: preferred, driver

显示的模式是连接显示器所支持的各种分辨率.
1.4.2. 查找平面ID
要查找平面ID,请运行modetest命令::

target #  modetest -p
which should show something like below:
Planes:
id      crtc    fb      CRTC x,y        x,y     gamma size
19      0       0       0,0             0,0     0
 formats: RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 NV12 YUYV UYVY
 props:
 ...
20      0       0       0,0             0,0     0
 formats: RG16 RX12 XR12 RA12 AR12 XR15 AR15 RG24 RX24 XR24 RA24 AR24 NV12 YUYV UYVY
 props:
 ...
kmscube
在默认显示上运行kmscube
target # kmscube
在辅助显示器上运行kmscube:
target # kmscube -c <connector-id>
target # kmscube -c 16 #For example, the connector id for secondary display is 16.
在所有连接的显示器(LCD和HDMI)上运行kmscube:
target # kmscube –a

运行DSS应用程序
DSS应用程序基于omapdrm。这些将演示克隆模式、扩展模式、覆盖窗口、z顺序和alpha混合功能。要演示克隆和扩展模式,HDMI显示器必须连接到主板。应用程序需要连接显示器和平面ID的支持模式信息。可以通过在文件系统中运行modetest应用程序来获取这些信息。

target #  modetest
运行drmclone应用程序
这将在LCD和HDMI(克隆)上显示相同的测试模式。覆盖窗口也显示在LCD上。要测试克隆模式,请执行以下命令:
target #  drmclone -l <lcd_w>x<lcd_h> -p <plane_w>x<plane_h>:<x>+<y> -h <hdmi_w>x<hdmi_h>
e.g.: target # drmclone -l 1280x800 -p 320x240:0+0 -h 640x480
我们可以通过改变x+y值来改变覆盖窗口的位置。240+120将显示@ center
运行drmextended应用程序
在LCD和HDMI上显示不同的测试图案。叠加窗口也显示在LCD上。要测试扩展模式,执行以下命令:
target # drmextended -l <lcd_w>x<lcd_h> -p <plane_w>x<plane_h>:<x>+<y> -h <hdmi_w>x<hdmi_h>
e.g.: target # drmextended -l 1280x800 -p 320x240:0+0 -h 640x480
运行drmzalpha应用程序
Z顺序:
它决定哪个覆盖窗口出现在另一个窗口的顶部。
Range: 0 to 3
lowest value for bottom
highest value for top

阿尔法混合:
它通过全局alpha值和预alpha值的乘积来确定图像的透明度级别。
全局alpha范围:0到255
0-完全透明
127-半透明
255-完全不透明
预乘alpha值:0或1
0-源不是alpha的预乘
1-源与alpha成预乘
要测试drmzalpha,请执行以下命令:
target # drmzalpha -s <crtc_w>x<crtc_h> -w <plane1_id>:<z_val>:<glo_alpha>:<pre_mul_alpha> -w <plane2_id>:<z_val>:<glo_alpha>:<pre_mul_alpha>
e.g.: target # drmzalpha -s 1280x800 -w 19:1:255:1 -w 20:2:255:1

1.5. Wayland/Weston
受支持的Wayland/Weston版本在扩展桌面模式下引入了多显示器支持,并且能够将窗口从一个显示器拖放到另一个显示器。
要启动Weston,请执行以下操作:
在目标控制台上::

target # unset WAYLAND_DISPLAY
默认显示:
target # weston --tty=1 --connector=<default connector-id>
在辅助显示器上:
target # weston --tty=1 --connector=<secondary connector-id>
在所有连接的显示器上(LCD和HDMI:
target # weston --tty=1

默认情况下,屏幕保护程序超时配置为300秒。用户可以使用命令行选项更改屏幕保护程序超时:

--idle-time=<number of seconds>

例如,要将超时设置为10分钟,并将Weston配置为在所有连接器上显示,请使用以下命令:
weston --tty=1 --idle-time=600
要禁用屏幕超时并将Weston配置为在所有连接器上显示,请使用以下命令:

weston --tty=1 --idle-time=0

如果您在上述过程中遇到任何问题,请参考GLSDK_FAQs#Unable_to_run_Weston_on_the_GLSDK_release。文件系统带有一个预先配置好的weston.ini文件,该文件将位于/etc/weston.ini
1.5.1. 运行Weston客户端
Weston客户机示例可以从串口控制台或SSH控制台上的命令行运行。启动Weston后,用户应该能够使用键盘和鼠标进行各种控制。

# /usr/bin/weston-flower
# /usr/bin/weston-clickdot
# /usr/bin/weston-cliptest
# /usr/bin/weston-dnd
# /usr/bin/weston-editor
# /usr/bin/weston-eventdemo
# /usr/bin/weston-image /usr/share/weston/terminal.png
# /usr/bin/weston-resizor
# /usr/bin/weston-simple-egl
# /usr/bin/weston-simple-shm
# /usr/bin/weston-simple-touch
# /usr/bin/weston-smoke
# /usr/bin/weston-info
# /usr/bin/weston-terminal

1.5.2. 使用Wayland接收器运行多媒体
Wayland的GStreamer视频接收器是waylandsink。要使用此视频接收器进行视频播放,请执行以下操作:

target # gst-launch-1.0 playbin uri=file://<path-to-file-name> video-sink=waylandsink

1.5.3. Exiting Weston
在退出Weston之前终止所有Weston客户端。如果您已经从串行控制台调用了Weston,请按Ctrl-C退出Weston。
也可以从本机控制台调用Weston,通过按Ctrl-Alt-Backspace退出Weston。1.5.4 使用IVI shell特性
SDK还支持配置Weston iv -shell。SDK中默认配置的shell为desktop-shell。要将shell更改为ivi-shell,用户必须将以下行添加到/etc/weston.ini文件中。要切换回桌面-shell,可以在/etc/weston.ini文件中注释这些行(注释以’ # '开头)。

[core]
shell=ivi-shell.so
modules=ivi-controller.so

[ivi-shell]
ivi-input-module=ivi-input-controller.so

完成上述配置后,我们可以通过运行以下命令重新启动Weston

target# /etc/init.d/weston stop
target# /etc/init.d/weston start

Note
当Weston使用ivi-shell开始时,默认的背景是黑色的,这与桌面-shell打开带有背景的窗口是不同的。
通过为Weston配置ivi-shell, Wayland客户端应用程序使用ivi-application协议,由中央HMI窗口管理来管理。wayland-iv -extension提供iv -controller。因此,管理表面/层/屏幕的属性,它还提供了ivi输入控制器。在一个表面上管理输入焦点。
应用程序必须支持由具有唯一数字ID的HMI中央控制器管理的ivi-application协议。
wayland-ivi-extension的一些重要参考资料可以在以下链接中找到:
• https://at.projects.genivi.org/wiki/display/WIE/01.+Quick+start
• https://at.projects.genivi.org/wiki/display/PROJ/Wayland+IVI+Extension+Design
1.5.4.1. 使用IVI shell运行Weston的示例客户端应用程序
Weston包中的所有样例客户机应用程序,如weston-simple-egl, weston-simple-shm, weston-flower, 等,也都支持ivi-shell。SDK包括一个叫做layer-add-surfaces的应用程序,它是wayland-iv -extension的一部分。这个应用程序允许用户调用ivi-shell的各种功能并控制应用程序。
下面是一系列命令的示例及其对目标器的影响。
使用vi-shell启动Weston后,请运行以下命令序列:

target# weston-simple-shm &

此时屏幕上什么也没有显示;还需要一些额外的命令.

target# layer-add-surfaces -l 1000 -s 2 &

这个命令创建一个ID为1000的图层,并在默认屏幕(通常是LCD)上为这个图层添加最多2个表面。
此时,用户可以看到weston-simple-shm在LCD上运行。这也打印numericID (surfaceID),客户端表面映射如下:

layer-add-surfaces: surface (10507) created
layer-add-surfaces: surface (10507) configured with:
    dst region: x:0 y:0 w:250 h:250
    src region: x:0 y:0 w:250 h:250
    visibility: TRUE
    added to layer (1000)
layer-add-surfaces: surface (10507) configured with:
    dst region: x:0 y:0 w:250 h:250
    src region: x:0 y:0 w:250 h:250
    visibility: TRUE
    added to layer <
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值