Imagination PowerVR SDK Blog

iOS OpenGLES 2.0 context bug on A7 & A8 hardware.


When I create a GLES 2.0 context on A7 & A8 hardware I get cubemap seams that don’t show up on the SGX based devices. We set the WRAP_S & WRAP_T values to clamp and I assume that the internal WRAP_R value must be clamp as well (GLES 2.0 doesn’t provide access to WRAP_R). My guess is that because the A7 & A8 support GLES 3.0 where the default WRAP_R value is repeat when you create a GLES 2.0 context it’s default ends up being repeat as well.



Have you only been able to reproduce the issue on Apple devices, or does it also occur on PowerVR Android devices? If you can provide screenshots of your correct and incorrect renders, and the cubemap texture you’re using, we can help you identify if you’re encountering a graphics driver bug or if there’s an error in your OpenGL ES usage. If it is a bug in Apple’s graphics driver, you will have to report the issue to them.




I tested on an android device with a G6200 & OpenGLES 3.0 support (the context version string reported 3.0) and it was fine, so this is only happening on A7 and A8/X iOS devices. Attached are some screenshots and the cubemap.


Thanks for sharing the screenshots. As the game is rendering correctly on Android PowerVR devices, I suspect the issue you are encountering is specific to Apple’s graphics driver. I would recommend reporting the issue to them to see if this can be resolved in a future graphics driver update.

Without knowing what is causing the issue and how your application is submitting work to the graphics driver, it’s tricky to recommend a workaround for this. However, you should be able to avoid the artefacts by adding a border of wrapped values to each face of the cubemap and adjusting your texture coordinates to sit within the border. With this approach, the GPU will not need to sample texture data from surrounding cube map faces.