3.7.1. Introduction

AM68A device is enabled with 3D graphics accelerator based on the B-Series BXS-4-64 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.2 with render surfaces upto 4k and input textures upto 8k 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.

The following extensions are supported:

Table 3.12 GL extensions

GL_ANDROID_extension_pack_es31a

GL_APPLE_texture_format_BGRA8888

GL_EXT_EGL_image_array

GL_EXT_YUV_target

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_float_blend

GL_EXT_geometry_point_size

GL_EXT_geometry_shader

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_primitive_bounding_box

GL_EXT_read_format_bgra

GL_EXT_robustness

GL_EXT_sRGB_write_control

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_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_format_BGRA8888

GL_EXT_texture_format_sRGB_override

GL_EXT_texture_rg

GL_EXT_texture_sRGB_R8

GL_EXT_texture_sRGB_RG8

GL_EXT_texture_sRGB_decode

GL_EXT_texture_shadow_lod

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_KHR_texture_compression_astc_ldr

GL_OES_EGL_image

GL_OES_EGL_image_external

GL_OES_EGL_image_external_essl3

GL_OES_EGL_sync

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

GL_OVR_multiview

GL_OVR_multiview2

GL_OVR_multiview_multisampled_render_to_texture

Note

All extensions without links are custom IMG extensions.

Note

Utilize vulkaninfo and eglinfo to list supported extensions.

3.7.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:

Table 3.14 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.

3.7.1.2. Software architecture

The following picture shows the software architecture of Graphics in Processor SDK Linux AM68A.

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

Fig. 3.2 PSDK Linux Rogue Graphics Software Stack

  • More information regarding Mesa can be found within the Build guide

  • RGX-KM refers to the kernel module, within the filesystem it is named pvrsrvkm.ko

  • Within 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.7.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:

Table 3.15 Demos

Demo Name

Details

Kmscube

This demo shows how to render and display multi-colored spinning cube

offscreendemo

Lightweight Render Example. Heavily inspired by Eduardo Lima’s gpu-playground, this attempts to act as the smallest demo of offscreen rendering.