TI jacinto 图形和显示
此SDK支持的TI SoC设备系列具有专用硬件块,用于加速3D图形和显示合成。此页提供有关这些硬件块支持的功能的详细信息。
• 3.6.1. 介绍
• 3.6.2. 软件体系结构
• 3.6.3. 图形演示
• 3.6.4. 显示器
• 3.6.4.1. 查找连接器ID
• 3.6.4.2. 查找Plane ID
• 3.6.5. Wayland/Weston
• 3.6.5.1. 运行Weston客户端
• 3.6.5.2. 使用Wayland接收器运行多媒体
• 3.6.5.3. 离开Weston
• 3.6.5.4. 使用IVI shell功能
• 3.6.5.4.1. 用IVI shell运行Weston的示例客户端应用程序
• 3.6.5.4.2. 使用IVI shell运行QT应用程序
• 3.6.6. 使用PowerVR工具
• 3.6.6.1. PVRTune
• 3.6.6.2. PVRTrace
3.6.1. 介绍
J721E设备支持基于Imagination Technologies Inc.的Rogue 8XE系列的3D图形加速器。它支持使用OpenGL®ES API的3D图形渲染。硬件支持OpenGL®ES API的3.2版本及以下版本。
支持以下扩展:
EGL client extensions
• EGL_EXT_client_extensions
• EGL_EXT_platform_base
• EGL_KHR_client_get_all_proc_addresses
• EGL_KHR_debug
• EGL_EXT_platform_wayland
• EGL_MESA_platform_gbm
EGL extensions
• EGL_ANDROID_native_fence_sync
• EGL_EXT_buffer_age
• EGL_EXT_create_context_robustness
• EGL_EXT_image_dma_buf_import
• EGL_EXT_image_dma_buf_import_modifiers
• EGL_IMG_context_priority
• EGL_KHR_config_attribs
• EGL_KHR_create_context
• EGL_KHR_fence_sync
• EGL_KHR_get_all_proc_addresses
• EGL_KHR_gl_renderbuffer_image
• EGL_KHR_gl_texture_2D_image
• EGL_KHR_gl_texture_cubmap_image
• EGL_KHR_image
• EGL_KHR_image_base
• EGL_KHR_image_pixmap
• EGL_KHR_no_config_context
• EGL_KHR_reusable_sync
• EGL_KHR_surfaceless_context
• EGL_KHR_wait_sync
• EGL_MESA_configless_context
• EGL_MESA_drm_image
• EGL_MESA_image_dma_buf_export
• EGL_WL_bind_wayland_display
• EGL_IMG_cl_image
GL extensions
• GL_ANDROID_extension_pack_es31a
• GL_EXT_blend_minmax
• GL_EXT_buffer_storage
• GL_EXT_clip_control
• GL_EXT_color_buffer_float
• GL_EXT_conservative_depth
• GL_EXT_copy_image
• GL_EXT_discard_framebuffer
• GL_EXT_draw_buffers
• GL_EXT_draw_buffers_indexed
• GL_EXT_draw_elements_base_vertex
• GL_EXT_EGL_image_array
• GL_EXT_float_blend
• GL_EXT_geometry_point_size
• GL_EXT_geometry_shader
• GL_EXT_gpu_shader5
• GL_EXT_memory_object
• GL_EXT_multisampled_render_to_texture
• GL_EXT_multisampled_render_to_texture2
• GL_EXT_occlusion_query_boolean
• GL_EXT_polygon_offset_clamp
• GL_EXT_primitive_bounding_box
• GL_EXT_pvrtc_sRGB
• GL_EXT_read_format_bgra
• GL_EXT_robustness
• GL_EXT_separate_shader_objects
• GL_EXT_shader_framebuffer_fetch
• GL_EXT_shader_group_vote
• GL_EXT_shader_implicit_conversions
• GL_EXT_shader_io_blocks
• GL_EXT_shader_non_constant_global_initializers
• GL_EXT_shader_pixel_local_storage
• GL_EXT_shader_pixel_local_storage2
• GL_EXT_shader_texture_lod
• GL_EXT_shadow_samplers
• GL_EXT_sparse_texture
• GL_EXT_sRGB_write_control
• GL_EXT_tessellation_point_size
• GL_EXT_tessellation_shader
• GL_EXT_texture_border_clamp
• GL_EXT_texture_buffer
• GL_EXT_texture_cube_map_array
• GL_EXT_texture_filter_anisotropic
• GL_EXT_texture_format_BGRA8888
• GL_EXT_texture_rg
• GL_EXT_texture_sRGB_decode
• GL_EXT_texture_sRGB_R8
• GL_EXT_texture_sRGB_RG8
• GL_EXT_YUV_target
• GL_IMG_bindless_texture
• GL_IMG_framebuffer_downsample
• GL_IMG_multisampled_render_to_texture
• GL_IMG_program_binary
• GL_IMG_texture_compression_pvrtc
• GL_IMG_texture_compression_pvrtc2
• GL_IMG_texture_filter_cubic
• GL_IMG_texture_format_BGRA8888
• GL_IMG_texture_npot
• GL_KHR_blend_equation_advanced
• GL_KHR_blend_equation_advanced_coherent
• GL_KHR_debug
• GL_KHR_robustness
• GL_KHR_texture_compression_astc_ldr
• GL_KHR_compressed_ETC1_RGB8_texutre
• GL_OES_depth24
• GL_OES_depth_texture
• GL_OES_draw_buffers_indexed
• GL_OES_draw_elements_base_vertex
• GL_OES_EGL_image_external_essl3
• GL_OES_EGL_sync
• GL_OES_element_index_uint
• GL_OES_fragment_precision_high
• GL_OES_geometry_point_size
• GL_OES_geometry_shader
• GL_OES_get_program_binary
• GL_OES_gpu_shader5
• GL_OES_mapbuffer
• GL_OES_packed_depth_stencil
• GL_OES_required_internalformat
• GL_OES_rgb8_rgba8
• GL_OES_sample_shading
• GL_OES_sample_variables
• GL_OES_shader_image_atomic
• GL_OES_shader_io_blocks
• GL_OES_shader_multisample_interpolation
• GL_OES_standard_derivatives
• GL_OES_surfaceless_context
• GL_OES_tessellation_point_size
• GL_OES_tessellation_shader
• GL_OES_texture_border_clamp
• GL_OES_texture_buffer
• GL_OES_texture_cube_map_array
• GL_OES_texture_float
• GL_OES_texture_half_float
• GL_OES_texture_npot
• GL_OES_texture_stencil8
• GL_OES_texture_storage_multisample_2d_array
• GL_OES_vertex_array_object
• GL_OES_vertex_half_float
OpenGL®ES和EGL®库打包在处理器SDK Linux J721e中,并被Wayland/Weston等图形栈使用。驱动程序运行在ARM内核上,并通过用户应用程序提交的渲染命令对运行在GPU内核中的固件进行编程。
本页的其余部分将涵盖以下主题:
•图形软件架构
•关于如何运行图形演示的说明
•关于如何运行DSS应用程序的说明
•关于如何启动Weston的说明
•关于如何运行PVR工具的说明
3.6.2. 软件体系结构
下图显示了处理器SDK Linux J721e中图形的软件架构。
图3.4 PSDK Linux 7图形软件栈
3.6.3. 图形演示
除了图形驱动程序和用户空间库之外,SDK还包括示例应用程序。一些演示基于IMG Native_SDK示例。
以下演示可在Wayland窗口系统下运行.
target # /usr/bin/SGX/demos/Wayland/OpenGLESDeferredShading
target # /usr/bin/SGX/demos/Wayland/OpenGLESGaussianBlur
target # /usr/bin/SGX/demos/Wayland/OpenGLESImageBasedLighting
target # /usr/bin/SGX/demos/Wayland/OpenGLESIntroducingPVRCamera
target # /usr/bin/SGX/demos/Wayland/OpenGLESIntroducingPVRUtils
target # /usr/bin/SGX/demos/Wayland/OpenGLESIntroducingUIRenderer
target # /usr/bin/SGX/demos/Wayland/OpenGLESNavigation2D
target # /usr/bin/SGX/demos/Wayland/OpenGLESNavigation3D
target # /usr/bin/SGX/demos/Wayland/OpenGLESParticleSystem
3.6.4. 显示器
TI SoC配备了显示子系统(DSS)硬件,为覆盖层的alpha混合和颜色转换提供硬件加速。DSS硬件暴露于通过libdrm模块提供的软件drmapi。通过这个drm接口,用户空间程序可以执行显示器的模式设置。
drm模块将显示硬件建模为一系列抽象的硬件块,并通过API对其进行管理。这些块是:
•CRTC[1]:表示扫描输出引擎,该引擎根据扫描输出缓冲区指向的数据生成视频定时信号
•连接器:表示视频定时信号发送到显示器的位置
•编码器:将来自CRTC的视频定时信号转换为适合通过连接器发送的格式
•平面:表示CRTC可以使用的覆盖缓冲区
实用程序应用程序modetest可用于获取可用drm块的列表。使用它可以显示设备的所有可用信息。
3.6.4.1. 查找连接器ID
运行以下modetest命令:
target # modetest -M tidss -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
所显示的模式是连接显示器所支持的各种分辨率.
3.6.4.2. 查找平面ID
要查找平面ID,请运行modetest命令:
target # modetest -M tidss -p
应该显示如下内容:
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:
...
3.6.5. Wayland/Weston
受支持的Wayland/Weston版本在扩展桌面模式下引入了多显示器支持,并且能够将窗口从一个显示器拖放到另一个显示器。
要启动Weston,请执行以下操作:
在目标控制台上:
target # unset WAYLAND_DISPLAY
在默认显示上:
target # weston --tty=1 --connector=
在辅助显示器上:
target # weston --tty=1 --connector=
在所有连接的显示器(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_releas。
文件系统带有一个预先配置好的weston.ini文件,该文件将位于
/etc/weston.ini
3.6.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
3.6.5.2. 使用Wayland sink运行多媒体
Wayland的GStreamer视频接收器是waylandsink。要使用此视频接收器进行视频播放,请执行以下操作:
target # gst-launch-1.0 playbin uri=file:// video-sink=waylandsink
3.6.5.3. 离开Weston
在离开Weston之前终止所有Weston客户。如果您从串行控制台调用了Weston,请按Ctrl-C退出Weston。
也可以从本机控制台调用Weston,按Ctrl-Alt-Backspace退出Weston。
3.6.5.4. 使用IVI shell功能
SDK还支持配置Weston ivi-shell。SDK中配置的默认shell是desktop-shell。
要将shell更改为ivi-shell,用户必须将以下行添加到/etc/weston.ini文件中。
要切换回desktop-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
请注意
当Weston使用ivi-shell开始时,默认的背景是黑色的,这与desktop-shell打开带有背景的窗口是不同的。
通过为Weston配置ivi-shell, Wayland客户端应用程序使用ivi-application协议,由中央HMI窗口管理来管理。wayland-ivi-extension提供ivi-controller.so管理表面/层/屏幕的属性,它还提供了ivi-input-controller.so在一个表面上管理输入焦点。
应用程序必须支持由具有唯一数字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
3.6.5.4.1 使用IVI shell运行Weston的示例客户端应用程序
Weston包中的所有样例客户机应用程序,如weston-simple-egl, weston-simple-shm, weston-flower等,也都支持ivi-shell。SDK包括一个叫做layer-add-surfaces的应用程序,它是wayland-ivi-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 (1000)
这里,10507是weston-simple-shm应用程序表面映射到的数字。
用户可以再启动一个客户端应用程序,它允许layer_add_surfaces添加第二个表面到1000层,如下所示.
target# weston-flower &
用户可以控制上述表面的属性使用LayerManagerControl如下所示,分别设置位置/大小,不透明度和可见性.
target# LayerManagerControl set surface 10507 destination region 150 150 300 300
target# LayerManagerControl set surface 10507 opacity 0.5
target# LayerManagerControl set surface 10507 visibility 1
target# LayerManagerControl help
help选项用LayerManagerControl二进制文件打印所有可能的控制操作。请参考可用的选项.
3.6.5.4.2. 使用IVI shell运行QT应用程序
要使用ivi-shell运行QT应用程序,请将QT_WAYLAND_SHELL_INTEGRATION环境变量设置为ivi-shell。
export QT\_WAYLAND\_SHELL\_INTEGRATION=ivi-shell
3.6.6. 使用PowerVR工具
PowerVR工具套件旨在实现快速图形应用程序开发。它面向一系列领域,包括资产导出和优化、PC仿真、原型环境、在线和离线性能分析工具等。有关工具和详细文档的更多详细信息,请参阅PowerVR SDK。
目标文件系统包括PowerVR工具的子集,如PVRScope和PVRTrace recorder库,这些工具来自Imagination PowerVR SDK,用于分析和跟踪SGX活动。此外,它还包括PVRPerfServerDeveloper工具.
3.6.6.1。PVRTune
PVRTune是一款GPU实时性能分析工具。它捕获硬件计时数据和计数器,方便识别性能瓶颈。PVRPerfServerDeveloper应该与运行在PC上的PVRTune一起使用,以收集SGX加载和活动线程的数据。你可以用下面的命令调用这个工具:
target # /opt/img-powervr-sdk/PVRHub/PVRPerfServer/PVRPerfServerDeveloper
3.6.6.2. PVRTrace
PVRTrace是一个OpenGL® ES API记录和分析实用程序。PVRTrace GUI提供离线工具来检查捕获的数据、识别冗余调用、突出显示昂贵的着色器等等。默认文件系统包含用于获取图形应用程序的PVRTrace的助手脚本。然后可以使用PVRTrace实用程序在PC上回放此跟踪。
要开始跟踪,请使用以下命令作为参考:
target # cp /opt/img-powervr-sdk/PVRHub/Scripts/start_tracing.sh ~/.
target # ./start_tracing.sh
例子:
target # ./start_tracing.sh westonapp weston-simple-egl
上面的命令将执行以下操作: