I’m trying unsuccessfully to use the Snapdragon Profiler to capture a frame snapshot on a Google Pixel device on a Vulkan enabled application.
I find that I’m able to connect the Snapdragon Profiler (18.104.22.16812016) to my device through the connect dialog. If my app is running in Vulkan mode before I connect then sometimes I can attempt to take a snapshot, but it will always fail (the GUI will say it’s unable to take a snapshot), however, usually the profiler crashes before that point. If I attempt to start my app while the Snapdragon profiler is already running, then vkCreateInstance will always fail with VK_ERROR_LAYER_NOT_PRESENT which causes my application to fallback into OpenGLES mode. The line “Failed to find layer sdp” is output to the log during the vkCreateInstance call. sdp is certainly not a layer that my app has explicitly requested, perhaps sdp stands for SnapDragon Profiler?
Once the “Failed to find layer sdp” error occurs once, it will happen every single time my app runs regardless of whether it's attached to the profiler, this continues until I power cycle the device.
The FAQ contains a few lines on Vulkan troubleshooting – two of which are unclear to me.
- “Make sure you have ADB root access” – What exactly does this mean, I can run the command “adb root” without any error, but I don’t know if this really does anything. Am I supposed to root my device by installing some non-standard image? If so, are there any official steps to follow or images to use?
- “Confirm all of the Vulkan libraries are in the right location and write permissions are enabled” – Is this referring to libvulkan.so? Where should it be? How can I make it writable?
The reason I’m trying to use the Snapdragon Profiler is because I have a couple of Vulkan enabled apps on the Google Play store which are exhibiting rendering bugs on the Google Pixel. The apps work fine with other manufacturer’s GPUs and also work fine on the Qualcomm based Nexus 6P and 5X. The validation layers throw up no errors. The bugs look like they might be some sort of synchronisation error, but adding a vkDeviceWaitIdle after every vkQueueSubmit as a test doesn’t seem to fix it. I’m beginning to suspect a driver bug. There aren’t many major titles with Vulkan support out there at the moment yet, so if your driver team are interested in taking a look, I’d be glad to help them in any way I can.