.. include:: /keyword.rst .. _gpu-common: === GPU === .. contents:: Sections :local: :depth: 1 .. toctree:: :hidden: Genio 350-EVK Genio 510/700-EVK Genio 1200-EVK -------------------------------- 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: :ref:`Device-Dependent ` to find more details about difference of GPU on each platform. .. note:: Starting from IoT Yocto |CURR-YOCTO-VERSION|, 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 :doc:`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 |G1200-EVK-REF-BOARD| as an example: .. prompt:: bash # auto # 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 |CURR-YOCTO-VERSION|, |G1200-EVK-REF-BOARD|. 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 .. prompt:: bash # auto # 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`` .. prompt:: bash # auto # 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`` .. prompt:: bash # auto # 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: 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 |G1200-EVK-REF-BOARD| 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 :ref:`Mali GPU node ` and available frequencies and supplied voltages are defined in OPPs table (``gpu_opp_table``) in :ref:`device tree overlay `. DVFS can help to reduce the power consumption by dynamically adjusting voltage and frequency of the GPU. .. _gpu-node-dts: .. csv-table:: GPU node, ID and device tree overlay :class: longtable :file: /_asset/tables/gpu-dts-node.csv :width: 65% :widths: 30,70,70,70 Taking |G1200-EVK-REF-BOARD| 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 = , , ; 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: .. prompt:: bash # auto # 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``. .. prompt:: bash # auto # 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``. .. prompt:: bash # auto # cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/cur_freq 390000000 Query Max and Min Frequencies ***************************** Concatenate ``max_freq`` and ``min_freq``. .. prompt:: bash # auto # # 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``. .. prompt:: bash # auto # # 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 .. prompt:: bash # auto # # query current frequency before operation # cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/cur_freq 880000000 .. prompt:: bash # auto # # 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 .. prompt:: bash # auto # # set frequency # echo 700000000 > /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/userspace/set_freq .. prompt:: bash # auto # # check current frequency after operationn # cat /sys/devices/platform/soc/13000000.mali/devfreq/13000000.mali/cur_freq 700000000 -------------------------------- .. _gpu_run-runder-performance-mode: 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. .. prompt:: bash # auto # 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 |i350-EVK-REF-BOARD|, :ref:`run at performance mode `. - For |G510-G700-EVK-REF-BOARD|, :ref:`run at performance mode `. - For |G1200-EVK-REF-BOARD|, :ref:`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}`` .. prompt:: bash # auto # cat /sys/devices/platform/soc/13000000.mali/gpu_utilization Mali GPU utilization:60@390000000Hz -------------------------------- .. _gles-app: 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` ^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. Start ``weston`` service if it is not started yet. - For |G350-EVK-REF-BOARD|, :ref:`cmd to start weston `. - For |G510-G700-EVK-REF-BOARD|, :ref:`cmd to start weston `. - For |G1200-EVK-REF-BOARD|, :ref:`cmd to start weston `. 2. Launch ``weston-simple-egl`` .. prompt:: bash # auto # weston-simple-egl 300 frames in 5 seconds: 60.000000 fps 301 frames in 5 seconds: 60.200001 fps ... .. figure:: /_asset/sw_yocto_gpu-weston-simple-egl-screenshot.png :align: center Screenshot of `weston-simple-egl` `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` ^^^^^^^^^^^^^^^^ 1. Stop ``weston`` service if it already started. - For |g350-EVK-REF-BOARD|, :ref:`cmd to stop weston `. - For |G510-G700-EVK-REF-BOARD|, :ref:`cmd to stop weston `. - For |G1200-EVK-REF-BOARD|, :ref:`cmd to stop weston `. 2. Launch ``kmscube`` .. prompt:: bash # auto # 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" ... .. figure:: /_asset/sw_yocto_gpu-kmscube-screenshot.png :align: center Screenshot of `kmscube` -------------------------------- .. _gpu-benchmark: 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. .. code:: 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. .. prompt:: bash # auto # whereis glmark2-es2-wayland glmark2-es2-wayland: /usr/bin/glmark2-es2-wayland # whereis glmark2-es2-drm glmark2-es2-drm: /usr/bin/glmark2-es2-drm .. _glmark2-es2-wayland: Launch `glmark2-es2-wayland` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1. Start ``weston`` service if it is not started yet. .. prompt:: bash # auto # systemctl start weston 2. Before running ``glmark2-es2-wayland``, we set both the CPU and GPU to :ref:`performance mode. `. 3. 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. .. prompt:: bash # auto # glmark2-es2-wayland -s 1920x1080 ======================================================= ... ======================================================= glmark2 Score: 2192 ======================================================= .. _glmark2-es2-drm: Launch `glmark2-es2-drm` ^^^^^^^^^^^^^^^^^^^^^^^^ 1. Stop ``weston`` service if it already started. .. prompt:: bash # auto # systemctl stop weston 2. Before running ``glmark2-es2-drm``, we set both the CPU and GPU to :ref:`performance mode. ` 3. 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. .. prompt:: bash # auto # 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 |i350-EVK-REF-BOARD|, :ref:`here is glmark2 benchmark result `. - For |G510-G700-EVK-REF-BOARD|, :ref:`here is glmark2 benchmark result `. - For |G1200-EVK-REF-BOARD|, :ref:`here is glmark2 benchmark result `. .. _device-dependent: 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: - :doc:`Genio 350-EVK GPU `. - :doc:`Genio 510/700-EVK GPU `. - :doc:`Genio 1200-EVK GPU `.