PVRCarbon offline recording

Hi, I am trying to trace a Qt app using PVRCarbon and record it into a file, copy it to a Windows host PC and load the recording into GUI. I want to check the frame of each swap buffer and OpenGL ES calls.
in this case what shall I set the variable of PVRCARBON_host_library_egl and PVRCARBON_host_library_glesv2?

here is result I tried

root@b2qt-salvator-x:~# PVRCARBON_network_enable=false PVRCARBON_filename=/home/root/qt-debug.pvrcbn LD_LIBRARY_PATH=/home/root/Linux_armv8_64:$LD_LIBRARY_PATH /usr/bin/apptest
PVRCarbon Recorder v0.11 (23.2@24ff2634a052)
loaded module: libgbm_kms.so.1
PVRCarbon|WARNING: EGL host library path not set.
PVRCarbon|WARNING: OpenGL ES v2 host library path not set.
PVRCarbon|WARNING: OpenCL host library path not set.
PVRCarbon|Recording process: 'apptest'
PVRCarbon|Note: By default to support multi-platform playback we override api alignment values to our recommended values. To disable this set the align recommended option to false
PVRCarbon|Successfully installed syshooks
PVRCarbon|Recording frames: 0-4294967295
PVRCarbon|Writing intermediate data to '/home/root/qt-debug.0000.parts'
PVRCarbon|ERROR: Host EGL path is unset
PVRCarbon|CRITICAL: Aborting... Unable to recover from error

the above error fixed by

PVRCARBON_exit_after_frame=100
PVRCARBON_frames=0-100
PVRCARBON_flush_behaviour=5 
PVRCARBON_host_library_egl="/home/root/Linux_armv8_64/libEGL.so" 
PVRCARBON_host_library_glesv2="/home/root/Linux_armv8_64/libGLESv2.so" 
PVRCARBON_network_enable=false 
PVRCARBON_filename=/home/root/qt-debug.pvrcbn 
PVRCARBON_align_memory=false 
LD_LIBRARY_PATH=/home/root/Linux_armv8_64 /usr/bin/apptest

I am facing another problem is PVRCARBON_frames and PVRCARBON_exit_after_frame don’t work
even I set it to 100, the app won’t exit after 100 frames and show below no matter how I change the frame range

PVRCarbon|Recording frames: 0-4294967295

getting another error…

PVRCarbon|ERROR: Failed to open file '/home/root/apptest_frames_0-100.0000.parts/0.1017.calls.pvrcbn.part' (Too many open files)
PVRCarbon|ERROR: Could not open '/home/root/apptest_frames_0-100.0000.parts/0.1017.calls.pvrcbn.part' for writing

Full log:

root@b2qt-salvator-x:~# /usr/bin/apptest
PVRCarbon Recorder v0.11 (23.2@24ff2634a052)
Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
Qt depends on a UTF-8 locale, and has switched to "C.UTF-8" instead.
If this causes problems, reconfigure your locale. See the locale(1) manual
for more information.
loaded module: libgbm_kms.so.1
PVRCarbon|DEBUG: EnvironmentConfig: Set host egl library path to '/home/root/Linux_armv8_64/libEGL.so'
PVRCarbon|DEBUG: EnvironmentConfig: Set host glesv2 library path to '/home/root/Linux_armv8_64/libGLESv2.so'
PVRCarbon|DEBUG: EnvironmentConfig: Set frames to '0-100'
PVRCarbon|DEBUG: EnvironmentConfig: Enabled bundle parts
PVRCarbon|DEBUG: EnvironmentConfig: Enabled bundle compression
PVRCarbon|DEBUG: EnvironmentConfig: Disabled frame grabbing
PVRCarbon|DEBUG: EnvironmentConfig: Set exit after frame to 100
PVRCarbon|DEBUG: EnvironmentConfig: Set flush behaviour to flush at the end of every frame
PVRCarbon|DEBUG: EnvironmentConfig: Disabled native buffer recording
PVRCarbon|DEBUG: EnvironmentConfig: Set DRM device to '/dev/dri/card0'
PVRCarbon|DEBUG: EnvironmentConfig: Disabled network recording
PVRCarbon|DEBUG: EnvironmentConfig: Set alignment to device values
PVRCarbon|DEBUG: EnvironmentConfig: Set memory alignment to -1
PVRCarbon|DEBUG: vk_layer_settings: Did not locate 'vk_layer_settings.txt' for parsing
PVRCarbon|INFORMATION: Set EGL host library path to '/home/root/Linux_armv8_64/libEGL.so'.
PVRCarbon|INFORMATION: Set OpenGL ES v2 host library path to '/home/root/Linux_armv8_64/libGLESv2.so'.
PVRCarbon|WARNING: OpenCL host library path not set.
PVRCarbon|Recording process: 'apptest'
PVRCarbon|DEBUG: Library '/lib/libc.so.6' loaded
PVRCarbon|DEBUG: Library '/lib/libc.so.6' unloaded
PVRCarbon|Successfully installed syshooks
PVRCarbon|Recording frames: 0-100
PVRCarbon|Writing intermediate data to '/home/root/apptest_frames_0-100.0000.parts'
PVRCarbon|DEBUG: Library '/home/root/Linux_armv8_64/libEGL.so' loaded
PVRCarbon|DEBUG: Could not get function 'eglGetSyncAttribNV'
PVRCarbon|DEBUG: Could not get function 'eglFenceNV'
PVRCarbon|DEBUG: Could not get function 'eglClientWaitSyncNV'
PVRCarbon|DEBUG: Could not get function 'eglQueryStreamMetadataNV'
PVRCarbon|DEBUG: Could not get function 'eglPostSubBufferNV'
PVRCarbon|DEBUG: Could not get function 'eglQueryNativeWindowNV'
PVRCarbon|DEBUG: Could not get function 'eglSwapBuffersRegionNOK'
PVRCarbon|DEBUG: Could not get function 'eglExportDMABUFImageQueryMESA'
PVRCarbon|DEBUG: Could not get function 'eglExportDMABUFImageMESA'
PVRCarbon|DEBUG: Could not get function 'eglQueryNativePixmapNV'
PVRCarbon|DEBUG: Could not get function 'eglCreateDRMImageMESA'
PVRCarbon|DEBUG: Could not get function 'eglSwapBuffersWithDamageKHR'
PVRCarbon|DEBUG: Could not get function 'eglQueryStreamTimeKHR'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerGLTextureExternalKHR'
PVRCarbon|DEBUG: Could not get function 'eglSetStreamAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreateStreamAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglStreamAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglGetSystemTimeNV'
PVRCarbon|DEBUG: Could not get function 'eglQueryStreamu64KHR'
PVRCarbon|DEBUG: Could not get function 'eglQueryStreamKHR'
PVRCarbon|DEBUG: Could not get function 'eglSignalSyncKHR'
PVRCarbon|DEBUG: Could not get function 'eglGetSyncAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreateSyncKHR'
PVRCarbon|DEBUG: Could not get function 'eglClientWaitSyncKHR'
PVRCarbon|DEBUG: Could not get function 'eglUnlockSurfaceKHR'
PVRCarbon|DEBUG: Could not get function 'eglExportDRMImageMESA'
PVRCarbon|DEBUG: Could not get function 'eglDestroyImageKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreateImageKHR'
PVRCarbon|DEBUG: Could not get function 'eglQueryDisplayAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglQueryDebugKHR'
PVRCarbon|DEBUG: Could not get function 'eglLabelObjectKHR'
PVRCarbon|DEBUG: Could not get function 'eglDebugMessageControlKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreateSync64KHR'
PVRCarbon|DEBUG: Could not get function 'eglGetStreamFileDescriptorKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreateStreamFromFileDescriptorKHR'
PVRCarbon|DEBUG: Could not get function 'eglSwapBuffersWithDamageEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryDisplayAttribNV'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerOutputEXT'
PVRCarbon|DEBUG: Could not get function 'eglCreatePlatformPixmapSurfaceEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryOutputPortAttribEXT'
PVRCarbon|DEBUG: Could not get function 'eglSignalSyncNV'
PVRCarbon|DEBUG: Could not get function 'eglQueryOutputLayerAttribEXT'
PVRCarbon|DEBUG: Could not get function 'eglSetStreamMetadataNV'
PVRCarbon|DEBUG: Could not get function 'eglOutputPortAttribEXT'
PVRCarbon|DEBUG: Could not get function 'eglOutputLayerAttribEXT'
PVRCarbon|DEBUG: Could not get function 'eglGetOutputLayersEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryDmaBufModifiersEXT'
PVRCarbon|DEBUG: Could not get function 'eglCreateStreamKHR'
PVRCarbon|DEBUG: Could not get function 'eglQueryDmaBufFormatsEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryDisplayAttribEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryDeviceStringEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryDevicesEXT'
PVRCarbon|DEBUG: Could not get function 'eglLockSurfaceKHR'
PVRCarbon|DEBUG: Could not get function 'eglCompositorSetWindowListEXT'
PVRCarbon|DEBUG: Could not get function 'eglGetSystemTimeFrequencyNV'
PVRCarbon|DEBUG: Could not get function 'eglCompositorSetWindowAttributesEXT'
PVRCarbon|DEBUG: Could not get function 'eglCompositorSetSizeEXT'
PVRCarbon|DEBUG: Could not get function 'eglCompositorSetContextListEXT'
PVRCarbon|DEBUG: Could not get function 'eglCompositorSetContextAttributesEXT'
PVRCarbon|DEBUG: Could not get function 'eglCompositorBindTexWindowEXT'
PVRCarbon|DEBUG: Could not get function 'eglQuerySurfacePointerANGLE'
PVRCarbon|DEBUG: Could not get function 'eglPresentationTimeANDROID'
PVRCarbon|DEBUG: Could not get function 'eglQueryDeviceAttribEXT'
PVRCarbon|DEBUG: Could not get function 'eglGetNativeClientBufferANDROID'
PVRCarbon|DEBUG: Could not get function 'eglCreateFenceSyncNV'
PVRCarbon|DEBUG: Could not get function 'eglQueryStreamAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglGetNextFrameIdANDROID'
PVRCarbon|DEBUG: Could not get function 'eglGetFrameTimestampsANDROID'
PVRCarbon|DEBUG: Could not get function 'eglGetCompositorTimingSupportedANDROID'
PVRCarbon|DEBUG: Could not get function 'eglGetCompositorTimingANDROID'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerGLTextureExternalAttribsNV'
PVRCarbon|DEBUG: Could not get function 'eglCreateNativeClientBufferANDROID'
PVRCarbon|DEBUG: Could not get function 'eglQueryNativeDisplayNV'
PVRCarbon|DEBUG: Could not get function 'eglGetPlatformDisplayEXT'
PVRCarbon|DEBUG: Could not get function 'eglCreatePlatformWindowSurfaceEXT'
PVRCarbon|DEBUG: Could not get function 'eglSetBlobCacheFuncsANDROID'
PVRCarbon|DEBUG: Could not get function 'eglResetStreamNV'
PVRCarbon|DEBUG: Could not get function 'eglWaitSyncKHR'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerAcquireKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreatePixmapSurfaceHI'
PVRCarbon|DEBUG: Could not get function 'eglGetFrameTimestampSupportedANDROID'
PVRCarbon|DEBUG: Could not get function 'eglGetOutputPortsEXT'
PVRCarbon|DEBUG: Could not get function 'eglQueryOutputPortStringEXT'
PVRCarbon|DEBUG: Could not get function 'eglSwapBuffersRegion2NOK'
PVRCarbon|DEBUG: Could not get function 'eglDestroyStreamKHR'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerReleaseAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglDestroySyncNV'
PVRCarbon|DEBUG: Could not get function 'eglQueryOutputLayerStringEXT'
PVRCarbon|DEBUG: Could not get function 'eglCompositorSwapPolicyEXT'
PVRCarbon|DEBUG: Could not get function 'eglSetDamageRegionKHR'
PVRCarbon|DEBUG: Could not get function 'eglDestroySyncKHR'
PVRCarbon|DEBUG: Could not get function 'eglCreateStreamProducerSurfaceKHR'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerAcquireAttribKHR'
PVRCarbon|DEBUG: Could not get function 'eglStreamConsumerReleaseKHR'
PVRCarbon|DEBUG: Could not get function 'eglQuerySurface64KHR'
PVRCarbon|DEBUG: Could not get function 'eglDupNativeFenceFDANDROID'
PVRCarbon|DEBUG: Could not get function 'eglCreateStreamSyncNV'
PVRCarbon|INFORMATION: Host EGL Library '/home/root/Linux_armv8_64/libEGL.so' loaded successfully
PVRCarbon|DEBUG: EGL Interface: Adding Host Layer
PVRCarbon|DEBUG: EGL Interface: Adding Overrides Layer
PVRCarbon|DEBUG: EGL Interface: Adding Record Layer
PVRCarbon|VERBOSE: Opening '/home/root/apptest_frames_0-100.0000.parts/0.data.pvrcbn.part' for writing
PVRCarbon|VERBOSE: Opening '/home/root/apptest_frames_0-100.0000.parts/0.calls.pvrcbn.part' for writing
PVRCarbon|VERBOSE: Opening '/home/root/apptest_frames_0-100.0000.parts/0.1.calls.pvrcbn.part' for writ
...
PVRCarbon|VERBOSE: Opening '/home/root/apptest_frames_0-100.0000.parts/0.1016.calls.pvrcbn.part' for writing
PVRCarbon|ERROR: Failed to open file '/home/root/apptest_frames_0-100.0000.parts/0.1017.calls.pvrcbn.part' (Too many open files)
PVRCarbon|ERROR: Could not open '/home/root/apptest_frames_0-100.0000.parts/0.1017.calls.pvrcbn.part' for writing
PVRCarbon|CRITICAL: Aborting... Unable to recover from error

Hi jiu,

Thanks a lot for the detailed information.

Could I ask you please details on the device you are using? (device model and GPU). Also, it would be very useful to know the operating system and version in the device.

Best regards,
Alejandro

Hi Alejandro

Here is the detial information:

HW:
RCar Salvator-xs M3-W
RTP0RC7796SIPB0012S (with R-Car M3-W)
r8a77960-salvator-xs (for R-Car M3-W)

PowerVR 6XTGX6250

OS:
Linux 5.10.41-yocto-standard #1 SMP PREEMPT Thu Jul 15 12:11:21 UTC 2021 aarch64 GNU/Linux

PVRCarbon Recorder v0.11 (23.2@24ff2634a052)

Best regards

okay, I fixed this issue.
for PVRCARBON_host_library_egl
I shall not use the EGL library provided by PVRCarbon but the original EGL library in the OS.
this works to me:

export LD_LIBRARY_PATH=/home/root/Linux_armv8_64
export PVRCARBON_exit_after_frame=100
export PVRCARBON_native_buffer_enable=true
export PVRCARBON_frame_grab_enable=true
export PVRCARBON_host_library_egl="/usr/lib/libEGL.so"
export PVRCARBON_host_library_glesv2="/usr/lib/libGLESv2.so"

/usr/bin/apptest
1 Like

Hi jiu,

Thanks for the information. Please let me know if you have any other questions I can assist you with.

Best regards,
Alejandro

Hi Alejandro
I facing another issue, I can run my Qt app

  1. using EGLFS (OpenGLES backend) with PVRCarbon
  2. using wayland backend without PVRCarbon on weston
    but I cannot run it using wayland backend with PVRCarbon on weston.
    due to failed to creating OpenGL context

Is this a limitation that PVRCarbon cannot work with wayland?

Hi jiu,

I will ask the Tools Team about this issue and come back with more information.

Best regads,
Alejandro

Hi jiu,

The Tools Team is not aware of any limitations of PVRCarbon in this regard. They asked please if you could provide:

  • The log output when you try to run your application using Wayland backend with PVRCarbon and get the OpenGL ES context creation error.
  • The ldd output from your application without PVRCarbon setup (the command should be ldd yourapplication).

Best regards,
Alejandro

Hi Alejandro

The log output when you try to run your application using Wayland backend with PVRCarbon and get the OpenGL ES context creation error.

eglGetDisplay return NULL

The ldd output from your application without PVRCarbon setup (the command should be ldd yourapplication).

root@b2qt-salvator-x:~# ldd /usr/examples/coffee
        linux-vdso.so.1 (0x0000ffffb6a16000)
        libQt6Qml.so.6 => /usr/lib/libQt6Qml.so.6 (0x0000ffffb6410000)
        libQt6Gui.so.6 => /usr/lib/libQt6Gui.so.6 (0x0000ffffb5c90000)
        libQt6Core.so.6 => /usr/lib/libQt6Core.so.6 (0x0000ffffb56b0000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0000ffffb5490000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0000ffffb5460000)
        libc.so.6 => /lib/libc.so.6 (0x0000ffffb52b0000)
        /lib/ld-linux-aarch64.so.1 (0x0000ffffb69dd000)
        libQt6Network.so.6 => /usr/lib/libQt6Network.so.6 (0x0000ffffb50d0000)
        libm.so.6 => /lib/libm.so.6 (0x0000ffffb5030000)
        libGLESv2.so.2 => /usr/lib/libGLESv2.so.2 (0x0000ffffb4e90000)
        libEGL.so.1 => /usr/lib/libEGL.so.1 (0x0000ffffb4e70000)
        libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x0000ffffb4e10000)
        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x0000ffffb4cb0000)
        libQt6DBus.so.6 => /usr/lib/libQt6DBus.so.6 (0x0000ffffb4bc0000)
        libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x0000ffffb4b60000)
        libpng16.so.16 => /usr/lib/libpng16.so.16 (0x0000ffffb4b10000)
        libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x0000ffffb49f0000)
        libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x0000ffffb4930000)
        libz.so.1 => /lib/libz.so.1 (0x0000ffffb4900000)
        libicui18n.so.70 => /usr/lib/libicui18n.so.70 (0x0000ffffb45d0000)
        libicuuc.so.70 => /usr/lib/libicuuc.so.70 (0x0000ffffb43c0000)
        libzstd.so.1 => /usr/lib/libzstd.so.1 (0x0000ffffb4300000)
        libpcre2-16.so.0 => /usr/lib/libpcre2-16.so.0 (0x0000ffffb4290000)
        libIMGegl.so => /usr/lib/libIMGegl.so (0x0000ffffb4220000)
        libsrv_um.so => /usr/lib/libsrv_um.so (0x0000ffffb4180000)
        libglslcompiler.so => /usr/lib/libglslcompiler.so (0x0000ffffb4060000)
        libusc.so => /usr/lib/libusc.so (0x0000ffffb3e50000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffffb3e30000)
        librt.so.1 => /lib/librt.so.1 (0x0000ffffb3e10000)
        libexpat.so.1 => /usr/lib/libexpat.so.1 (0x0000ffffb3dd0000)
        libuuid.so.1 => /usr/lib/libuuid.so.1 (0x0000ffffb3db0000)
        libpcre.so.1 => /usr/lib/libpcre.so.1 (0x0000ffffb3d30000)
        libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x0000ffffb3c90000)
        libicudata.so.70 => /usr/lib/libicudata.so.70 (0x0000ffffb2060000)
        libdrm.so.2 => /usr/lib/libdrm.so.2 (0x0000ffffb2030000)
        libgbm.so.1 => /usr/lib/libgbm.so.1 (0x0000ffffb2010000)
        libwayland-kms.so.0 => /usr/lib/libwayland-kms.so.0 (0x0000ffffb1ff0000)
        libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x0000ffffb1fc0000)
        libdl.so.2 => /lib/libdl.so.2 (0x0000ffffb1fa0000)
        libsystemd.so.0 => /lib/libsystemd.so.0 (0x0000ffffb1e90000)
        libudev.so.1 => /lib/libudev.so.1 (0x0000ffffb1e40000)
        libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x0000ffffb1e10000)
        libffi.so.8 => /usr/lib/libffi.so.8 (0x0000ffffb1df0000)
        libcap.so.2 => /lib/libcap.so.2 (0x0000ffffb1dd0000)

Best regads

Hi jiu,

I asked the Tools Team, in their opinion this would be a PVRCarbon setup / configuration issue.

They suggested you use LD_PRELOAD instead of LD_LIBRARY_PATH

LD_PRELOAD=/home/root/Linux_armv8_64/libPVRCarbon.so:/home/root/Linux_armv8_64/libEGL.so:/home/root/Linux_armv8_64/libGLESv2.so /usr/bin/apptest

Also you could try with

	export PVRCARBON_host_library_egl="/usr/lib/libEGL.so.1"
	export PVRCARBON_host_library_glesv2="/usr/lib/libGLESv2.so.2"

Please let me know if any of those options helps solve the issue.

Best regards,
Alejandro

Hi, Alejandro

Thanks!

LD_PRELOAD=/home/root/Linux_armv8_64/libPVRCarbon.so:/home/root/Linux_armv8_64/libEGL.so:/home/root/Linux_armv8_64/libGLESv2.so /usr/bin/apptest

this fixed the issue!


I facing another issue.
I set PVRCARBON_native_buffer_enable=true but the dumped frame buffer shows nothing.
do you have any idea?

As PVRCARBON_native_buffer_enable seems don’t function well, I am trying PVRCARBON_frame_grab_frames but I cannot find where the grabbed is dumped.

Best regards

Hi jiu,

To capture all frames you should use PVRCARBON_frame_grab_enable=1

If you want to capture specific frames, then you can additionally define PVRCARBON_frame_grab_frames. The framebuffer images recorded are kept within PVRCarbon’s binary data. They can be exported as images from the GUI (File → Export → Recorded Framebuffers…)

Regarding the parameter PVRCARBON_native_buffer_enable, it is used to capture native android and linux DMA buffers being used as input for eglCreateImage.

Best regards,
Alejandro

Hi Alejandro
thanks it works!

Sorry I having another question,
I setup the directory of RenderDoc, but how can I analysis the frame using RenderDoc?


the RenderDoc button is gray out
image

Hi Alejandro

one of my apps crashed at the start after enabling PVRCARBON_frame_grab_enable=1,
the other apps can run longer but also crash after enabling it, but at least can take more than 100 frames,
these apps are very similar no big difference.
here is the log and API call trace, do you have any idea what causes it?
TL_001_20230101-002125 (1).txt (104.5 KB)

Regarding the parameter PVRCARBON_native_buffer_enable , it is used to capture native android and linux DMA buffers being used as input for eglCreateImage .

where can I check the native buffer in PVRCARBON?

Best regards,
Jiu

Hi jiu,

No worries, I am happy to assist you with any question you have :slight_smile:

I reported to the Tools Team and gathered answers for your questions.

Regarding using RenderDoc for frame analysis: Currently for OpenGL ES RenderDoc frame analysis has been disabled from the GUI as the RenderDoc process interferes with PVRCarbonPlayer server. If you want to take a RenderDoc capture of a PVRCarbon recording using OpenGL ES you can use PVRCarbonPlayer directly. Please refer to the documentation PVRCarbon Player Command Line Options for the command line parameters you will beed to provide (--renderdoc-capture and --renderdoc-path, also for Linux you will need to preload the render doc library with LD_PRELOAD=/renderdoc/librenderdoc.so PVRCarbonPlayer). For Vulkan applications it is possible to do frame analysis from the GUI.

Regarding the crash you are experiencing:

  • Could you please do the test to take a recording without framebuffer capture, and then play it with PVRCarbonPlayer and command line parameter --capture-frames? Does it crash as well?
  • Could you provide a simple application recording reproducing the issue? I will handle it to the Tools Team.

Regarding your question on where native buffers are available on PVRCarbon when recording with PVRCARBON_native_buffer_enable parameter, currently there is no way to see that data directly. The Tools Team is working on allowing access to this information in C++ exports for future releases. One thing you can do is, in case the native buffer is used for offscreen rendering on a texture, you should be able to see the content of the texture in frame analysis (have present the recording would need to be played back on a device that supports those native buffers). You could also implement this operation artificially in your application so at least for development purposes you have available this information.

Please let me know if you have any other questions.

Best regards,
Alejandro