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:

Table 3.10 EGL client extensions

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

Table 3.11 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_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

Table 3.12 GL extensions

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

Table 3.13 Vulkan instance extensions

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:

Table 3.18 Supported 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.

../../../../_images/rogue-graphics-software-stack.png

Fig. 3.3 PSDK Linux Rogue Graphics Software Stack

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.

Table 3.19 Demos

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