3.6.1. Introduction
J784S4 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.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_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 |
EGL_KHR_image_base |
EGL_KHR_image_pixmap |
EGL_KHR_no_config_context |
EGL_KHR_partial_update |
EGL_KHR_reusable_sync |
EGL_KHR_surfaceless_context |
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_IMG_cl_image |
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 |
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.
3.6.1.1. Software Architecture
The picture below shows the software architecture of Graphics in Processor SDK Linux J784s4.
![../../../../_images/rogue-graphics-software-stack.png](../../../../_images/rogue-graphics-software-stack.png)
Fig. 3.2 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
3.6.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 |