GPU
This chapter describes common information and instructions of GPU on IoT Yocto, such as command to query GPU hardware information, command to find EGL, GLES support details and so on.
But GPU on different platforms may have some platform-specific instructions or test results. For example, you will get different benchmark results on different platforms. Please find section: Device-Dependent to find more details about difference of GPU on each platform.
Note
Starting from IoT Yocto v24.0, we no longer specifically reserve memory of Contiguous Memory Allocator (CMA) heap for GPU usage. The size of reserved memory is very difficult to estimate. Therefore, we allow the GPU to directly use the system memory instead of the reserved CMA.
GPU Hardware Specification
Please refer to the SoC Platforms to find GPU specifications.
GPU Identification
GPU Hardware Information
You can use following cmd: cat /sys/class/misc/mali0/device/gpuinfo
to determine the GPU hardware you are using.
Take Genio 1200-EVK as an example:
cat /sys/class/misc/mali0/device/gpuinfo
Mali-G57 5 cores r0p1 0x9091
Note
All cmd operations presented in this chapter are based on the IoT Yocto v24.0, Genio 1200-EVK. You might get different operation result depends on what platform you currently use.
EGL/OpenGL ES Information
To determine OpenGL ES support details, you can query it by launch weston --backend=drm-backend.so
then you could get following information:
EGL version and extensions
OpenGL ES version and extensions
GLSL version
weston --backend=drm-backend.so
Date: 2010-01-01 UTC
weston 10.0.2
https://wayland.freedesktop.org
Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
Build: 10.0.2
Command line: weston --backend=drm-backend.so
OS: Linux, 5.15.37-mtk+g94da79813879, #1 SMP PREEMPT Mon Feb 20 06:42:54 UTC 2023, aarch64
Flight recorder: enabled
Using config file '/etc/xdg/weston/weston.ini'
Output repaint window is 7 ms maximum.
Loading module '/usr/lib/libweston-10/drm-backend.so'
initializing drm backend
Trying libseat launcher...
libseat: session control granted
using /dev/dri/card0
DRM: supports atomic modesetting
DRM: does not support GBM modifiers
DRM: supports picture aspect ratio
Loading module '/usr/lib/libweston-10/gl-renderer.so'
EGL client extensions: EGL_EXT_client_extensions
EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses
EGL_KHR_platform_gbm EGL_KHR_platform_wayland
EGL_EXT_platform_wayland
EGL version: 1.4 Valhall-"r41p0-01eac0"
EGL vendor: ARM
EGL client APIs: OpenGL_ES
EGL extensions: EGL_WL_bind_wayland_display
EGL_NV_context_priority_realtime
EGL_KHR_partial_updateEGL_EXT_buffer_age EGL_KHR_config_attribs
EGL_KHR_image EGL_KHR_image_base EGL_KHR_fence_sync
EGL_KHR_wait_sync EGL_KHR_gl_colorspace
EGL_KHR_get_all_proc_addresses EGL_IMG_context_priority
EGL_KHR_no_config_context EGL_EXT_image_dma_buf_import
EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_yuv_surface
EGL_EXT_pixel_format_float EGL_ARM_pixmap_multisample_discard
EGL_ARM_implicit_external_sync EGL_ANDROID_native_fence_sync
EGL_KHR_gl_texture_2D_image EGL_KHR_gl_renderbuffer_image
EGL_KHR_create_context EGL_KHR_surfaceless_context
EGL_KHR_gl_texture_cubemap_image EGL_EXT_image_gl_colorspace
EGL_EXT_create_context_robustness
EGL_KHR_surfaceless_context available
GL version: OpenGL ES 3.2 v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3
GLSL version: OpenGL ES GLSL ES 3.20
GL vendor: ARM
GL renderer: Mali-G57
GL extensions: GL_ARM_rgba8 GL_ARM_mali_shader_binary
GL_OES_depth24 GL_OES_depth_texture
GL_OES_depth_texture_cube_map GL_OES_packed_depth_stencil
GL_OES_rgb8_rgba8 GL_EXT_read_format_bgra
GL_OES_compressed_paletted_texture
GL_OES_compressed_ETC1_RGB8_texture GL_OES_standard_derivatives
GL_OES_EGL_image GL_OES_EGL_image_external
GL_OES_EGL_image_external_essl3 GL_OES_EGL_sync
GL_OES_texture_npot GL_OES_vertex_half_float
GL_OES_required_internalformat GL_OES_vertex_array_object
GL_OES_mapbuffer GL_EXT_texture_format_BGRA8888
GL_EXT_texture_rg GL_EXT_texture_type_2_10_10_10_REV
GL_OES_fbo_render_mipmap GL_OES_element_index_uint
GL_EXT_shadow_samplers GL_OES_texture_compression_astc
GL_KHR_texture_compression_astc_ldr
GL_KHR_texture_compression_astc_hdr
GL_KHR_texture_compression_astc_sliced_3d
GL_EXT_texture_compression_astc_decode_mode
GL_EXT_texture_compression_astc_decode_mode_rgb9e5 GL_KHR_debug
GL_EXT_occlusion_query_boolean GL_EXT_disjoint_timer_query
GL_EXT_blend_minmax GL_EXT_discard_framebuffer
GL_OES_get_program_binary GL_OES_texture_3D
GL_EXT_texture_storage GL_EXT_multisampled_render_to_texture
GL_EXT_multisampled_render_to_texture2
GL_OES_surfaceless_context GL_OES_texture_stencil8
GL_EXT_shader_pixel_local_storage
GL_ARM_shader_framebuffer_fetch
GL_ARM_shader_framebuffer_fetch_depth_stencil
GL_ARM_mali_program_binary GL_EXT_sRGB
GL_EXT_sRGB_write_control GL_EXT_texture_sRGB_decode
GL_EXT_texture_sRGB_R8 GL_EXT_texture_sRGB_RG8
GL_KHR_blend_equation_advanced
GL_KHR_blend_equation_advanced_coherent
GL_OES_texture_storage_multisample_2d_array
GL_OES_shader_image_atomic GL_EXT_robustness
GL_EXT_draw_buffers_indexed GL_OES_draw_buffers_indexed
GL_EXT_texture_border_clamp GL_OES_texture_border_clamp
GL_EXT_texture_cube_map_array GL_OES_texture_cube_map_array
GL_OES_sample_variables GL_OES_sample_shading
GL_OES_shader_multisample_interpolation GL_EXT_shader_io_blocks
GL_OES_shader_io_blocks GL_EXT_tessellation_shader
GL_OES_tessellation_shader GL_EXT_primitive_bounding_box
GL_OES_primitive_bounding_box GL_EXT_geometry_shader
GL_OES_geometry_shader GL_ANDROID_extension_pack_es31a
GL_EXT_gpu_shader5 GL_OES_gpu_shader5 GL_EXT_texture_buffer
GL_OES_texture_buffer GL_EXT_copy_image GL_OES_copy_image
GL_EXT_shader_non_constant_global_initializers
GL_EXT_color_buffer_half_float GL_EXT_unpack_subimage
GL_EXT_color_buffer_float GL_EXT_float_blend GL_EXT_YUV_target
GL_OVR_multiview GL_OVR_multiview2
GL_OVR_multiview_multisampled_render_to_texture
GL_KHR_robustness GL_KHR_robust_buffer_access_behavior
GL_EXT_draw_elements_base_vertex
GL_OES_draw_elements_base_vertex GL_EXT_buffer_storage
GL_EXT_texture_filter_anisotropic GL_OES_texture_float_linear
GL_ARM_texture_unnormalized_coordinates
GL_EXT_shader_framebuffer_fetch GL_EXT_clip_control
GL ES 3.2 - renderer features:
read-back format: BGRA
EGL Wayland extension: yes
...
OpenCL Information
To determine OpenCL support details, you can query it by launch clinfo
clinfo
Number of platforms 1
Platform Name ARM Platform
Platform Vendor ARM
Platform Version OpenCL 3.0 v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3
Platform Profile FULL_PROFILE
Platform Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_3d_image_writes cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp16 cl_khr_icd cl_khr_egl_image cl_khr_image2d_from_buffer cl_khr_depth_images cl_khr_subgroups cl_khr_subgroup_extended_types cl_khr_subgroup_non_uniform_vote cl_khr_subgroup_ballot cl_khr_subgroup_non_uniform_arithmetic cl_khr_subgroup_shuffle cl_khr_subgroup_shuffle_relative cl_khr_subgroup_clustered_reduce cl_khr_subgroup_rotate cl_khr_il_program cl_khr_priority_hints cl_khr_create_command_queue cl_khr_spirv_no_integer_wrap_decoration cl_khr_extended_versioning cl_khr_device_uuid cl_khr_suggested_local_work_size cl_khr_extended_bit_ops cl_khr_integer_dot_product cl_khr_semaphore cl_khr_external_semaphore cl_khr_external_semaphore_sync_fd cl_khr_command_buffer cl_arm_core_id cl_arm_printf cl_arm_non_uniform_work_group_size cl_arm_import_memory cl_arm_import_memory_dma_buf cl_arm_import_memory_host cl_arm_integer_dot_product_int8 cl_arm_integer_dot_product_accumulate_int8 cl_arm_integer_dot_product_accumulate_saturate_int8 cl_arm_job_slot_selection cl_arm_scheduling_controls cl_arm_controlled_kernel_termination cl_ext_cxx_for_opencl cl_ext_image_tiling_control cl_ext_image_requirements_info cl_ext_image_from_buffer cl_ext_yuv_images
Platform Extensions with Version cl_khr_global_int32_base_atomics 0x400000 (1.0.0)
cl_khr_global_int32_extended_atomics 0x400000 (1.0.0)
cl_khr_local_int32_base_atomics 0x400000 (1.0.0)
cl_khr_local_int32_extended_atomics 0x400000 (1.0.0)
cl_khr_byte_addressable_store 0x400000 (1.0.0)
cl_khr_3d_image_writes 0x400000 (1.0.0)
cl_khr_int64_base_atomics 0x400000 (1.0.0)
cl_khr_int64_extended_atomics 0x400000 (1.0.0)
cl_khr_fp16 0x400000 (1.0.0)
cl_khr_icd 0x400000 (1.0.0)
cl_khr_egl_image 0x400000 (1.0.0)
cl_khr_image2d_from_buffer 0x400000 (1.0.0)
cl_khr_depth_images 0x400000 (1.0.0)
cl_khr_subgroups 0x400000 (1.0.0)
cl_khr_subgroup_extended_types 0x400000 (1.0.0)
cl_khr_subgroup_non_uniform_vote 0x400000 (1.0.0)
cl_khr_subgroup_ballot 0x400000 (1.0.0)
cl_khr_subgroup_non_uniform_arithmetic 0x400000 (1.0.0)
cl_khr_subgroup_shuffle 0x400000 (1.0.0)
cl_khr_subgroup_shuffle_relative 0x400000 (1.0.0)
cl_khr_subgroup_clustered_reduce 0x400000 (1.0.0)
cl_khr_subgroup_rotate 0x400000 (1.0.0)
cl_khr_il_program 0x400000 (1.0.0)
cl_khr_priority_hints 0x400000 (1.0.0)
cl_khr_create_command_queue 0x400000 (1.0.0)
cl_khr_spirv_no_integer_wrap_decoration 0x400000 (1.0.0)
cl_khr_extended_versioning 0x400000 (1.0.0)
cl_khr_device_uuid 0x400000 (1.0.0)
cl_khr_suggested_local_work_size 0x400000 (1.0.0)
cl_khr_extended_bit_ops 0x400000 (1.0.0)
cl_khr_integer_dot_product 0x800000 (2.0.0)
cl_khr_semaphore 0x9000 (0.9.0)
cl_khr_external_semaphore 0x9000 (0.9.0)
cl_khr_external_semaphore_sync_fd 0x9000 (0.9.0)
cl_khr_command_buffer 0x9000 (0.9.0)
cl_arm_core_id 0x400000 (1.0.0)
cl_arm_printf 0x800000 (2.0.0)
cl_arm_non_uniform_work_group_size 0x400000 (1.0.0)
cl_arm_import_memory 0x401000 (1.1.0)
cl_arm_import_memory_dma_buf 0x400000 (1.0.0)
cl_arm_import_memory_host 0x400000 (1.0.0)
cl_arm_integer_dot_product_int8 0x400000 (1.0.0)
cl_arm_integer_dot_product_accumulate_int8 0x400000 (1.0.0)
cl_arm_integer_dot_product_accumulate_saturate_int8 0x400000 (1.0.0)
cl_arm_job_slot_selection 0x400000 (1.0.0)
cl_arm_scheduling_controls 0x4000 (0.4.0)
cl_arm_controlled_kernel_termination 0x400000 (1.0.0)
cl_ext_cxx_for_opencl 0x400000 (1.0.0)
cl_ext_image_tiling_control 0x1000 (0.1.0)
cl_ext_image_requirements_info 0x5000 (0.5.0)
cl_ext_image_from_buffer 0x400000 (1.0.0)
cl_ext_yuv_images 0x1000 (0.1.0)
Platform Numeric Version 0xc00000 (3.0.0)
Platform Extensions function suffix ARM
Platform Host timer resolution 1ns
Platform Name ARM Platform
Number of devices 1
Device Name Mali-G57 r0p1
Device Vendor ARM
Device Vendor ID 0x90910010
Device Version OpenCL 3.0 v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3
Device UUID 10009190-0100-0000-0000-000000000000
Driver UUID 61ca9692-464f-ae09-e956-8da4e1069754
Valid Device LUID No
Device LUID 0000-000000000000
Device Node Mask 0
Device Numeric Version 0xc00000 (3.0.0)
Driver Version 3.0
Device OpenCL C Version OpenCL C 3.0 v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3
Device OpenCL C all versions OpenCL C 0x400000 (1.0.0)
OpenCL C 0x401000 (1.1.0)
OpenCL C 0x402000 (1.2.0)
OpenCL C 0x800000 (2.0.0)
OpenCL C 0xc00000 (3.0.0)
Device OpenCL C features __opencl_c_images 0x400000 (1.0.0)
__opencl_c_int64 0x400000 (1.0.0)
__opencl_c_3d_image_writes 0x402000 (1.2.0)
__opencl_c_atomic_order_acq_rel 0x800000 (2.0.0)
__opencl_c_atomic_order_seq_cst 0x800000 (2.0.0)
__opencl_c_atomic_scope_device 0x800000 (2.0.0)
__opencl_c_atomic_scope_all_devices 0x800000 (2.0.0)
__opencl_c_device_enqueue 0x800000 (2.0.0)
__opencl_c_generic_address_space 0x800000 (2.0.0)
__opencl_c_pipes 0x800000 (2.0.0)
__opencl_c_program_scope_global_variables 0x800000 (2.0.0)
__opencl_c_read_write_images 0x800000 (2.0.0)
__opencl_c_subgroups 0x800000 (2.0.0)
__opencl_c_work_group_collective_functions 0x800000 (2.0.0)
Device C++ for OpenCL Numeric Version 0x400000 (1.0.0)
Latest comfornace test passed v2021-03-05-00
Device Type GPU
Device Profile FULL_PROFILE
Device Available Yes
Compiler Available Yes
Linker Available Yes
Max compute units 5
Available core IDs 0, 2, 6, 16, 18
Available job slots (ARM) 1-2
Max clock frequency 880MHz
Device Partition (core)
Max number of sub-devices 0
Supported partition types None
Supported affinity domains (n/a)
Max work item dimensions 3
Max work item sizes 512x512x512
Max work group size 512
Preferred work group size multiple (device) 16
Preferred work group size multiple (kernel) 16
Max sub-groups per work group 32
Preferred / native vector sizes
char 16 / 4
short 8 / 2
int 4 / 1
long 2 / 1
half 8 / 2 (cl_khr_fp16)
float 4 / 1
double 0 / 0 (n/a)
Half-precision Floating-point support (cl_khr_fp16)
Denormals Yes
Infinity and NANs Yes
Round to nearest Yes
Round to zero Yes
Round to infinity Yes
IEEE754-2008 fused multiply-add Yes
Support is emulated in software No
Single-precision Floating-point support (core)
Denormals Yes
Infinity and NANs Yes
Round to nearest Yes
Round to zero Yes
Round to infinity Yes
IEEE754-2008 fused multiply-add Yes
Support is emulated in software No
Correctly-rounded divide and sqrt operations No
Double-precision Floating-point support (n/a)
Address bits 64, Little-Endian
Global memory size 8202838016 (7.639GiB)
Error Correction support No
Max memory allocation 8202838016 (7.639GiB)
Unified memory for Host and Device Yes
Shared Virtual Memory (SVM) capabilities (core)
Coarse-grained buffer sharing Yes
Fine-grained buffer sharing No
Fine-grained system sharing No
Atomics No
Minimum alignment for any data type 128 bytes
Alignment of base address 1024 bits (128 bytes)
Preferred alignment for atomics
SVM 0 bytes
Global 0 bytes
Local 0 bytes
Atomic memory capabilities relaxed, acquire/release, sequentially-consistent, work-item scope, work-group scope, device scope, all-devices scope
Atomic fence capabilities relaxed, acquire/release, sequentially-consistent, work-item scope, work-group scope, device scope, all-devices scope
Max size for global variable 65536 (64KiB)
Preferred total size of global vars 0
Global Memory cache type Read/Write
Global Memory cache size 1048576 (1024KiB)
Global Memory cache line size 64 bytes
Image support Yes
Max number of samplers per kernel 16
Max size for 1D images from buffer 65536 pixels
Max 1D or 2D image array size 2048 images
Base address alignment for 2D image buffers 32 bytes
Pitch alignment for 2D image buffers 64 pixels
Max 2D image size 65536x65536 pixels
Max 3D image size 65536x65536x65536 pixels
Max number of read image args 128
Max number of write image args 64
Max number of read/write image args 64
Pipe support Yes
Max number of pipe args 16
Max active pipe reservations 1
Max pipe packet size 1024
Local memory type Global
Local memory size 32768 (32KiB)
Max number of constant args 128
Max constant buffer size 8202838016 (7.639GiB)
Generic address space support Yes
Max size of kernel argument 1024
Queue properties (on host)
Out-of-order execution Yes
Profiling Yes
Device enqueue capabilities supported, replaceable default queue
Queue properties (on device)
Out-of-order execution Yes
Profiling Yes
Preferred size 2097152 (2MiB)
Max size 16777216 (16MiB)
Max queues on device 1
Max events on device 1024
Prefer user sync for interop No
Profiling timer resolution 1000ns
Execution capabilities
Run OpenCL kernels Yes
Run native kernels No
Non-uniform work-groups Yes
Work-group collective functions Yes
Sub-group independent forward progress Yes
IL version SPIR-V_1.0
ILs with version SPIR-V 0x400000 (1.0.0)
printf() buffer size 1048576 (1024KiB)
Built-in kernels (n/a)
Built-in kernels with version (n/a)
Device Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_3d_image_writes cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_fp16 cl_khr_icd cl_khr_egl_image cl_khr_image2d_from_buffer cl_khr_depth_images cl_khr_subgroups cl_khr_subgroup_extended_types cl_khr_subgroup_non_uniform_vote cl_khr_subgroup_ballot cl_khr_subgroup_non_uniform_arithmetic cl_khr_subgroup_shuffle cl_khr_subgroup_shuffle_relative cl_khr_subgroup_clustered_reduce cl_khr_subgroup_rotate cl_khr_il_program cl_khr_priority_hints cl_khr_create_command_queue cl_khr_spirv_no_integer_wrap_decoration cl_khr_extended_versioning cl_khr_device_uuid cl_khr_suggested_local_work_size cl_khr_extended_bit_ops cl_khr_integer_dot_product cl_khr_semaphore cl_khr_external_semaphore cl_khr_external_semaphore_sync_fd cl_khr_command_buffer cl_arm_core_id cl_arm_printf cl_arm_non_uniform_work_group_size cl_arm_import_memory cl_arm_import_memory_dma_buf cl_arm_import_memory_host cl_arm_integer_dot_product_int8 cl_arm_integer_dot_product_accumulate_int8 cl_arm_integer_dot_product_accumulate_saturate_int8 cl_arm_job_slot_selection cl_arm_scheduling_controls cl_arm_controlled_kernel_termination cl_ext_cxx_for_opencl cl_ext_image_tiling_control cl_ext_image_requirements_info cl_ext_image_from_buffer cl_ext_yuv_images
Device Extensions with Version cl_khr_global_int32_base_atomics 0x400000 (1.0.0)
cl_khr_global_int32_extended_atomics 0x400000 (1.0.0)
cl_khr_local_int32_base_atomics 0x400000 (1.0.0)
cl_khr_local_int32_extended_atomics 0x400000 (1.0.0)
cl_khr_byte_addressable_store 0x400000 (1.0.0)
cl_khr_3d_image_writes 0x400000 (1.0.0)
cl_khr_int64_base_atomics 0x400000 (1.0.0)
cl_khr_int64_extended_atomics 0x400000 (1.0.0)
cl_khr_fp16 0x400000 (1.0.0)
cl_khr_icd 0x400000 (1.0.0)
cl_khr_egl_image 0x400000 (1.0.0)
cl_khr_image2d_from_buffer 0x400000 (1.0.0)
cl_khr_depth_images 0x400000 (1.0.0)
cl_khr_subgroups 0x400000 (1.0.0)
cl_khr_subgroup_extended_types 0x400000 (1.0.0)
cl_khr_subgroup_non_uniform_vote 0x400000 (1.0.0)
cl_khr_subgroup_ballot 0x400000 (1.0.0)
cl_khr_subgroup_non_uniform_arithmetic 0x400000 (1.0.0)
cl_khr_subgroup_shuffle 0x400000 (1.0.0)
cl_khr_subgroup_shuffle_relative 0x400000 (1.0.0)
cl_khr_subgroup_clustered_reduce 0x400000 (1.0.0)
cl_khr_subgroup_rotate 0x400000 (1.0.0)
cl_khr_il_program 0x400000 (1.0.0)
cl_khr_priority_hints 0x400000 (1.0.0)
cl_khr_create_command_queue 0x400000 (1.0.0)
cl_khr_spirv_no_integer_wrap_decoration 0x400000 (1.0.0)
cl_khr_extended_versioning 0x400000 (1.0.0)
cl_khr_device_uuid 0x400000 (1.0.0)
cl_khr_suggested_local_work_size 0x400000 (1.0.0)
cl_khr_extended_bit_ops 0x400000 (1.0.0)
cl_khr_integer_dot_product 0x800000 (2.0.0)
cl_khr_semaphore 0x9000 (0.9.0)
cl_khr_external_semaphore 0x9000 (0.9.0)
cl_khr_external_semaphore_sync_fd 0x9000 (0.9.0)
cl_khr_command_buffer 0x9000 (0.9.0)
cl_arm_core_id 0x400000 (1.0.0)
cl_arm_printf 0x800000 (2.0.0)
cl_arm_non_uniform_work_group_size 0x400000 (1.0.0)
cl_arm_import_memory 0x401000 (1.1.0)
cl_arm_import_memory_dma_buf 0x400000 (1.0.0)
cl_arm_import_memory_host 0x400000 (1.0.0)
cl_arm_integer_dot_product_int8 0x400000 (1.0.0)
cl_arm_integer_dot_product_accumulate_int8 0x400000 (1.0.0)
cl_arm_integer_dot_product_accumulate_saturate_int8 0x400000 (1.0.0)
cl_arm_job_slot_selection 0x400000 (1.0.0)
cl_arm_scheduling_controls 0x4000 (0.4.0)
cl_arm_controlled_kernel_termination 0x400000 (1.0.0)
cl_ext_cxx_for_opencl 0x400000 (1.0.0)
cl_ext_image_tiling_control 0x1000 (0.1.0)
cl_ext_image_requirements_info 0x5000 (0.5.0)
cl_ext_image_from_buffer 0x400000 (1.0.0)
cl_ext_yuv_images 0x1000 (0.1.0)
NULL platform behavior
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...) No platform
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...) No platform
clCreateContext(NULL, ...) [default] No platform
clCreateContext(NULL, ...) [other] Success [ARM]
clCreateContextFromType(NULL, CL_DEVICE_TYPE_DEFAULT) Success (1)
Platform Name ARM Platform
Device Name Mali-G57 r0p1
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) Success (1)
Platform Name ARM Platform
Device Name Mali-G57 r0p1
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL) Success (1)
Platform Name ARM Platform
Device Name Mali-G57 r0p1
Vulkan Information
To determine Vulkan support details, you can query it by launch vulkaninfo
vulkaninfo
==========
VULKANINFO
==========
Vulkan Instance Version: 1.3.204
Instance Extensions: count = 12
===============================
VK_EXT_debug_report : extension revision 10
VK_EXT_debug_utils : extension revision 2
VK_EXT_headless_surface : extension revision 1
VK_KHR_device_group_creation : extension revision 1
VK_KHR_display : extension revision 23
VK_KHR_external_fence_capabilities : extension revision 1
VK_KHR_external_memory_capabilities : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2 : extension revision 1
VK_KHR_surface : extension revision 25
VK_KHR_wayland_surface : extension revision 6
Layers: count = 1
=================
VK_LAYER_window_system_integration (Window system integration layer) Vulkan version 1.3.216, layer version 1:
Layer Extensions: count = 3
VK_KHR_get_surface_capabilities2 : extension revision 1
VK_KHR_surface : extension revision 25
VK_KHR_wayland_surface : extension revision 6
Devices: count = 1
GPU id = 0 (Mali-G57)
Layer-Device Extensions: count = 2
VK_EXT_image_compression_control_swapchain : extension revision 1
VK_KHR_swapchain : extension revision 70
Presentable Surfaces:
=====================
GPU id : 0 (Mali-G57):
Surface type = VK_KHR_wayland_surface
Formats: count = 13
SurfaceFormat[0]:
format = FORMAT_R8G8B8_UNORM
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[1]:
format = FORMAT_R8G8B8A8_UNORM
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[2]:
format = FORMAT_B8G8R8A8_SRGB
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[3]:
format = FORMAT_B4G4R4A4_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[4]:
format = FORMAT_R4G4B4A4_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[5]:
format = FORMAT_B5G5R5A1_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[6]:
format = FORMAT_R5G5B5A1_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[7]:
format = FORMAT_A1R5G5B5_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[8]:
format = FORMAT_B8G8R8A8_UNORM
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[9]:
format = FORMAT_B5G6R5_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[10]:
format = FORMAT_B8G8R8_UNORM
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[11]:
format = FORMAT_R8G8B8A8_SRGB
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
SurfaceFormat[12]:
format = FORMAT_R5G6B5_UNORM_PACK16
colorSpace = COLOR_SPACE_SRGB_NONLINEAR_KHR
Present Modes: count = 2
PRESENT_MODE_FIFO_KHR
PRESENT_MODE_MAILBOX_KHR
VkSurfaceCapabilitiesKHR:
-------------------------
minImageCount = 2
maxImageCount = 6
currentExtent:
width = 4294967295
height = 4294967295
minImageExtent:
width = 1
height = 1
maxImageExtent:
width = 16384
height = 16384
maxImageArrayLayers = 1
supportedTransforms: count = 1
SURFACE_TRANSFORM_IDENTITY_BIT_KHR
currentTransform = SURFACE_TRANSFORM_IDENTITY_BIT_KHR
supportedCompositeAlpha: count = 2
COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
COMPOSITE_ALPHA_INHERIT_BIT_KHR
supportedUsageFlags: count = 6
IMAGE_USAGE_TRANSFER_SRC_BIT
IMAGE_USAGE_TRANSFER_DST_BIT
IMAGE_USAGE_SAMPLED_BIT
IMAGE_USAGE_STORAGE_BIT
IMAGE_USAGE_COLOR_ATTACHMENT_BIT
IMAGE_USAGE_INPUT_ATTACHMENT_BIT
Device Groups:
==============
Group 0:
Properties:
physicalDevices: count = 1
Mali-G57 (ID: 0)
subsetAllocation = 0
Present Capabilities:
Mali-G57 (ID: 0):
Can present images from the following devices: count = 1
Mali-G57 (ID: 0)
Present modes: count = 1
DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR
Device Properties and Extensions:
=================================
GPU0:
VkPhysicalDeviceProperties:
---------------------------
apiVersion = 4206817 (1.3.225)
driverVersion = 171966464 (0xa400000)
vendorID = 0x13b5
deviceID = 0x90910010
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
deviceName = Mali-G57
pipelineCacheUUID = 9b1db9df-56b8-5d7c-01b6-67037a496c68
VkPhysicalDeviceLimits:
-----------------------
maxImageDimension1D = 16384
maxImageDimension2D = 16384
maxImageDimension3D = 16384
maxImageDimensionCube = 16384
maxImageArrayLayers = 4096
maxTexelBufferElements = 268435456
maxUniformBufferRange = 65536
maxStorageBufferRange = 268435456
maxPushConstantsSize = 256
maxMemoryAllocationCount = 16384
maxSamplerAllocationCount = 4294967295
bufferImageGranularity = 0x00000001
sparseAddressSpaceSize = 0x00000000
maxBoundDescriptorSets = 7
maxPerStageDescriptorSamplers = 500000
maxPerStageDescriptorUniformBuffers = 36
maxPerStageDescriptorStorageBuffers = 500000
maxPerStageDescriptorSampledImages = 500000
maxPerStageDescriptorStorageImages = 500000
maxPerStageDescriptorInputAttachments = 9
maxPerStageResources = 500000
maxDescriptorSetSamplers = 500000
maxDescriptorSetUniformBuffers = 216
maxDescriptorSetUniformBuffersDynamic = 32
maxDescriptorSetStorageBuffers = 500000
maxDescriptorSetStorageBuffersDynamic = 32
maxDescriptorSetSampledImages = 500000
maxDescriptorSetStorageImages = 500000
maxDescriptorSetInputAttachments = 9
maxVertexInputAttributes = 32
maxVertexInputBindings = 32
maxVertexInputAttributeOffset = 2047
maxVertexInputBindingStride = 2048
maxVertexOutputComponents = 128
maxTessellationGenerationLevel = 64
maxTessellationPatchSize = 32
maxTessellationControlPerVertexInputComponents = 128
maxTessellationControlPerVertexOutputComponents = 128
maxTessellationControlPerPatchOutputComponents = 120
maxTessellationControlTotalOutputComponents = 4096
maxTessellationEvaluationInputComponents = 128
maxTessellationEvaluationOutputComponents = 128
maxGeometryShaderInvocations = 32
maxGeometryInputComponents = 128
maxGeometryOutputComponents = 128
maxGeometryOutputVertices = 256
maxGeometryTotalOutputComponents = 2048
maxFragmentInputComponents = 128
maxFragmentOutputAttachments = 8
maxFragmentDualSrcAttachments = 0
maxFragmentCombinedOutputResources = 1000008
maxComputeSharedMemorySize = 32768
maxComputeWorkGroupCount: count = 3
4294967295
4294967295
4294967295
maxComputeWorkGroupInvocations = 512
maxComputeWorkGroupSize: count = 3
512
512
512
subPixelPrecisionBits = 8
subTexelPrecisionBits = 8
mipmapPrecisionBits = 8
maxDrawIndexedIndexValue = 4294967295
maxDrawIndirectCount = 1
maxSamplerLodBias = 255
maxSamplerAnisotropy = 16
maxViewports = 1
maxViewportDimensions: count = 2
16384
16384
viewportBoundsRange: count = 2
-32768
32767
viewportSubPixelBits = 0
minMemoryMapAlignment = 64
minTexelBufferOffsetAlignment = 0x00000040
minUniformBufferOffsetAlignment = 0x00000010
minStorageBufferOffsetAlignment = 0x00000040
minTexelOffset = -8
maxTexelOffset = 7
minTexelGatherOffset = -8
maxTexelGatherOffset = 7
minInterpolationOffset = -0.5
maxInterpolationOffset = 0.5
subPixelInterpolationOffsetBits = 4
maxFramebufferWidth = 16384
maxFramebufferHeight = 16384
maxFramebufferLayers = 256
framebufferColorSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
framebufferDepthSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
framebufferStencilSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
framebufferNoAttachmentsSampleCounts: count = 4
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
SAMPLE_COUNT_16_BIT
maxColorAttachments = 8
sampledImageColorSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
sampledImageIntegerSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
sampledImageDepthSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
sampledImageStencilSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
storageImageSampleCounts: count = 1
SAMPLE_COUNT_1_BIT
maxSampleMaskWords = 1
timestampComputeAndGraphics = true
timestampPeriod = 76.9231
maxClipDistances = 0
maxCullDistances = 0
maxCombinedClipAndCullDistances = 0
discreteQueuePriorities = 2
pointSizeRange: count = 2
1
1024
lineWidthRange: count = 2
1
1
pointSizeGranularity = 0.0625
lineWidthGranularity = 0
strictLines = true
standardSampleLocations = true
optimalBufferCopyOffsetAlignment = 0x00000040
optimalBufferCopyRowPitchAlignment = 0x00000040
nonCoherentAtomSize = 0x00000040
VkPhysicalDeviceSparseProperties:
---------------------------------
residencyStandard2DBlockShape = false
residencyStandard2DMultisampleBlockShape = false
residencyStandard3DBlockShape = false
residencyAlignedMipSize = false
residencyNonResidentStrict = false
VkPhysicalDeviceCustomBorderColorPropertiesEXT:
-----------------------------------------------
maxCustomBorderColorSamplers = 4294967295
VkPhysicalDeviceDepthStencilResolveProperties:
----------------------------------------------
supportedDepthResolveModes: count = 1
RESOLVE_MODE_SAMPLE_ZERO_BIT
supportedStencilResolveModes: count = 1
RESOLVE_MODE_SAMPLE_ZERO_BIT
independentResolveNone = false
independentResolve = false
VkPhysicalDeviceDescriptorIndexingProperties:
---------------------------------------------
maxUpdateAfterBindDescriptorsInAllPools = 4294967295
shaderUniformBufferArrayNonUniformIndexingNative = false
shaderSampledImageArrayNonUniformIndexingNative = false
shaderStorageBufferArrayNonUniformIndexingNative = true
shaderStorageImageArrayNonUniformIndexingNative = false
shaderInputAttachmentArrayNonUniformIndexingNative = false
robustBufferAccessUpdateAfterBind = true
quadDivergentImplicitLod = false
maxPerStageDescriptorUpdateAfterBindSamplers = 500000
maxPerStageDescriptorUpdateAfterBindUniformBuffers = 36
maxPerStageDescriptorUpdateAfterBindStorageBuffers = 500000
maxPerStageDescriptorUpdateAfterBindSampledImages = 500000
maxPerStageDescriptorUpdateAfterBindStorageImages = 500000
maxPerStageDescriptorUpdateAfterBindInputAttachments = 9
maxPerStageUpdateAfterBindResources = 500000
maxDescriptorSetUpdateAfterBindSamplers = 500000
maxDescriptorSetUpdateAfterBindUniformBuffers = 216
maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 32
maxDescriptorSetUpdateAfterBindStorageBuffers = 500000
maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 32
maxDescriptorSetUpdateAfterBindSampledImages = 500000
maxDescriptorSetUpdateAfterBindStorageImages = 500000
maxDescriptorSetUpdateAfterBindInputAttachments = 9
VkPhysicalDeviceDriverProperties:
---------------------------------
driverID = DRIVER_ID_ARM_PROPRIETARY
driverName = Mali-G57
driverInfo = v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3
conformanceVersion = 1.3.3.1
VkPhysicalDeviceFloatControlsProperties:
----------------------------------------
denormBehaviorIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
roundingModeIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
shaderSignedZeroInfNanPreserveFloat16 = true
shaderSignedZeroInfNanPreserveFloat32 = true
shaderSignedZeroInfNanPreserveFloat64 = false
shaderDenormPreserveFloat16 = true
shaderDenormPreserveFloat32 = true
shaderDenormPreserveFloat64 = false
shaderDenormFlushToZeroFloat16 = true
shaderDenormFlushToZeroFloat32 = true
shaderDenormFlushToZeroFloat64 = false
shaderRoundingModeRTEFloat16 = true
shaderRoundingModeRTEFloat32 = true
shaderRoundingModeRTEFloat64 = false
shaderRoundingModeRTZFloat16 = true
shaderRoundingModeRTZFloat32 = true
shaderRoundingModeRTZFloat64 = false
VkPhysicalDeviceFragmentDensityMap2PropertiesEXT:
-------------------------------------------------
subsampledLoads = false
subsampledCoarseReconstructionEarlyAccess = true
maxSubsampledArrayLayers = 4096
maxDescriptorSetSubsampledSamplers = 8
VkPhysicalDeviceFragmentDensityMapPropertiesEXT:
------------------------------------------------
minFragmentDensityTexelSize:
width = 32
height = 32
maxFragmentDensityTexelSize:
width = 32
height = 32
fragmentDensityInvocations = true
VkPhysicalDeviceIDProperties:
-----------------------------
deviceUUID = 10009190-0100-0000-0000-000000000000
driverUUID = 61ca9692-464f-ae09-e956-8da4e1069754
deviceNodeMask = 0
deviceLUIDValid = false
VkPhysicalDeviceInlineUniformBlockProperties:
---------------------------------------------
maxInlineUniformBlockSize = 65536
maxPerStageDescriptorInlineUniformBlocks = 32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 32
maxDescriptorSetInlineUniformBlocks = 192
maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 192
VkPhysicalDeviceLineRasterizationPropertiesEXT:
-----------------------------------------------
lineSubPixelPrecisionBits = 8
VkPhysicalDeviceMaintenance3Properties:
---------------------------------------
maxPerSetDescriptors = 500000
maxMemoryAllocationSize = 0x1e8ed6000
VkPhysicalDeviceMaintenance4Properties:
---------------------------------------
maxBufferSize = 0xffffffff
VkPhysicalDeviceMultiviewProperties:
------------------------------------
maxMultiviewViewCount = 8
maxMultiviewInstanceIndex = 4294967295
VkPhysicalDevicePointClippingProperties:
----------------------------------------
pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
VkPhysicalDeviceProtectedMemoryProperties:
------------------------------------------
protectedNoFault = false
VkPhysicalDeviceProvokingVertexPropertiesEXT:
---------------------------------------------
provokingVertexModePerPipeline = false
transformFeedbackPreservesTriangleFanProvokingVertex = false
VkPhysicalDeviceSamplerFilterMinmaxProperties:
----------------------------------------------
filterMinmaxSingleComponentFormats = false
filterMinmaxImageComponentMapping = false
VkPhysicalDeviceShaderIntegerDotProductProperties:
--------------------------------------------------
integerDotProduct8BitUnsignedAccelerated = true
integerDotProduct8BitSignedAccelerated = true
integerDotProduct8BitMixedSignednessAccelerated = false
integerDotProduct4x8BitPackedUnsignedAccelerated = true
integerDotProduct4x8BitPackedSignedAccelerated = true
integerDotProduct4x8BitPackedMixedSignednessAccelerated = false
integerDotProduct16BitUnsignedAccelerated = false
integerDotProduct16BitSignedAccelerated = false
integerDotProduct16BitMixedSignednessAccelerated = false
integerDotProduct32BitUnsignedAccelerated = false
integerDotProduct32BitSignedAccelerated = false
integerDotProduct32BitMixedSignednessAccelerated = false
integerDotProduct64BitUnsignedAccelerated = false
integerDotProduct64BitSignedAccelerated = false
integerDotProduct64BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = true
integerDotProductAccumulatingSaturating8BitSignedAccelerated = true
integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = true
integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = true
integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = false
integerDotProductAccumulatingSaturating16BitSignedAccelerated = false
integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = false
integerDotProductAccumulatingSaturating32BitSignedAccelerated = false
integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = false
integerDotProductAccumulatingSaturating64BitSignedAccelerated = false
integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = false
VkPhysicalDeviceSubgroupProperties:
-----------------------------------
subgroupSize = 16
supportedStages: count = 10
SHADER_STAGE_FRAGMENT_BIT
SHADER_STAGE_COMPUTE_BIT
SHADER_STAGE_ALL_GRAPHICS
SHADER_STAGE_ALL
SHADER_STAGE_RAYGEN_BIT_KHR
SHADER_STAGE_ANY_HIT_BIT_KHR
SHADER_STAGE_CLOSEST_HIT_BIT_KHR
SHADER_STAGE_MISS_BIT_KHR
SHADER_STAGE_INTERSECTION_BIT_KHR
SHADER_STAGE_CALLABLE_BIT_KHR
supportedOperations: count = 8
SUBGROUP_FEATURE_BASIC_BIT
SUBGROUP_FEATURE_VOTE_BIT
SUBGROUP_FEATURE_ARITHMETIC_BIT
SUBGROUP_FEATURE_BALLOT_BIT
SUBGROUP_FEATURE_SHUFFLE_BIT
SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
SUBGROUP_FEATURE_CLUSTERED_BIT
SUBGROUP_FEATURE_QUAD_BIT
quadOperationsInAllStages = false
VkPhysicalDeviceSubgroupSizeControlProperties:
----------------------------------------------
minSubgroupSize = 16
maxSubgroupSize = 16
maxComputeWorkgroupSubgroups = 32
requiredSubgroupSizeStages: count = 10
SHADER_STAGE_FRAGMENT_BIT
SHADER_STAGE_COMPUTE_BIT
SHADER_STAGE_ALL_GRAPHICS
SHADER_STAGE_ALL
SHADER_STAGE_RAYGEN_BIT_KHR
SHADER_STAGE_ANY_HIT_BIT_KHR
SHADER_STAGE_CLOSEST_HIT_BIT_KHR
SHADER_STAGE_MISS_BIT_KHR
SHADER_STAGE_INTERSECTION_BIT_KHR
SHADER_STAGE_CALLABLE_BIT_KHR
VkPhysicalDeviceTexelBufferAlignmentProperties:
-----------------------------------------------
storageTexelBufferOffsetAlignmentBytes = 0x00000040
storageTexelBufferOffsetSingleTexelAlignment = false
uniformTexelBufferOffsetAlignmentBytes = 0x00000004
uniformTexelBufferOffsetSingleTexelAlignment = true
VkPhysicalDeviceTimelineSemaphoreProperties:
--------------------------------------------
maxTimelineSemaphoreValueDifference = 18446744073709551615
VkPhysicalDeviceTransformFeedbackPropertiesEXT:
-----------------------------------------------
maxTransformFeedbackStreams = 1
maxTransformFeedbackBuffers = 4
maxTransformFeedbackBufferSize = 0x10000000
maxTransformFeedbackStreamDataSize = 512
maxTransformFeedbackBufferDataSize = 512
maxTransformFeedbackBufferDataStride = 512
transformFeedbackQueries = true
transformFeedbackStreamsLinesTriangles = false
transformFeedbackRasterizationStreamSelect = false
transformFeedbackDraw = false
VkPhysicalDeviceVulkan11Properties:
-----------------------------------
deviceUUID = 10009190-0100-0000-0000-000000000000
driverUUID = 61ca9692-464f-ae09-e956-8da4e1069754
deviceNodeMask = 0
deviceLUIDValid = false
subgroupSize = 16
subgroupSupportedStages: count = 10
SHADER_STAGE_FRAGMENT_BIT
SHADER_STAGE_COMPUTE_BIT
SHADER_STAGE_ALL_GRAPHICS
SHADER_STAGE_ALL
SHADER_STAGE_RAYGEN_BIT_KHR
SHADER_STAGE_ANY_HIT_BIT_KHR
SHADER_STAGE_CLOSEST_HIT_BIT_KHR
SHADER_STAGE_MISS_BIT_KHR
SHADER_STAGE_INTERSECTION_BIT_KHR
SHADER_STAGE_CALLABLE_BIT_KHR
subgroupSupportedOperations: count = 8
SUBGROUP_FEATURE_BASIC_BIT
SUBGROUP_FEATURE_VOTE_BIT
SUBGROUP_FEATURE_ARITHMETIC_BIT
SUBGROUP_FEATURE_BALLOT_BIT
SUBGROUP_FEATURE_SHUFFLE_BIT
SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
SUBGROUP_FEATURE_CLUSTERED_BIT
SUBGROUP_FEATURE_QUAD_BIT
subgroupQuadOperationsInAllStages = false
pointClippingBehavior = POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
maxMultiviewViewCount = 8
maxMultiviewInstanceIndex = 4294967295
protectedNoFault = false
maxPerSetDescriptors = 500000
maxMemoryAllocationSize = 0x1e8ed6000
VkPhysicalDeviceVulkan12Properties:
-----------------------------------
driverID = DRIVER_ID_ARM_PROPRIETARY
driverName = Mali-G57
driverInfo = v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3
conformanceVersion = 1.3.3.1
denormBehaviorIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
roundingModeIndependence = SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL
shaderSignedZeroInfNanPreserveFloat16 = true
shaderSignedZeroInfNanPreserveFloat32 = true
shaderSignedZeroInfNanPreserveFloat64 = false
shaderDenormPreserveFloat16 = true
shaderDenormPreserveFloat32 = true
shaderDenormPreserveFloat64 = false
shaderDenormFlushToZeroFloat16 = true
shaderDenormFlushToZeroFloat32 = true
shaderDenormFlushToZeroFloat64 = false
shaderRoundingModeRTEFloat16 = true
shaderRoundingModeRTEFloat32 = true
shaderRoundingModeRTEFloat64 = false
shaderRoundingModeRTZFloat16 = true
shaderRoundingModeRTZFloat32 = true
shaderRoundingModeRTZFloat64 = false
maxUpdateAfterBindDescriptorsInAllPools = 4294967295
shaderUniformBufferArrayNonUniformIndexingNative = false
shaderSampledImageArrayNonUniformIndexingNative = false
shaderStorageBufferArrayNonUniformIndexingNative = true
shaderStorageImageArrayNonUniformIndexingNative = false
shaderInputAttachmentArrayNonUniformIndexingNative = false
robustBufferAccessUpdateAfterBind = true
quadDivergentImplicitLod = false
maxPerStageDescriptorUpdateAfterBindSamplers = 500000
maxPerStageDescriptorUpdateAfterBindUniformBuffers = 36
maxPerStageDescriptorUpdateAfterBindStorageBuffers = 500000
maxPerStageDescriptorUpdateAfterBindSampledImages = 500000
maxPerStageDescriptorUpdateAfterBindStorageImages = 500000
maxPerStageDescriptorUpdateAfterBindInputAttachments = 9
maxPerStageUpdateAfterBindResources = 500000
maxDescriptorSetUpdateAfterBindSamplers = 500000
maxDescriptorSetUpdateAfterBindUniformBuffers = 216
maxDescriptorSetUpdateAfterBindUniformBuffersDynamic = 32
maxDescriptorSetUpdateAfterBindStorageBuffers = 500000
maxDescriptorSetUpdateAfterBindStorageBuffersDynamic = 32
maxDescriptorSetUpdateAfterBindSampledImages = 500000
maxDescriptorSetUpdateAfterBindStorageImages = 500000
maxDescriptorSetUpdateAfterBindInputAttachments = 9
supportedDepthResolveModes: count = 1
RESOLVE_MODE_SAMPLE_ZERO_BIT
supportedStencilResolveModes: count = 1
RESOLVE_MODE_SAMPLE_ZERO_BIT
independentResolveNone = false
independentResolve = false
filterMinmaxSingleComponentFormats = false
filterMinmaxImageComponentMapping = false
maxTimelineSemaphoreValueDifference = 18446744073709551615
framebufferIntegerColorSampleCounts: count = 3
SAMPLE_COUNT_1_BIT
SAMPLE_COUNT_4_BIT
SAMPLE_COUNT_8_BIT
VkPhysicalDeviceVulkan13Properties:
-----------------------------------
minSubgroupSize = 16
maxSubgroupSize = 16
maxComputeWorkgroupSubgroups = 32
requiredSubgroupSizeStages: count = 10
SHADER_STAGE_FRAGMENT_BIT
SHADER_STAGE_COMPUTE_BIT
SHADER_STAGE_ALL_GRAPHICS
SHADER_STAGE_ALL
SHADER_STAGE_RAYGEN_BIT_KHR
SHADER_STAGE_ANY_HIT_BIT_KHR
SHADER_STAGE_CLOSEST_HIT_BIT_KHR
SHADER_STAGE_MISS_BIT_KHR
SHADER_STAGE_INTERSECTION_BIT_KHR
SHADER_STAGE_CALLABLE_BIT_KHR
maxInlineUniformBlockSize = 65536
maxPerStageDescriptorInlineUniformBlocks = 32
maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = 32
maxDescriptorSetInlineUniformBlocks = 192
maxDescriptorSetUpdateAfterBindInlineUniformBlocks = 192
maxInlineUniformTotalSize = 12582912
integerDotProduct8BitUnsignedAccelerated = true
integerDotProduct8BitSignedAccelerated = true
integerDotProduct8BitMixedSignednessAccelerated = false
integerDotProduct4x8BitPackedUnsignedAccelerated = true
integerDotProduct4x8BitPackedSignedAccelerated = true
integerDotProduct4x8BitPackedMixedSignednessAccelerated = false
integerDotProduct16BitUnsignedAccelerated = false
integerDotProduct16BitSignedAccelerated = false
integerDotProduct16BitMixedSignednessAccelerated = false
integerDotProduct32BitUnsignedAccelerated = false
integerDotProduct32BitSignedAccelerated = false
integerDotProduct32BitMixedSignednessAccelerated = false
integerDotProduct64BitUnsignedAccelerated = false
integerDotProduct64BitSignedAccelerated = false
integerDotProduct64BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = true
integerDotProductAccumulatingSaturating8BitSignedAccelerated = true
integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = true
integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = true
integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = false
integerDotProductAccumulatingSaturating16BitSignedAccelerated = false
integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = false
integerDotProductAccumulatingSaturating32BitSignedAccelerated = false
integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = false
integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = false
integerDotProductAccumulatingSaturating64BitSignedAccelerated = false
integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = false
storageTexelBufferOffsetAlignmentBytes = 0x00000040
storageTexelBufferOffsetSingleTexelAlignment = false
uniformTexelBufferOffsetAlignmentBytes = 0x00000004
uniformTexelBufferOffsetSingleTexelAlignment = true
maxBufferSize = 0xffffffff
Device Extensions: count = 95
VK_ARM_rasterization_order_attachment_access : extension revision 1
VK_EXT_4444_formats : extension revision 1
VK_EXT_astc_decode_mode : extension revision 1
VK_EXT_border_color_swizzle : extension revision 1
VK_EXT_calibrated_timestamps : extension revision 2
VK_EXT_custom_border_color : extension revision 12
VK_EXT_descriptor_indexing : extension revision 2
VK_EXT_device_memory_report : extension revision 2
VK_EXT_extended_dynamic_state : extension revision 1
VK_EXT_extended_dynamic_state2 : extension revision 1
VK_EXT_external_memory_dma_buf : extension revision 1
VK_EXT_fragment_density_map : extension revision 2
VK_EXT_fragment_density_map2 : extension revision 1
VK_EXT_global_priority : extension revision 2
VK_EXT_global_priority_query : extension revision 1
VK_EXT_host_query_reset : extension revision 1
VK_EXT_image_compression_control : extension revision 1
VK_EXT_image_compression_control_swapchain : extension revision 1
VK_EXT_image_drm_format_modifier : extension revision 2
VK_EXT_image_robustness : extension revision 1
VK_EXT_index_type_uint8 : extension revision 1
VK_EXT_inline_uniform_block : extension revision 1
VK_EXT_line_rasterization : extension revision 1
VK_EXT_load_store_op_none : extension revision 1
VK_EXT_multisampled_render_to_single_sampled : extension revision 1
VK_EXT_pipeline_creation_cache_control : extension revision 3
VK_EXT_pipeline_creation_feedback : extension revision 1
VK_EXT_primitive_topology_list_restart : extension revision 1
VK_EXT_primitives_generated_query : extension revision 1
VK_EXT_private_data : extension revision 1
VK_EXT_provoking_vertex : extension revision 1
VK_EXT_queue_family_foreign : extension revision 1
VK_EXT_rasterization_order_attachment_access : extension revision 1
VK_EXT_rgba10x6_formats : extension revision 1
VK_EXT_scalar_block_layout : extension revision 1
VK_EXT_separate_stencil_usage : extension revision 1
VK_EXT_shader_demote_to_helper_invocation : extension revision 1
VK_EXT_shader_image_atomic_int64 : extension revision 1
VK_EXT_shader_subgroup_ballot : extension revision 1
VK_EXT_shader_subgroup_vote : extension revision 1
VK_EXT_subgroup_size_control : extension revision 2
VK_EXT_subpass_merge_feedback : extension revision 2
VK_EXT_texel_buffer_alignment : extension revision 1
VK_EXT_texture_compression_astc_hdr : extension revision 1
VK_EXT_tooling_info : extension revision 1
VK_EXT_transform_feedback : extension revision 1
VK_KHR_16bit_storage : extension revision 1
VK_KHR_8bit_storage : extension revision 1
VK_KHR_bind_memory2 : extension revision 1
VK_KHR_buffer_device_address : extension revision 1
VK_KHR_copy_commands2 : extension revision 1
VK_KHR_create_renderpass2 : extension revision 1
VK_KHR_dedicated_allocation : extension revision 3
VK_KHR_depth_stencil_resolve : extension revision 1
VK_KHR_descriptor_update_template : extension revision 1
VK_KHR_device_group : extension revision 4
VK_KHR_driver_properties : extension revision 1
VK_KHR_dynamic_rendering : extension revision 1
VK_KHR_external_fence : extension revision 1
VK_KHR_external_fence_fd : extension revision 1
VK_KHR_external_memory : extension revision 1
VK_KHR_external_memory_fd : extension revision 1
VK_KHR_external_semaphore : extension revision 1
VK_KHR_external_semaphore_fd : extension revision 1
VK_KHR_format_feature_flags2 : extension revision 2
VK_KHR_get_memory_requirements2 : extension revision 1
VK_KHR_global_priority : extension revision 1
VK_KHR_image_format_list : extension revision 1
VK_KHR_imageless_framebuffer : extension revision 1
VK_KHR_maintenance1 : extension revision 2
VK_KHR_maintenance2 : extension revision 1
VK_KHR_maintenance3 : extension revision 1
VK_KHR_maintenance4 : extension revision 2
VK_KHR_multiview : extension revision 1
VK_KHR_relaxed_block_layout : extension revision 1
VK_KHR_sampler_mirror_clamp_to_edge : extension revision 3
VK_KHR_sampler_ycbcr_conversion : extension revision 14
VK_KHR_separate_depth_stencil_layouts : extension revision 1
VK_KHR_shader_atomic_int64 : extension revision 1
VK_KHR_shader_draw_parameters : extension revision 1
VK_KHR_shader_float16_int8 : extension revision 1
VK_KHR_shader_float_controls : extension revision 4
VK_KHR_shader_integer_dot_product : extension revision 1
VK_KHR_shader_non_semantic_info : extension revision 1
VK_KHR_shader_subgroup_extended_types : extension revision 1
VK_KHR_shader_terminate_invocation : extension revision 1
VK_KHR_spirv_1_4 : extension revision 1
VK_KHR_storage_buffer_storage_class : extension revision 1
VK_KHR_swapchain : extension revision 70
VK_KHR_synchronization2 : extension revision 1
VK_KHR_timeline_semaphore : extension revision 2
VK_KHR_uniform_buffer_standard_layout : extension revision 1
VK_KHR_variable_pointers : extension revision 1
VK_KHR_vulkan_memory_model : extension revision 3
VK_KHR_zero_initialize_workgroup_memory : extension revision 1
VkQueueFamilyProperties:
========================
queueProperties[0]:
-------------------
minImageTransferGranularity = (1,1,1)
queueCount = 2
queueFlags = QUEUE_GRAPHICS | QUEUE_COMPUTE | QUEUE_TRANSFER
timestampValidBits = 64
present support = true
VkQueueFamilyGlobalPriorityPropertiesKHR:
-----------------------------------------
priorityCount = 4
priorities: count = 16
128
256
512
1024
0
0
0
0
0
0
0
0
0
0
0
0
VkPhysicalDeviceMemoryProperties:
=================================
memoryHeaps: count = 1
memoryHeaps[0]:
size = 8202838016 (0x1e8ed6000) (7.64 GiB)
flags: count = 1
MEMORY_HEAP_DEVICE_LOCAL_BIT
memoryTypes: count = 3
memoryTypes[0]:
heapIndex = 0
propertyFlags = 0x0007: count = 3
MEMORY_PROPERTY_DEVICE_LOCAL_BIT
MEMORY_PROPERTY_HOST_VISIBLE_BIT
MEMORY_PROPERTY_HOST_COHERENT_BIT
usable for:
IMAGE_TILING_OPTIMAL:
color images
FORMAT_D16_UNORM
FORMAT_X8_D24_UNORM_PACK32
FORMAT_D32_SFLOAT
FORMAT_S8_UINT
FORMAT_D24_UNORM_S8_UINT
FORMAT_D32_SFLOAT_S8_UINT
(non-sparse, non-transient)
IMAGE_TILING_LINEAR:
color images
(non-sparse, non-transient)
memoryTypes[1]:
heapIndex = 0
propertyFlags = 0x000b: count = 3
MEMORY_PROPERTY_DEVICE_LOCAL_BIT
MEMORY_PROPERTY_HOST_VISIBLE_BIT
MEMORY_PROPERTY_HOST_CACHED_BIT
usable for:
IMAGE_TILING_OPTIMAL:
color images
FORMAT_D16_UNORM
FORMAT_X8_D24_UNORM_PACK32
FORMAT_D32_SFLOAT
FORMAT_S8_UINT
FORMAT_D24_UNORM_S8_UINT
FORMAT_D32_SFLOAT_S8_UINT
(non-sparse, non-transient)
IMAGE_TILING_LINEAR:
color images
(non-sparse, non-transient)
memoryTypes[2]:
heapIndex = 0
propertyFlags = 0x0011: count = 2
MEMORY_PROPERTY_DEVICE_LOCAL_BIT
MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
usable for:
IMAGE_TILING_OPTIMAL:
color images
(transient only)
IMAGE_TILING_LINEAR:
None
VkPhysicalDeviceFeatures:
=========================
robustBufferAccess = true
fullDrawIndexUint32 = true
imageCubeArray = true
independentBlend = true
geometryShader = true
tessellationShader = true
sampleRateShading = true
dualSrcBlend = false
logicOp = false
multiDrawIndirect = false
drawIndirectFirstInstance = true
depthClamp = true
depthBiasClamp = true
fillModeNonSolid = false
depthBounds = false
wideLines = false
largePoints = true
alphaToOne = false
multiViewport = false
samplerAnisotropy = true
textureCompressionETC2 = true
textureCompressionASTC_LDR = true
textureCompressionBC = false
occlusionQueryPrecise = true
pipelineStatisticsQuery = false
vertexPipelineStoresAndAtomics = false
fragmentStoresAndAtomics = true
shaderTessellationAndGeometryPointSize = false
shaderImageGatherExtended = true
shaderStorageImageExtendedFormats = true
shaderStorageImageMultisample = false
shaderStorageImageReadWithoutFormat = true
shaderStorageImageWriteWithoutFormat = true
shaderUniformBufferArrayDynamicIndexing = true
shaderSampledImageArrayDynamicIndexing = true
shaderStorageBufferArrayDynamicIndexing = true
shaderStorageImageArrayDynamicIndexing = true
shaderClipDistance = false
shaderCullDistance = false
shaderFloat64 = false
shaderInt64 = true
shaderInt16 = true
shaderResourceResidency = false
shaderResourceMinLod = false
sparseBinding = false
sparseResidencyBuffer = false
sparseResidencyImage2D = false
sparseResidencyImage3D = false
sparseResidency2Samples = false
sparseResidency4Samples = false
sparseResidency8Samples = false
sparseResidency16Samples = false
sparseResidencyAliased = false
variableMultisampleRate = false
inheritedQueries = false
VkPhysicalDevice16BitStorageFeatures:
-------------------------------------
storageBuffer16BitAccess = true
uniformAndStorageBuffer16BitAccess = true
storagePushConstant16 = true
storageInputOutput16 = true
VkPhysicalDevice4444FormatsFeaturesEXT:
---------------------------------------
formatA4R4G4B4 = true
formatA4B4G4R4 = true
VkPhysicalDevice8BitStorageFeatures:
------------------------------------
storageBuffer8BitAccess = true
uniformAndStorageBuffer8BitAccess = true
storagePushConstant8 = true
VkPhysicalDeviceASTCDecodeFeaturesEXT:
--------------------------------------
decodeModeSharedExponent = true
VkPhysicalDeviceBorderColorSwizzleFeaturesEXT:
----------------------------------------------
borderColorSwizzle = true
borderColorSwizzleFromImage = true
VkPhysicalDeviceBufferDeviceAddressFeatures:
--------------------------------------------
bufferDeviceAddress = true
bufferDeviceAddressCaptureReplay = false
bufferDeviceAddressMultiDevice = false
VkPhysicalDeviceCustomBorderColorFeaturesEXT:
---------------------------------------------
customBorderColors = true
customBorderColorWithoutFormat = true
VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
shaderInputAttachmentArrayDynamicIndexing = true
shaderUniformTexelBufferArrayDynamicIndexing = true
shaderStorageTexelBufferArrayDynamicIndexing = true
shaderUniformBufferArrayNonUniformIndexing = true
shaderSampledImageArrayNonUniformIndexing = true
shaderStorageBufferArrayNonUniformIndexing = true
shaderStorageImageArrayNonUniformIndexing = true
shaderInputAttachmentArrayNonUniformIndexing = true
shaderUniformTexelBufferArrayNonUniformIndexing = true
shaderStorageTexelBufferArrayNonUniformIndexing = true
descriptorBindingUniformBufferUpdateAfterBind = true
descriptorBindingSampledImageUpdateAfterBind = true
descriptorBindingStorageImageUpdateAfterBind = true
descriptorBindingStorageBufferUpdateAfterBind = true
descriptorBindingUniformTexelBufferUpdateAfterBind = true
descriptorBindingStorageTexelBufferUpdateAfterBind = true
descriptorBindingUpdateUnusedWhilePending = true
descriptorBindingPartiallyBound = true
descriptorBindingVariableDescriptorCount = true
runtimeDescriptorArray = true
VkPhysicalDeviceDeviceMemoryReportFeaturesEXT:
----------------------------------------------
deviceMemoryReport = true
VkPhysicalDeviceDynamicRenderingFeatures:
-----------------------------------------
dynamicRendering = true
VkPhysicalDeviceExtendedDynamicState2FeaturesEXT:
-------------------------------------------------
extendedDynamicState2 = true
extendedDynamicState2LogicOp = false
extendedDynamicState2PatchControlPoints = true
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT:
------------------------------------------------
extendedDynamicState = true
VkPhysicalDeviceFragmentDensityMap2FeaturesEXT:
-----------------------------------------------
fragmentDensityMapDeferred = true
VkPhysicalDeviceFragmentDensityMapFeaturesEXT:
----------------------------------------------
fragmentDensityMap = true
fragmentDensityMapDynamic = true
fragmentDensityMapNonSubsampledImages = false
VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR:
-----------------------------------------------
globalPriorityQuery = true
VkPhysicalDeviceHostQueryResetFeatures:
---------------------------------------
hostQueryReset = true
VkPhysicalDeviceImageRobustnessFeatures:
----------------------------------------
robustImageAccess = true
VkPhysicalDeviceImagelessFramebufferFeatures:
---------------------------------------------
imagelessFramebuffer = true
VkPhysicalDeviceIndexTypeUint8FeaturesEXT:
------------------------------------------
indexTypeUint8 = true
VkPhysicalDeviceInlineUniformBlockFeatures:
-------------------------------------------
inlineUniformBlock = true
descriptorBindingInlineUniformBlockUpdateAfterBind = true
VkPhysicalDeviceLineRasterizationFeaturesEXT:
---------------------------------------------
rectangularLines = true
bresenhamLines = true
smoothLines = false
stippledRectangularLines = false
stippledBresenhamLines = false
stippledSmoothLines = false
VkPhysicalDeviceMaintenance4Features:
-------------------------------------
maintenance4 = true
VkPhysicalDeviceMultiviewFeatures:
----------------------------------
multiview = true
multiviewGeometryShader = false
multiviewTessellationShader = false
VkPhysicalDevicePipelineCreationCacheControlFeatures:
-----------------------------------------------------
pipelineCreationCacheControl = true
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
--------------------------------------------------------
primitiveTopologyListRestart = true
primitiveTopologyPatchListRestart = false
VkPhysicalDevicePrivateDataFeatures:
------------------------------------
privateData = true
VkPhysicalDeviceProtectedMemoryFeatures:
----------------------------------------
protectedMemory = false
VkPhysicalDeviceProvokingVertexFeaturesEXT:
-------------------------------------------
provokingVertexLast = true
transformFeedbackPreservesProvokingVertex = false
VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT:
-------------------------------------------
formatRgba10x6WithoutYCbCrSampler = false
VkPhysicalDeviceSamplerYcbcrConversionFeatures:
-----------------------------------------------
samplerYcbcrConversion = true
VkPhysicalDeviceScalarBlockLayoutFeatures:
------------------------------------------
scalarBlockLayout = true
VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures:
----------------------------------------------------
separateDepthStencilLayouts = true
VkPhysicalDeviceShaderAtomicInt64Features:
------------------------------------------
shaderBufferInt64Atomics = true
shaderSharedInt64Atomics = true
VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures:
-------------------------------------------------------
shaderDemoteToHelperInvocation = true
VkPhysicalDeviceShaderDrawParametersFeatures:
---------------------------------------------
shaderDrawParameters = true
VkPhysicalDeviceShaderFloat16Int8Features:
------------------------------------------
shaderFloat16 = true
shaderInt8 = true
VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT:
--------------------------------------------------
shaderImageInt64Atomics = true
sparseImageInt64Atomics = false
VkPhysicalDeviceShaderIntegerDotProductFeatures:
------------------------------------------------
shaderIntegerDotProduct = true
VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures:
----------------------------------------------------
shaderSubgroupExtendedTypes = true
VkPhysicalDeviceShaderTerminateInvocationFeatures:
--------------------------------------------------
shaderTerminateInvocation = true
VkPhysicalDeviceSubgroupSizeControlFeatures:
--------------------------------------------
subgroupSizeControl = true
computeFullSubgroups = true
VkPhysicalDeviceSynchronization2Features:
-----------------------------------------
synchronization2 = true
VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT:
------------------------------------------------
texelBufferAlignment = true
VkPhysicalDeviceTextureCompressionASTCHDRFeatures:
--------------------------------------------------
textureCompressionASTC_HDR = true
VkPhysicalDeviceTimelineSemaphoreFeatures:
------------------------------------------
timelineSemaphore = true
VkPhysicalDeviceTransformFeedbackFeaturesEXT:
---------------------------------------------
transformFeedback = true
geometryStreams = false
VkPhysicalDeviceUniformBufferStandardLayoutFeatures:
----------------------------------------------------
uniformBufferStandardLayout = true
VkPhysicalDeviceVariablePointersFeatures:
-----------------------------------------
variablePointersStorageBuffer = true
variablePointers = true
VkPhysicalDeviceVulkan11Features:
---------------------------------
storageBuffer16BitAccess = true
uniformAndStorageBuffer16BitAccess = true
storagePushConstant16 = true
storageInputOutput16 = true
multiview = true
multiviewGeometryShader = false
multiviewTessellationShader = false
variablePointersStorageBuffer = true
variablePointers = true
protectedMemory = false
samplerYcbcrConversion = true
shaderDrawParameters = true
VkPhysicalDeviceVulkan12Features:
---------------------------------
samplerMirrorClampToEdge = true
drawIndirectCount = false
storageBuffer8BitAccess = true
uniformAndStorageBuffer8BitAccess = true
storagePushConstant8 = true
shaderBufferInt64Atomics = true
shaderSharedInt64Atomics = true
shaderFloat16 = true
shaderInt8 = true
descriptorIndexing = true
shaderInputAttachmentArrayDynamicIndexing = true
shaderUniformTexelBufferArrayDynamicIndexing = true
shaderStorageTexelBufferArrayDynamicIndexing = true
shaderUniformBufferArrayNonUniformIndexing = true
shaderSampledImageArrayNonUniformIndexing = true
shaderStorageBufferArrayNonUniformIndexing = true
shaderStorageImageArrayNonUniformIndexing = true
shaderInputAttachmentArrayNonUniformIndexing = true
shaderUniformTexelBufferArrayNonUniformIndexing = true
shaderStorageTexelBufferArrayNonUniformIndexing = true
descriptorBindingUniformBufferUpdateAfterBind = true
descriptorBindingSampledImageUpdateAfterBind = true
descriptorBindingStorageImageUpdateAfterBind = true
descriptorBindingStorageBufferUpdateAfterBind = true
descriptorBindingUniformTexelBufferUpdateAfterBind = true
descriptorBindingStorageTexelBufferUpdateAfterBind = true
descriptorBindingUpdateUnusedWhilePending = true
descriptorBindingPartiallyBound = true
descriptorBindingVariableDescriptorCount = true
runtimeDescriptorArray = true
samplerFilterMinmax = false
scalarBlockLayout = true
imagelessFramebuffer = true
uniformBufferStandardLayout = true
shaderSubgroupExtendedTypes = true
separateDepthStencilLayouts = true
hostQueryReset = true
timelineSemaphore = true
bufferDeviceAddress = true
bufferDeviceAddressCaptureReplay = false
bufferDeviceAddressMultiDevice = false
vulkanMemoryModel = true
vulkanMemoryModelDeviceScope = true
vulkanMemoryModelAvailabilityVisibilityChains = true
shaderOutputViewportIndex = true
shaderOutputLayer = false
subgroupBroadcastDynamicId = true
VkPhysicalDeviceVulkan13Features:
---------------------------------
robustImageAccess = true
inlineUniformBlock = true
descriptorBindingInlineUniformBlockUpdateAfterBind = true
pipelineCreationCacheControl = true
privateData = true
shaderDemoteToHelperInvocation = true
shaderTerminateInvocation = true
subgroupSizeControl = true
computeFullSubgroups = true
synchronization2 = true
textureCompressionASTC_HDR = true
shaderZeroInitializeWorkgroupMemory = true
dynamicRendering = true
shaderIntegerDotProduct = true
maintenance4 = true
VkPhysicalDeviceVulkanMemoryModelFeatures:
------------------------------------------
vulkanMemoryModel = true
vulkanMemoryModelDeviceScope = true
vulkanMemoryModelAvailabilityVisibilityChains = true
VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures:
------------------------------------------------------
shaderZeroInitializeWorkgroupMemory = true
Adjust GPU Frequency
The Mali GPU kernel driver supports devfreq-based Dynamic Voltage and Frequency Scaling (DVFS) support using the in-kernel devfreq framework.
Take Genio 1200-EVK as example, the Mali GPU is already integrated into the generic clock framework and the common regulator API and Operating Performance Points (OPPs)
have been registered on the Mali device-tree node. You can find Mali GPU node and available frequencies and supplied voltages are defined in OPPs table
(gpu_opp_table
) in device tree overlay. DVFS can help to reduce the power consumption by dynamically adjusting voltage and frequency of the GPU.
Genio 350 |
Genio 1200 |
Genio 700 |
|
Mali GPU node |
|||
Mali GPU ID |
13040000 |
13000000 |
13000000 |
Device tree |
src/meta-mediatek-bsp/recipes-kernel/dtbo/mt8365/gpu-mali.dts |
src/meta-mediatek-bsp/recipes-kernel/dtbo/mt8395/gpu-mali.dts |
src/meta-mediatek-bsp/recipes-kernel/dtbo/mt8390/gpu-mali.dts |
Taking Genio 1200-EVK as an example, the device tree overlay is as follows
/ {
compatible = "mediatek,mt8195";
fragment@0 {
target-path = "/soc";
__overlay__ {
gpu: mali@13000000 {
compatible = "mediatek,mt8195-mali", "arm,mali-midgard";
reg = <0 0x13000000 0 0x4000>;
interrupts =
<GIC_SPI 395 IRQ_TYPE_LEVEL_HIGH 0>,
<GIC_SPI 396 IRQ_TYPE_LEVEL_HIGH 0>,
<GIC_SPI 397 IRQ_TYPE_LEVEL_HIGH 0>;
interrupt-names =
"GPU",
"MMU",
"JOB";
/*
* Note: the properties below are not part of the
* upstream binding.
*/
clocks =
<&topckgen CLK_TOP_MFG_CK_FAST_REF>,
<&apmixedsys CLK_APMIXED_MFGPLL>,
<&apmixedsys CLK_APMIXED_MFGPLL>,
<&topckgen CLK_TOP_MFG_CORE_TMP>,
<&mfgcfg CLK_MFG_BG3D>;
clock-names =
"clk_mux",
"clk_pll_src",
"clk_main_parent",
"clk_sub_parent",
"subsys_bg3d";
operating-points-v2 = <&gpu_opp_table>;
power-domains =
<&spm MT8195_POWER_DOMAIN_MFG2>,
<&spm MT8195_POWER_DOMAIN_MFG3>,
<&spm MT8195_POWER_DOMAIN_MFG4>,
<&spm MT8195_POWER_DOMAIN_MFG5>,
<&spm MT8195_POWER_DOMAIN_MFG6>;
power-domain-names = "core0",
"core1",
"core2",
"core3",
"core4";
supply-names = "mali","mali_sram";
mali-supply = <&mt6315_7_vbuck1>;
mali_sram-supply = <&mt6359_vsram_others_ldo_reg>;
};
gpu_opp_table: opp_table0 {
compatible = "operating-points-v2", "operating-points-v2-mali";
opp-shared;
opp-390000000 {
opp-hz = /bits/ 64 <390000000>;
opp-hz-real = /bits/ 64 <390000000>,
/bits/ 64 <390000000>;
opp-microvolt = <625000>,
<750000>;
};
opp-410000000 {
opp-hz = /bits/ 64 <410000000>;
opp-hz-real = /bits/ 64 <410000000>,
/bits/ 64 <410000000>;
opp-microvolt = <631250>,
<750000>;
};
opp-431000000 {
opp-hz = /bits/ 64 <431000000>;
opp-hz-real = /bits/ 64 <431000000>,
/bits/ 64 <431000000>;
opp-microvolt = <631250>,
<750000>;
};
opp-473000000 {
opp-hz = /bits/ 64 <473000000>;
opp-hz-real = /bits/ 64 <473000000>,
/bits/ 64 <473000000>;
opp-microvolt = <637500>,
<750000>;
};
opp-515000000 {
opp-hz = /bits/ 64 <515000000>;
opp-hz-real = /bits/ 64 <515000000>,
/bits/ 64 <515000000>;
opp-microvolt = <637500>,
<750000>;
};
opp-556000000 {
opp-hz = /bits/ 64 <556000000>;
opp-hz-real = /bits/ 64 <556000000>,
/bits/ 64 <556000000>;
opp-microvolt = <643750>,
<750000>;
};
opp-598000000 {
opp-hz = /bits/ 64 <598000000>;
opp-hz-real = /bits/ 64 <598000000>,
/bits/ 64 <598000000>;
opp-microvolt = <650000>,
<750000>;
};
opp-640000000 {
opp-hz = /bits/ 64 <640000000>;
opp-hz-real = /bits/ 64 <640000000>,
/bits/ 64 <640000000>;
opp-microvolt = <650000>,
<750000>;
};
opp-670000000 {
opp-hz = /bits/ 64 <670000000>;
opp-hz-real = /bits/ 64 <670000000>,
/bits/ 64 <670000000>;
opp-microvolt = <662500>,
<750000>;
};
opp-700000000 {
opp-hz = /bits/ 64 <700000000>;
opp-hz-real = /bits/ 64 <700000000>,
/bits/ 64 <700000000>;
opp-microvolt = <675000>,
<750000>;
};
opp-730000000 {
opp-hz = /bits/ 64 <730000000>;
opp-hz-real = /bits/ 64 <730000000>,
/bits/ 64 <730000000>;
opp-microvolt = <687500>,
<750000>;
};
opp-760000000 {
opp-hz = /bits/ 64 <760000000>;
opp-hz-real = /bits/ 64 <760000000>,
/bits/ 64 <760000000>;
opp-microvolt = <700000>,
<750000>;
};
opp-790000000 {
opp-hz = /bits/ 64 <790000000>;
opp-hz-real = /bits/ 64 <790000000>,
/bits/ 64 <790000000>;
opp-microvolt = <712500>,
<750000>;
};
opp-820000000 {
opp-hz = /bits/ 64 <820000000>;
opp-hz-real = /bits/ 64 <820000000>,
/bits/ 64 <820000000>;
opp-microvolt = <725000>,
<750000>;
};
opp-850000000 {
opp-hz = /bits/ 64 <850000000>;
opp-hz-real = /bits/ 64 <850000000>,
/bits/ 64 <850000000>;
opp-microvolt = <737500>,
<750000>;
};
opp-880000000 {
opp-hz = /bits/ 64 <880000000>;
opp-hz-real = /bits/ 64 <880000000>,
/bits/ 64 <880000000>;
opp-microvolt = <750000>,
<750000>;
};
};
};
};
According to the ID of Mali GPU node, you can find corresponding device in /sys/devices/platform/soc/${Mali GPU node}.mali/devfreq/${Mali GPU node}.mali
.
You can also find all DVFS related attributes here.
Here are the attributes of DVFS:
ls -l /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/
total 0
-r--r--r-- 1 root root 4096 Jan 1 00:31 available_frequencies
-r--r--r-- 1 root root 4096 Jan 1 00:31 available_governors
-r--r--r-- 1 root root 4096 Jan 1 00:31 cur_freq
lrwxrwxrwx 1 root root 0 Jan 1 00:31 device -> ../../../13000000.mali
-rw-r--r-- 1 root root 4096 Jan 1 00:00 governor
rw-r--r-- 1 root root 4096 Jan 1 00:31 max_freq
-rw-r--r-- 1 root root 4096 Jan 1 00:31 min_freq
-r--r--r-- 1 root root 4096 Jan 1 00:31 name
drwxr-xr-x 2 root root 0 Jan 1 00:31 power
lrwxrwxrwx 1 root root 0 Jan 1 00:00 subsystem -> ../../../../../../class/devfreq
-r--r--r-- 1 root root 4096 Jan 1 00:31 target_freq
-rw-r--r-- 1 root root 4096 Jan 1 00:31 trans_stat
-rw-r--r-- 1 root root 4096 Jan 1 00:00 uevent
Query Available Frequencies
Concatenate available_frequencies
.
cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/available_frequencies
880000000 850000000 820000000 790000000 760000000 730000000 700000000 670000000 640000000 598000000 556000000 515000000 473000000 431000000 410000000 390000000
Query Current Frequency
Concatenate cur_freq
.
cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/cur_freq
390000000
Query Max and Min Frequencies
Concatenate max_freq
and min_freq
.
# query max frequency
cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/max_freq
880000000
# query min frequency
cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/min_freq
390000000
Set Max and Min Frequencies
Echo value of max_freq
and min_freq
.
# set max frequency to 560000000
echo 790000000 > /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/max_freq
# set min frequency to 560000000
echo 640000000 > /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/min_freq
Set Current Frequency
By default the simple_ondemand
governor is selected as the default governor, frequency changes automatically based on the system load.
For user specific GPU frequency, it can be done only for userspace
governor. So you have to change governor to userspace
, then set frequency to GPU.
Note
More in depth documentation about each governor can be found in the linux kernel documentation here: https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt
# query current frequency before operation
cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/cur_freq
880000000
# change governor to userspace to allow the user to set the gpu to a specific frequency
echo userspace > /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/governor
# set frequency
echo 700000000 > /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/userspace/set_freq
# check current frequency after operationn
cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/cur_freq
700000000
Performance Mode
Performance mode means forcing the CPU and GPU to run at maximum frequency. For GPU, regardless of the
platform, the cmd: echo performance > /sys/devices/platform/soc/${Mali GPU node}.mali/devfreq/${Mali GPU node}.mali/governor
can be used to make the GPU statically to the highest frequency.
echo performance > /sys/devices/platform/soc/13040000.mali/devfreq/13040000.mali/governor
But for the CPU, different platforms have different instructions to make the CPU statically to the highest frequency. Please refer to the corresponding section according to the platform:
For Genio 350-EVK, run at performance mode.
For Genio 510/700-EVK, run at performance mode.
For Genio 1200-EVK, run at performance mode.
Query GPU Utilization
Get GPU utilization by query gpu_utilization
attribute in GPU device node. The result will be Mali GPU utilization:${utilization}@${current_frequency}
cat /sys/devices/platform/soc/13000000.mali/gpu_utilization
Mali GPU utilization:60@390000000Hz
OpenGL ES Application
On IoT Yocto, there are several OpenGL ES applications can used to check that GPU is running and well integrated within the Wayland/Weston system.
weston-simple-egl
It’s a simple demonstration GLES program that draws a rotating colorized triangle on a transparent Wayland window.
You can find it in weston
package (aiot-yocto/src/poky/meta/recipes-graphics/wayland/weston_${version}.bb
)
and the source code from the weston repository.
Launch weston-simple-egl
Start
weston
service if it is not started yet.
For Genio 350-EVK, cmd to start weston.
For Genio 510/700-EVK, cmd to start weston.
For Genio 1200-EVK, cmd to start weston.
Launch
weston-simple-egl
weston-simple-egl
300 frames in 5 seconds: 60.000000 fps
301 frames in 5 seconds: 60.200001 fps
...
kmscube
It is a simple demonstration GLES program for how to drive bare metal graphics without a compositor (Wayland), using DRM/KMS (kernel mode setting), GBM (graphics buffer manager) and EGL for rendering content using OpenGL ES.
You can find it in kmscube
package (aiot-yocto/src/poky/meta/recipes-graphics/kmscube/kmscube_git.bb
).
And you can also find source code from mesa gitlab.
Launch kmscube
Stop
weston
service if it already started.
For Genio 350-EVK, cmd to stop weston.
For Genio 510/700-EVK, cmd to stop weston.
For Genio 1200-EVK, cmd to stop weston.
Launch
kmscube
kmscube
Using display 0xaaaadcbd5180 with EGL version 1.4
===================================
EGL information:
version: "1.4 Valhall-"r41p0-01eac0""
vendor: "ARM"
client extensions: "EGL_EXT_client_extensions EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_KHR_platform_gbm EGL_KHR_platform_wayland EGL_EXT_platform_wayland"
display extensions: "EGL_WL_bind_wayland_display EGL_NV_context_priority_realtime EGL_KHR_partial_updateEGL_EXT_buffer_age EGL_KHR_config_attribs EGL_KHR_image EGL_KHR_image_base EGL_KHR_fence_sync EGL_KHR_wait_sync EGL_KHR_gl_colorspace EGL_KHR_get_all_proc_addresses EGL_IMG_context_priority EGL_KHR_no_config_context EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_EXT_yuv_surface EGL_EXT_pixel_format_float EGL_ARM_pixmap_multisample_discard EGL_ARM_implicit_external_sync EGL_ANDROID_native_fence_sync EGL_KHR_gl_texture_2D_image EGL_KHR_gl_renderbuffer_image EGL_KHR_create_context EGL_KHR_surfaceless_context EGL_KHR_gl_texture_cubemap_image EGL_EXT_image_gl_colorspace EGL_EXT_create_context_robustness"
===================================
OpenGL ES 2.x information:
version: "OpenGL ES 3.2 v1.r41p0-01eac0.c36381f2278bad73183210f9208267f3"
shading language version: "OpenGL ES GLSL ES 3.20"
vendor: "ARM"
renderer: "Mali-G57"
...
GPU Benchmark
glmark2
IoT Yocto provides glmark2 which is an OpenGL 2.0 and ES 2.0 benchmark.
It offers a suite of scenes that can be used to measure many aspects of OpenGL (ES) 2.0 performance.
By default, glmark2
is already prebuilt into the rity-demo-image, or you can also modify the $BUILD_DIR/conf/local.conf
and add the following change to build and install glmark2
into the image.
IMAGE_INSTALL_append = " glmark2 "
If glmark2
is enabled, you can use cmd: whereis
to find glmark2-es2-wayland
and glmark2-es2-drm
on board.
glmark2-es2-wayland
: run benchmark as a Wayland client.glmark2-es2-drm
: run benchmark as a native DRM/GBM OpenGL ES application.
whereis glmark2-es2-wayland
glmark2-es2-wayland: /usr/bin/glmark2-es2-wayland
whereis glmark2-es2-drm
glmark2-es2-drm: /usr/bin/glmark2-es2-drm
Launch glmark2-es2-wayland
Start
weston
service if it is not started yet.
systemctl start weston
Before running
glmark2-es2-wayland
, we set both the CPU and GPU to performance mode..Launch
glmark2-es2-wayland
. By default, it renders various scenes in a output window with the resolution of 800x600, but the complexity of these scenes does not make the GPU to achieve a 100% usage rate. Therefore, we let glmark2 render to a window with higher resolution: 1920x1080, performing benchmarks when the GPU usage rate is close to 100%. You can find benchmark score when it finishes.
glmark2-es2-wayland -s 1920x1080
=======================================================
...
=======================================================
glmark2 Score: 2192
=======================================================
Launch glmark2-es2-drm
Stop
weston
service if it already started.
systemctl stop weston
Before running
glmark2-es2-drm
, we set both the CPU and GPU to performance mode.Launch
glmark2-es2-drm
with specified visual config. Default it renders scene at fullscreen resolution and fps is locked to the display refresh rate. You can find benchmark score when it finishes.
glmark2-es2-drm --visual-config 'red=8:green=8:blue=8:alpha=0:buffer=24:depth=24:stencil=8'
=======================================================
...
=======================================================
glmark2 Score: 60
Benchmark result of each SoC platform:
For Genio 350-EVK, here is glmark2 benchmark result.
For Genio 510/700-EVK, here is glmark2 benchmark result.
For Genio 1200-EVK, here is glmark2 benchmark result.
Reference Boards
GPU on different platforms may have some platform-specific instructions or test results. For example, you will get different benchmark results on different platforms. Please find more details about difference of GPU on each platform: