Make GrProcessorDataManager a noop
TBR=bsalomon@google.com BUG=skia: Review URL: https://codereview.chromium.org/1323963003
This commit is contained in:
parent
1fcc01c415
commit
af2533a165
@ -136,7 +136,6 @@ public:
|
||||
}
|
||||
|
||||
fXPFactory.reset(SkRef(paint.getXPFactory()));
|
||||
fProcDataManager.reset(new GrProcessorDataManager(*paint.processorDataManager()));
|
||||
|
||||
return *this;
|
||||
}
|
||||
@ -149,9 +148,9 @@ public:
|
||||
*/
|
||||
bool isConstantBlendedColor(GrColor* constantColor) const;
|
||||
|
||||
GrProcessorDataManager* getProcessorDataManager() { return fProcDataManager.get(); }
|
||||
GrProcessorDataManager* getProcessorDataManager() { return &fProcDataManager; }
|
||||
|
||||
const GrProcessorDataManager* processorDataManager() const { return fProcDataManager.get(); }
|
||||
const GrProcessorDataManager* processorDataManager() const { return &fProcDataManager; }
|
||||
|
||||
private:
|
||||
void resetFragmentProcessors() {
|
||||
@ -173,7 +172,7 @@ private:
|
||||
bool fDither;
|
||||
|
||||
GrColor fColor;
|
||||
SkAutoTUnref<GrProcessorDataManager> fProcDataManager;
|
||||
GrProcessorDataManager fProcDataManager;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -8,48 +8,9 @@
|
||||
#ifndef GrProcessorDataManager_DEFINED
|
||||
#define GrProcessorDataManager_DEFINED
|
||||
|
||||
#include "SkRefCnt.h"
|
||||
#include "SkTArray.h"
|
||||
// TODO this class is just an empty stub for now
|
||||
|
||||
class GrProcessorDataManager : public SkRefCnt {
|
||||
public:
|
||||
GrProcessorDataManager() {}
|
||||
GrProcessorDataManager(const GrProcessorDataManager& procDataManager) {
|
||||
fIndices = procDataManager.fIndices;
|
||||
fStorage = procDataManager.fStorage;
|
||||
}
|
||||
|
||||
void* operator new(size_t size);
|
||||
void operator delete(void* target);
|
||||
|
||||
void* operator new(size_t size, void* placement) {
|
||||
return ::operator new(size, placement);
|
||||
}
|
||||
void operator delete(void* target, void* placement) {
|
||||
::operator delete(target, placement);
|
||||
}
|
||||
|
||||
private:
|
||||
uint32_t currentSaveMarker() const { return 0; }
|
||||
void restoreToSaveMarker(/*uint32_t marker*/) {}
|
||||
|
||||
// For GrPipelineBuilder::AutoRestoreProcessorDataManager
|
||||
friend class GrPipelineBuilder;
|
||||
static const uint32_t kNumProcessor = 1;
|
||||
static const uint32_t kDataIndicesPerProcessor = 1;
|
||||
static const uint32_t kPreAllocDataPerProcessor = 1;
|
||||
|
||||
/*static const size_t kPreAllocStorage = kNumProcessor * kPreAllocDataPerProcessor;
|
||||
static const uint32_t kNumProcessor = 8;
|
||||
static const uint32_t kDataIndicesPerProcessor = 4;
|
||||
static const uint32_t kPreAllocDataPerProcessor = kDataIndicesPerProcessor *
|
||||
sizeof(GrCoordTransform);*/
|
||||
static const size_t kPreAllocIndices = kNumProcessor * kDataIndicesPerProcessor;
|
||||
static const size_t kPreAllocStorage = kNumProcessor * kPreAllocDataPerProcessor;
|
||||
SkSTArray<kPreAllocIndices, uint32_t, true> fIndices;
|
||||
SkSTArray<kPreAllocStorage, unsigned char, true> fStorage;
|
||||
|
||||
typedef SkRefCnt INHERITED;
|
||||
class GrProcessorDataManager {
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -16,35 +16,34 @@
|
||||
GrPaint::GrPaint()
|
||||
: fAntiAlias(false)
|
||||
, fDither(false)
|
||||
, fColor(GrColor_WHITE)
|
||||
, fProcDataManager(new GrProcessorDataManager) {}
|
||||
, fColor(GrColor_WHITE) {}
|
||||
|
||||
void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) {
|
||||
fXPFactory.reset(GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage));
|
||||
}
|
||||
|
||||
void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
|
||||
matrix))->unref();
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix))->unref();
|
||||
}
|
||||
|
||||
void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
|
||||
matrix))->unref();
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix))->unref();
|
||||
}
|
||||
|
||||
void GrPaint::addColorTextureProcessor(GrTexture* texture,
|
||||
const SkMatrix& matrix,
|
||||
const GrTextureParams& params) {
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture, matrix,
|
||||
params))->unref();
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix, params))->unref();
|
||||
}
|
||||
|
||||
void GrPaint::addCoverageTextureProcessor(GrTexture* texture,
|
||||
const SkMatrix& matrix,
|
||||
const GrTextureParams& params) {
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture, matrix,
|
||||
params))->unref();
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix, params))->unref();
|
||||
}
|
||||
|
||||
bool GrPaint::isConstantBlendedColor(GrColor* color) const {
|
||||
|
@ -16,17 +16,13 @@
|
||||
#include "effects/GrPorterDuffXferProcessor.h"
|
||||
|
||||
GrPipelineBuilder::GrPipelineBuilder()
|
||||
: fProcDataManager(new GrProcessorDataManager), fFlags(0x0), fDrawFace(kBoth_DrawFace) {
|
||||
: fFlags(0x0), fDrawFace(kBoth_DrawFace) {
|
||||
SkDEBUGCODE(fBlockEffectRemovalCnt = 0;)
|
||||
}
|
||||
|
||||
GrPipelineBuilder::GrPipelineBuilder(const GrPaint& paint, GrRenderTarget* rt, const GrClip& clip) {
|
||||
SkDEBUGCODE(fBlockEffectRemovalCnt = 0;)
|
||||
|
||||
// TODO keep this logically const using an AutoReset
|
||||
fProcDataManager.reset(
|
||||
const_cast<GrProcessorDataManager*>(SkRef(paint.processorDataManager())));
|
||||
|
||||
for (int i = 0; i < paint.numColorFragmentProcessors(); ++i) {
|
||||
fColorFragmentProcessors.push_back(SkRef(paint.getColorFragmentProcessor(i)));
|
||||
}
|
||||
@ -77,14 +73,12 @@ void GrPipelineBuilder::AutoRestoreFragmentProcessorState::set(
|
||||
}
|
||||
fPipelineBuilder->fCoverageFragmentProcessors.pop_back_n(n);
|
||||
SkDEBUGCODE(--fPipelineBuilder->fBlockEffectRemovalCnt;)
|
||||
fPipelineBuilder->getProcessorDataManager()->restoreToSaveMarker(/*fSaveMarker*/);
|
||||
}
|
||||
fPipelineBuilder = const_cast<GrPipelineBuilder*>(pipelineBuilder);
|
||||
if (nullptr != pipelineBuilder) {
|
||||
fColorEffectCnt = pipelineBuilder->numColorFragmentProcessors();
|
||||
fCoverageEffectCnt = pipelineBuilder->numCoverageFragmentProcessors();
|
||||
SkDEBUGCODE(++pipelineBuilder->fBlockEffectRemovalCnt;)
|
||||
fSaveMarker = pipelineBuilder->processorDataManager()->currentSaveMarker();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -80,19 +80,19 @@ public:
|
||||
* Creates a GrSimpleTextureEffect that uses local coords as texture coordinates.
|
||||
*/
|
||||
void addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix))->unref();
|
||||
}
|
||||
|
||||
void addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix))->unref();
|
||||
}
|
||||
|
||||
void addColorTextureProcessor(GrTexture* texture,
|
||||
const SkMatrix& matrix,
|
||||
const GrTextureParams& params) {
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
|
||||
this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix,
|
||||
params))->unref();
|
||||
}
|
||||
@ -100,7 +100,7 @@ public:
|
||||
void addCoverageTextureProcessor(GrTexture* texture,
|
||||
const SkMatrix& matrix,
|
||||
const GrTextureParams& params) {
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
|
||||
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(&fProcDataManager, texture,
|
||||
matrix, params))->unref();
|
||||
}
|
||||
|
||||
@ -116,14 +116,12 @@ public:
|
||||
AutoRestoreFragmentProcessorState()
|
||||
: fPipelineBuilder(nullptr)
|
||||
, fColorEffectCnt(0)
|
||||
, fCoverageEffectCnt(0)
|
||||
, fSaveMarker(0) {}
|
||||
, fCoverageEffectCnt(0) {}
|
||||
|
||||
AutoRestoreFragmentProcessorState(const GrPipelineBuilder& ds)
|
||||
: fPipelineBuilder(nullptr)
|
||||
, fColorEffectCnt(0)
|
||||
, fCoverageEffectCnt(0)
|
||||
, fSaveMarker(0) {
|
||||
, fCoverageEffectCnt(0) {
|
||||
this->set(&ds);
|
||||
}
|
||||
|
||||
@ -148,7 +146,6 @@ public:
|
||||
GrPipelineBuilder* fPipelineBuilder;
|
||||
int fColorEffectCnt;
|
||||
int fCoverageEffectCnt;
|
||||
uint32_t fSaveMarker;
|
||||
};
|
||||
|
||||
/// @}
|
||||
@ -408,8 +405,8 @@ public:
|
||||
void setClip(const GrClip& clip) { fClip = clip; }
|
||||
const GrClip& clip() const { return fClip; }
|
||||
|
||||
GrProcessorDataManager* getProcessorDataManager() { return fProcDataManager.get(); }
|
||||
const GrProcessorDataManager* processorDataManager() const { return fProcDataManager.get(); }
|
||||
GrProcessorDataManager* getProcessorDataManager() { return &fProcDataManager; }
|
||||
const GrProcessorDataManager* processorDataManager() const { return &fProcDataManager; }
|
||||
|
||||
private:
|
||||
// Calculating invariant color / coverage information is expensive, so we partially cache the
|
||||
@ -438,7 +435,7 @@ private:
|
||||
|
||||
typedef SkSTArray<4, const GrFragmentProcessor*, true> FragmentProcessorArray;
|
||||
|
||||
SkAutoTUnref<GrProcessorDataManager> fProcDataManager;
|
||||
GrProcessorDataManager fProcDataManager;
|
||||
SkAutoTUnref<GrRenderTarget> fRenderTarget;
|
||||
uint32_t fFlags;
|
||||
GrStencilSettings fStencilSettings;
|
||||
|
@ -246,14 +246,3 @@ bool GrFragmentProcessor::hasSameTransforms(const GrFragmentProcessor& that) con
|
||||
// Initial static variable from GrXPFactory
|
||||
int32_t GrXPFactory::gCurrXPFClassID =
|
||||
GrXPFactory::kIllegalXPFClassID;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// GrProcessorDataManager lives in the same pool
|
||||
void* GrProcessorDataManager::operator new(size_t size) {
|
||||
return MemoryPoolAccessor().pool()->allocate(size);
|
||||
}
|
||||
|
||||
void GrProcessorDataManager::operator delete(void* target) {
|
||||
return MemoryPoolAccessor().pool()->release(target);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user