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.3.
For more information about OpenGL® ES see OpenGL ES.
For more information about Vulkan® see Vulkan.
For more information about OpenCL® see OpenCL.
Note
Libraries are provided, at https://git.ti.com/cgit/graphics/ti-img-rogue-umlibs/
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 |
Note
Utilize vulkaninfo and eglinfo to list supported extensions.
3.9.1.1. General Features
These devices do not use static memory carve-outs. 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 as needed. Scanout buffers come from the Contiguous Memory Allocation (CMA) pool. Other runtime memory allocations are from standard pages. See the kernel module memory management subsystem for more information.
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.2. Software architecture
The following picture shows the software architecture of Graphics in Processor SDK Linux AM62x.
Fig. 3.4 PSDK Linux Rogue Graphics Software Stack
More information regarding Mesa can be found within the Build guide
RGX-KMrefers to the kernel module, within the filesystem it is namedpvrsrvkm.koWithin the SDK, the Weston Compositor is used, an implementation of Wayland specification
More information regarding integration of this software stack into other ecosystems can be found at Build guide
Note
The kernel module is available at 2 possible locations depending on the kernel version
selected. Before kernel 6.6 the location for external modules was extra/, from
6.6 onward the location is updates/.
3.9.1.3. Graphics demos
Along with the graphics driver and user space libraries, the SDK also includes example applications.
The following 3D Graphics demos are available:
Demo Name |
Details |
|---|---|
|
This demo shows how to render and display multi-colored spinning cube |
|
Lightweight Render Example. Heavily inspired by Eduardo Lima’s gpu-playground, this attempts to act as the smallest demo of offscreen rendering. |