Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9477c6e6 authored by Romain Guy's avatar Romain Guy
Browse files

Enable dirty regions on newly created EGL surfaces

This change fixes an issue on some tiler architectures that do not
enable the swap buffer behavior by default on EGL surfaces.

Change-Id: Ibda1ae582da1a20afad3be9c3361080e72df5206
parent d3209c1b
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -441,6 +441,8 @@ public abstract class HardwareRenderer {
        }

        boolean mDirtyRegionsEnabled;
        boolean mUpdateDirtyRegions;

        final boolean mVsyncDisabled;

        final int mGlVersion;
@@ -675,6 +677,12 @@ public abstract class HardwareRenderer {
            
            initCaches();

            enableDirtyRegions();

            return mEglContext.getGL();
        }

        private void enableDirtyRegions() {
            // If mDirtyRegions is set, this means we have an EGL configuration
            // with EGL_SWAP_BEHAVIOR_PRESERVED_BIT set
            if (sDirtyRegions) {
@@ -690,8 +698,6 @@ public abstract class HardwareRenderer {
                // configuration (see RENDER_DIRTY_REGIONS)
                mDirtyRegionsEnabled = GLES20Canvas.isBackBufferPreserved();
            }

            return mEglContext.getGL();
        }

        abstract void initCaches();
@@ -745,6 +751,9 @@ public abstract class HardwareRenderer {
                if (!createSurface(holder)) {
                    return;
                }

                mUpdateDirtyRegions = true;

                if (mCanvas != null) {
                    setEnabled(true);
                }
@@ -943,6 +952,10 @@ public abstract class HardwareRenderer {
                    fallback(true);
                    return SURFACE_STATE_ERROR;
                } else {
                    if (mUpdateDirtyRegions) {
                        enableDirtyRegions();
                        mUpdateDirtyRegions = false;
                    }
                    return SURFACE_STATE_UPDATED;
                }
            }