3.9.1. Introduction
AM62x device is enabled with 3D graphics accelerator based on the A-Series AXE-1-16M from Imagination Technologies Inc. It enables the support of 3D graphics rendering using OpenGL® ES API’s. The OpenGL® ES API’s up to and including version 3.1 with render surfaces upto 2k and input textures upto 4k sizes are supported by the hardware. It also supports Vulkan ® up to API version 1.2.
The following extensions are supported:
EGL_EXT_client_extensions |
EGL_EXT_device_base |
EGL_EXT_device_enumeration |
EGL_EXT_device_query |
EGL_EXT_platform_base |
EGL_KHR_client_get_all_proc_addresses |
EGL_KHR_debug |
EGL_EXT_platform_device |
EGL_EXT_platform_wayland |
EGL_KHR_platform_wayland |
EGL_MESA_platform_gbm |
EGL_KHR_platform_gbm |
EGL_MESA_platform_surfaceless |
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_EXT_image_gl_colorspace |
EGL_EXT_swap_buffers_with_damage |
EGL_EXT_yuv_surface |
EGL_IMG_context_priority |
EGL_KHR_cl_event2 |
EGL_KHR_config_attribs |
EGL_KHR_create_context |
EGL_KHR_fence_sync |
EGL_KHR_get_all_proc_addresses |
EGL_KHR_gl_colorspace |
EGL_KHR_gl_renderbuffer_image |
EGL_KHR_gl_texture_2D_image |
EGL_KHR_gl_texture_3D_image |
EGL_KHR_gl_texture_cubemap_image |
EGL_KHR_image_base |
EGL_KHR_no_config_context |
EGL_KHR_partial_update |
EGL_KHR_reusable_sync |
EGL_KHR_surfaceless_context |
EGL_KHR_swap_buffers_with_damage |
EGL_EXT_pixel_format_float |
EGL_KHR_wait_sync |
EGL_MESA_configless_context |
EGL_MESA_drm_image |
EGL_MESA_image_dma_buf_export |
EGL_WL_bind_wayland_display |
EGL_WL_create_wayland_buffer_from_image |
EGL_IMG_cl_image |
GL_APPLE_texture_format_BGRA8888 |
GL_EXT_blend_minmax |
GL_EXT_buffer_storage |
GL_EXT_clip_control |
GL_EXT_color_buffer_float |
GL_EXT_color_buffer_half_float |
GL_EXT_compressed_ETC1_RGB8_sub_texture |
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_gpu_shader5 |
GL_EXT_memory_object |
GL_EXT_memory_object_fd |
GL_EXT_multi_draw_arrays |
GL_EXT_multisampled_render_to_texture |
GL_EXT_multisampled_render_to_texture2 |
GL_EXT_occlusion_query_boolean |
GL_EXT_polygon_offset_clamp |
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_texture_border_clamp |
GL_EXT_texture_buffer |
GL_EXT_texture_cube_map_array |
GL_EXT_texture_format_BGRA8888 |
GL_EXT_texture_format_sRGB_override |
GL_EXT_texture_rg |
GL_EXT_texture_shadow_lod |
GL_EXT_texture_sRGB_decode |
GL_EXT_texture_sRGB_R8 |
GL_EXT_texture_sRGB_RG8 |
GL_EXT_YUV_target |
GL_IMG_framebuffer_downsample |
GL_IMG_multisampled_render_to_texture |
GL_IMG_program_binary |
GL_IMG_read_format |
GL_IMG_shader_binary |
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_OES_compressed_ETC1_RGB8_texture |
GL_OES_depth24 |
GL_OES_depth_texture |
GL_OES_draw_buffers_indexed |
GL_OES_draw_elements_base_vertex |
GL_OES_EGL_image |
GL_OES_EGL_image_external |
GL_OES_EGL_image_external_essl3 |
GL_OES_EGL_sync |
GL_OES_element_index_uint |
GL_OES_fragment_precision_high |
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_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 |
VK_KHR_device_group_creation |
v1 |
VK_KHR_external_fence_capabilities |
v1 |
VK_KHR_external_memory_capabilities |
v1 |
VK_KHR_external_semaphore_capabilities |
v1 |
VK_KHR_get_physical_device_properties2 |
v2 |
VK_KHR_get_surface_capabilities2 |
v1 |
VK_KHR_surface |
v25 |
VK_KHR_wayland_surface |
v6 |
VK_KHR_xcb_surface |
v6 |
VK_KHR_xlib_surface |
v6 |
VK_EXT_debug_report |
v10 |
VK_EXT_debug_utils |
v2 |
For more information about OpenGL® ES see OpenGL ES.
These devices do not utilize static memory carveouts. The only reservations made in device tree are for control registers. Memory is instead dynamically allocated at runtime depending on the task and will scale accordingly. Buffers are allocated from CMA and other runtime memory allocations are made from standard pages. See the kernel module memory management subsystem for more information.
Note
OpenCL® libraries are also provided, without support, at https://git.ti.com/cgit/graphics/ti-img-rogue-umlibs/
Other features of the Rogue series of GPUs include bilinear and trilinear filtering.
Support for the following pixel formats:
ARGB4444 |
ARGB8888 |
BGRA8888 |
RGB565 |
RGBA5551 |
YUV420 |
YUYV |
NV12 |
|
Surface |
✓ |
✓ |
✓ |
|||||
Texture |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
Support for Ericsson Texture Compression (ETC1 and ETC2) on input textures. For an example toolkit to interact with these texture compression mechanisms, see the Khronos KTX-Software project.
Support for OS controlled Active Power Management, enabled by default.
Support for OS suspend and resume functions. See How to Suspend to RAM (Deep Sleep) on AM62x for more info.
3.9.1.1. Software Architecture
The picture below shows the software architecture of Graphics in Processor SDK Linux AM62x.
Please note that RGX-KM in this context refers to the pvrsrvkm kernel module, which is currently provided at:
This is included by default in the SDK. The kernel module is located at:
# /lib/modules/$(uname -r)/extra/pvrsrvkm.ko
Please see the Build Guide for more information about integration of this software stack into other ecosystems.
3.9.1.2. Graphics Demos
Along with the graphics driver and userspace libraries, the SDK also includes example applications. Some of the demos are based on the IMG Native_SDK examples.
The following 3D Graphics demos are available. The table below provides a list of these demos, with a brief description.
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 |