I was trying to upload an image to a 2D texture using PBO. In my KHR debug callback, I received the following message:
GLES Message: type = Performance, severity = High, message = CPU path taken to copy PBO
I am testing my app using Google Pixel with Adreno 530 and the performance is only half of the non PBO version. Is PBO really supported on Adreno GPUs?
Best,
Wayne
Hi Wayne - Could you describe the method and APIs you're using with PBO uploading?
You might look at the current thread, and our Adreno SDK sample that uses PBOs..though it doesn't show using PIXEL_PACK_BUFFER which should be more optimal (http://www.opengl.org/wiki/Pixel_Buffer_Object).
https://developer.qualcomm.com/forum/qdn-forums/mobile-technologies/mobile-gaming-graphics-optimization-adreno/27196
-mark
Hi Mark,
It turns out that PBO DMA copying only works for the texture whose size is power of two (POT). For NPOT texture, the CPU path will be taken to copy PBO. Do you know the reason of this limitation for using PBO?
Best,
Wayne
Turns out that it's not a POT requirement that forces the DMA copying, but related to the pitch:
1) The pitch must be a multiple of the hardware requirement (64 pixels for current Adreno hardware)
2) The base+offset must be a must also be a multiple of the hardware requirement as well.
I currently am observing the same issue on Adreno GPU (tested on 530 and 305). glReadPixels seems to block no matter what I do, even when the texture size is properly aligned as suggested above (tried with 128x128 texture). Adreno GPUs seems to be the only ones affected so far.
Am I missing anything? is it just not possible to perform asynchronous glReadPixels on Adreno GPUs?
Below is the relevant part of my code (let me know if anything else is needed to investigate):
if (glPbo == -1)
Thanks!