From ae59b77612c42ff6b793dc33e3d115e6a5db34cc Mon Sep 17 00:00:00 2001 From: bsalomon Date: Wed, 19 Nov 2014 08:23:49 -0800 Subject: Create GrOptDrawState before recording draw in GrInOrderDrawBuffer Review URL: https://codereview.chromium.org/739673002 --- src/gpu/GrProgramElement.cpp | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) (limited to 'src/gpu/GrProgramElement.cpp') diff --git a/src/gpu/GrProgramElement.cpp b/src/gpu/GrProgramElement.cpp index 89d53e28db..6611234e8a 100644 --- a/src/gpu/GrProgramElement.cpp +++ b/src/gpu/GrProgramElement.cpp @@ -17,43 +17,21 @@ uint32_t GrProgramElement::CreateUniqueID() { return id; } -void GrProgramElement::convertRefToPendingExecution() const { - // This function makes it so that all the GrGpuResourceRefs own a single ref to their - // underlying GrGpuResource if there are any refs to the GrProgramElement and a single - // pending read/write if there are any pending executions of the GrProgramElement. The - // GrGpuResourceRef will give up its single ref and/or pending read/write in its destructor. - SkASSERT(fRefCnt > 0); - if (0 == fPendingExecutions) { - for (int i = 0; i < fGpuResources.count(); ++i) { - fGpuResources[i]->markPendingIO(); - } - } - ++fPendingExecutions; - this->unref(); - if (0 == fRefCnt) { - this->removeRefs(); +void GrProgramElement::addPendingIOs() const { + for (int i = 0; i < fGpuResources.count(); ++i) { + fGpuResources[i]->markPendingIO(); } } -void GrProgramElement::completedExecution() const { - this->validate(); - --fPendingExecutions; - if (0 == fPendingExecutions) { - if (0 == fRefCnt) { - SkDELETE(this); - } else { - // Now our pending executions have ocurred and we still have refs. Convert - // ownership of our resources back to regular refs. - for (int i = 0; i < fGpuResources.count(); ++i) { - fGpuResources[i]->pendingIOComplete(); - } - - } +void GrProgramElement::removeRefs() const { + for (int i = 0; i < fGpuResources.count(); ++i) { + fGpuResources[i]->removeRef(); } } -void GrProgramElement::removeRefs() const { +void GrProgramElement::pendingIOComplete() const { for (int i = 0; i < fGpuResources.count(); ++i) { - fGpuResources[i]->removeRef(); + fGpuResources[i]->pendingIOComplete(); } } + -- cgit v1.2.3