/*
 * Copyright 2014 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "GrProgramElement.h"
#include "GrGpuResourceRef.h"

uint32_t GrProgramElement::CreateUniqueID() {
    static int32_t gUniqueID = SK_InvalidUniqueID;
    uint32_t id;
    do {
        id = static_cast<uint32_t>(sk_atomic_inc(&gUniqueID) + 1);
    } while (id == SK_InvalidUniqueID);
    return id;
}

void GrProgramElement::addPendingIOs() const {
    for (int i = 0; i < fGpuResources.count(); ++i) {
        fGpuResources[i]->markPendingIO();
    }
}

void GrProgramElement::removeRefs() const {
    for (int i = 0; i < fGpuResources.count(); ++i) {
        fGpuResources[i]->removeRef();
    }
}

void GrProgramElement::pendingIOComplete() const {
    for (int i = 0; i < fGpuResources.count(); ++i) {
        fGpuResources[i]->pendingIOComplete();
    }
}

