Add UniqueID to GrDrawTargetCaps.

This is needed for creating the Optimized Draw State and checking that we have the same caps
on subsequent calls to ODS

BUG=skia:
R=bsalomon@google.com

Author: egdaniel@google.com

Review URL: https://codereview.chromium.org/585043002
This commit is contained in:
egdaniel 2014-09-19 12:07:43 -07:00 committed by Commit bot
parent 45725db1d8
commit bc127a3fda
2 changed files with 28 additions and 2 deletions

View File

@ -1147,3 +1147,13 @@ SkString GrDrawTargetCaps::dump() const {
return r;
}
uint32_t GrDrawTargetCaps::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;
}

View File

@ -19,8 +19,12 @@ class GrDrawTargetCaps : public SkRefCnt {
public:
SK_DECLARE_INST_COUNT(GrDrawTargetCaps)
GrDrawTargetCaps() { this->reset(); }
GrDrawTargetCaps(const GrDrawTargetCaps& other) : INHERITED() { *this = other; }
GrDrawTargetCaps() : fUniqueID(CreateUniqueID()) {
this->reset();
}
GrDrawTargetCaps(const GrDrawTargetCaps& other) : INHERITED(), fUniqueID(CreateUniqueID()) {
*this = other;
}
GrDrawTargetCaps& operator= (const GrDrawTargetCaps&);
virtual void reset();
@ -77,6 +81,13 @@ public:
return fConfigTextureSupport[config];
}
/**
* Gets an id that is unique for this GrDrawTargetCaps object. It is static in that it does
* not change when the content of the GrDrawTargetCaps object changes. This will never return
* 0.
*/
uint32_t getUniqueID() const { return fUniqueID; }
protected:
bool fNPOTTextureTileSupport : 1;
bool fMipMapSupport : 1;
@ -103,6 +114,11 @@ protected:
bool fConfigRenderSupport[kGrPixelConfigCnt][2];
bool fConfigTextureSupport[kGrPixelConfigCnt];
private:
static uint32_t CreateUniqueID();
const uint32_t fUniqueID;
typedef SkRefCnt INHERITED;
};