BXS 4-64 MC1 and PVRTC

Hi,
Before ,I use SGX544, PVRTC format was supported
Now I update the hardware to BXS 4-64 MC1, can someone tell me the PVRTC if still supported?

I can not find the PVRTC in manual doc, would be very grateful if I could get some responses!

Hi axel,

Thanks for your message.

In IMG BXS-4-64 MC1 - Imagination I can see PVRTC is supported.

Please let me know if you experience any issues when using PVRTC.

Best regards,
Alejandro

Hi AlejandroC,
Thanks for your reply!

I got GLError 500, format is PVRTC2_4BPP

below is my code
GLCheck(glCompressedTexImage2D(
static_cast(GL_TEXTURE_2D),
static_cast(0),
static_cast(0x9138),
static_cast(texWidth),
static_cast(texHeight),
static_cast(0),
static_cast(size),
pxlData));

Is the enum 0x9138 the correct param?

Hi axel,

Yes, it is the correct enum. You can verify other enums in this file of our public SDK: Native_SDK/framework/PVRCore/textureio/FileDefinesKTX.h at 6e7a32d39f436800690d20f0839c27ee280f29eb · powervr-graphics/Native_SDK · GitHub

I would advice to use glGetString(GL_EXTENSIONS); to show all extensions supported, you can then verify whether extension GL_IMG_texture_compression_pvrtc for PVRTC v1 or extension GL_IMG_texture_compression_pvrtc2 for PVRTC v2 are reported as supported.

Please let me know if you still have issues verifying PVRTC v1 / PVRTC v2 support on your GPU core.

Best regards,
Alejandro

Hi AlejandroC,

Looks like there is no PVR support, extension as below

GL_ANDROID_extension_pack_es31a
GL_APPLE_texture_format_BGRA8888
GL_EXT_blend_minmax
GL_EXT_buffer_storage
GL_EXT_clear_texture
GL_EXT_clip_control
GL_EXT_color_buffer_float
GL_EXT_color_buffer_half_float
GL_EXT_compressed_ETC1_RGB8_sub_texture
GL_EXT_conservative_depth
GL_EXT_copy_image
GL_EXT_discard_fraViewSelect
GL_EXT_draw_buffers
GL_EXT_draw_buffers_indexed
GL_EXT_draw_elements_base_vertex
GL_EXT_EGL_image_array
GL_EXT_float_blend
GL_EXT_geometry_point_size
GL_EXT_geometry_shader
GL_EXT_gpu_shader5
GL_EXT_multi_draw_arrays
GL_EXT_multisampled_render_to_texture
GL_EXT_multisampled_render_to_texture2
GL_EXT_occlusion_query_boolean
GL_EXT_polygon_offset_clamp
GL_EXT_primitive_bounding_box
GL_EXT_read_format_bgra
GL_EXT_robustness
GL_EXT_separate_shader_objects
GL_EXT_shader_framebuffer_fetch
GL_EXT_shader_group_vote
GL_EXT_shader_implicit_conversions
GL_EXT_shader_io_blocks
GL_EXT_shader_non_constant_global_initializers
GL_EXT_shader_pixel_local_storage
GL_EXT_shader_pixel_local_storage2
GL_EXT_shader_texture_lod
GL_EXT_shadow_samplers
GL_EXT_sparse_texture
GL_EXT_sRGB
GL_EXT_sRGB_write_control
GL_EXT_tessellation_point_size
GL_EXT_tessellation_shader
GL_EXT_texture_border_clamp
GL_EXT_texture_buffer
GL_EXT_texture_cube_map_array
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_format_sRGB_override
GL_EXT_texture_rg
GL_EXT_texture_shadow_lod
GL_EXT_texture_sRGB_decode
GL_EXT_texture_sRGB_R8
GL_EXT_texture_sRGB_RG8
GL_EXT_texture_type_2_10_10_10_REV
GL_EXT_unpack_subimage
GL_EXT_YUV_target
GL_EXT_texture_storage_compression
GL_IMG_framebuffer_downsample
GL_IMG_multisampled_render_to_texture
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_format_BGRA8888
GL_IMG_texture_npot
GL_KHR_blend_equation_advanced
GL_KHR_blend_equation_advanced_coherent

GL_KHR_debug
GL_KHR_robustness
GL_KHR_texture_compression_astc_ldr
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_depth24
GL_OES_depth_texture
GL_OES_depth_texture_cube_map
GL_OES_draw_buffers_indexed
GL_OES_draw_elements_base_vertex
GL_OES_EGL_image
GL_OES_EGL_image_external
GL_OES_EGL_image_external_essl3
GL_OES_EGL_sync
GL_OES_element_index_uint
GL_OES_fragment_precision_high
GL_OES_geometry_point_size
GL_OES_geometry_shader
GL_OES_get_program_binary
GL_OES_gpu_shader5
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_required_internalformat
GL_OES_rgb8_rgba8
GL_OES_sample_shading
GL_OES_sample_variables
GL_OES_shader_image_atomic
GL_OES_shader_io_blocks
GL_OES_shader_multisample_interpolation
GL_OES_standard_derivatives
GL_OES_surfaceless_context
GL_OES_tessellation_point_size
GL_OES_tessellation_shader
GL_OES_texture_3D
GL_OES_texture_border_clamp
GL_OES_texture_buffer
GL_OES_texture_cube_map_array
GL_OES_texture_float
GL_OES_texture_half_float
GL_OES_texture_npot
GL_OES_texture_stencil8
GL_OES_texture_storage_multisample_2d_array
GL_OES_vertex_array_object
GL_OES_vertex_half_float
GL_OVR_multiview
GL_OVR_multiview2
GL_OVR_multiview_multisampled_render_to_texture

Hi axel,

Thanks for the detailed information. Could I ask you please to provide the graphics driver version (DDK) you are using?

I will report this internally and provide you any information that could be useful.

Best regards,
Alejandro

Hi axel,

I have confirmed PVRTC is unfortunately not supported in the core you are using, BXS 4-64 MC1. The commercial product information under IMG BXS-4-64 MC1 - Imagination has been updated, apologies for the confusion.

Best regards,
Alejandro

Thanks AlejandroC!

Do we support EGL_SAMPLE_BUFFERS? Our eglCreatePixmapSurface will return failed when we enable anti-alising (EGL_SAMPLES 4) as below, (our buffer is ghs_create_egl_native_pixmap_rgb565)

image

Hi axel,

Unfortunately it is unlikely multisample will be supported. I can see in the EGL Spec from Khronos ( https://registry.khronos.org/EGL/specs/eglspec.1.5.pdf ) page 6, second paragraph: Pixmap surfaces typically do not support multisampling, since the native pixmap used as the color buffer is unlikely to provide space to store multisample information.

Best regards,
Alejandro

Hi AlejandroC,

Thanks for your reply!

Our old platform TDA2 , SGX544 also use the Pixmap surfaces which support the EGL_SAMPLES config

Our new platform TDA4, I check the manual doc of BXS-4 64 , I can see the HW support the Anti-aliasing

According to my understanding, if the old platform supports the new platform, it should also support it.

Hi axel,

Thanks for your message.

I will ask internally to get more information about this issue, but I will need please the information below:

  • What GPU model do you have? (IMG BXS-4-64 MC1 / MC2 / MC4)
  • What GPU driver version are you using?
  • Can you provide a self contained source code reproducing the pixmap creation process?
  • Can you provide the error you are getting when the call to eglCreatePixmapSurface fails?

Best regards,
Alejandro

Hi AlejandroC,

  • What GPU model do you have? (IMG BXS-4-64 MC1 / MC2 / MC4)*
    MC1

  • What GPU driver version are you using?
    Currently, i don’t know, our driver provide by GHS

  • Can you provide a self contained source code reproducing the pixmap creation process?
    Basic step as below,

      EGLint configurationAttributes[] = {
          EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT_KHR,
          EGL_DEPTH_SIZE,   8,
          EGL_STENCIL_SIZE, 8,
          EGL_SAMPLE_BUFFERS, 1,
         EGL_SAMPLES, 4,
          EGL_NONE};
      retVal = eglChooseConfig(m_eglDisplay,
      			 configurationAttributes,
      			 &m_eglConfig,
      			 1,
      			 &configsReturned);
      ghs_create_egl_native_pixmap_rgb565()                                        
      EGLSurface surface = eglCreatePixmapSurface(dpy, config, pixmap, NULL);
    
  • Can you provide the error you are getting when the call to eglCreatePixmapSurface fails?
    EGL ERROR: 0x3003(EGL_BAD_ALLOC)

Hi axel,

The reference in the IMG BXS-4-64 MC1 GPU manual for multisampling support refers to a more general case like multisampling on the backbuffer or multisamples textures, not specifying GLES pixmaps.

Reviewing the EGL spec ( https://registry.khronos.org/EGL/specs/eglspec.1.5.pdf ) in section 3.5.4 Creating Native Pixmap Rendering Surfaces I can read: The behavior of eglCreatePixmapSurface is identical to that of eglCreatePlatformPixmapSurface except that the set of platforms to which dpy is permitted to belong, as well as the actual type of pixmap, are implementation specific.

Now, in the Errors part of section 3.5.4, I can see there are two specific cases when an EGL_BAD_ALLOC is reported:

  • If there is already an EGLSurface associated with pixmap (as a result of a previous eglCreatePlatformPixmapSurface call), then a EGL_BAD_ALLOC error is generated.
  • Finally, if the implementation cannot allocate resources for the new EGL pixmap, an EGL_BAD_ALLOC error is generated.

I would say in your case the EGL_BAD_ALLOC error is due to the second cause (the implementation cannot allocate resources for the new EGL pixmap). I would advice you ask GHS in this regard, perhaps the call to ghs_create_egl_native_pixmap_rgb565() is involved and is not considering our new Volcanic GPU architecture which PowerVR IMG BXS-4-64 GPUs belong to, or the GPU unfortunately does not support this feature.

Best regards,
Alejandro

Thanks a lot , AlejandroC