I have noticed that with the SGX545 driver, glReadPixels() reads the framebuffer prior to it has been rendered to, at sufficiently small viewports. Is this a known driver bug?
Can you share an image that highlights this problem?
a glReadPixels() will force the GPU to kick a render. Once the render is complete, the GPU will stall until the CPU has finished its call to glReadPixels() (i.e. the data has been retrieved).