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

Commit f70119cd authored by Chris Craik's avatar Chris Craik
Browse files

Reset batching state when overlap batch deletion occurs

Change-Id: Ifdbee9baaa734e27d15d2b54aa3b3abfffbce1e9
parent 6db10546
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -471,7 +471,9 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) {

    if (CC_LIKELY(mAvoidOverdraw) && mBatches.size() &&
            deferInfo.opaqueOverBounds && op->state.mBounds.contains(mBounds)) {
        // avoid overdraw by resetting drawing state + discarding drawing ops
        discardDrawingBatches(mBatches.size() - 1);
        resetBatchingState();
    }

    if (CC_UNLIKELY(renderer.getCaches().drawReorderDisabled)) {
@@ -551,10 +553,11 @@ void DeferredDisplayList::addDrawOp(OpenGLRenderer& renderer, DrawOp* op) {
        } else {
            targetBatch = new DrawBatch(deferInfo);
            mBatchLookup[deferInfo.batchId] = targetBatch;
            DEFER_LOGD("creating Batch %p, bid %x, at %d",
                    targetBatch, deferInfo.batchId, insertBatchIndex);
        }

        DEFER_LOGD("creating %singBatch %p, bid %x, at %d",
                deferInfo.mergeable ? "Merg" : "Draw",
                targetBatch, deferInfo.batchId, insertBatchIndex);
        mBatches.insertAt(targetBatch, insertBatchIndex);
    }

@@ -633,8 +636,9 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
    return status;
}

void DeferredDisplayList::discardDrawingBatches(unsigned int maxIndex) {
void DeferredDisplayList::discardDrawingBatches(const unsigned int maxIndex) {
    for (unsigned int i = mEarliestUnclearedIndex; i <= maxIndex; i++) {
        // leave deferred state ops alone for simplicity (empty save restore pairs may now exist)
        if (mBatches[i] && mBatches[i]->purelyDrawBatch()) {
            DrawBatch* b = (DrawBatch*) mBatches[i];
            delete mBatches[i];
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ private:
    int getStateOpDeferFlags() const;
    int getDrawOpDeferFlags() const;

    void discardDrawingBatches(unsigned int maxIndex);
    void discardDrawingBatches(const unsigned int maxIndex);

    // layer space bounds of rendering
    Rect mBounds;