123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef GrMockTexture_DEFINED
- #define GrMockTexture_DEFINED
- #include "include/gpu/GrRenderTarget.h"
- #include "include/gpu/GrTexture.h"
- #include "include/gpu/mock/GrMockTypes.h"
- #include "src/gpu/GrRenderTargetPriv.h"
- #include "src/gpu/GrStencilAttachment.h"
- #include "src/gpu/GrTexturePriv.h"
- #include "src/gpu/mock/GrMockGpu.h"
- class GrMockTexture : public GrTexture {
- public:
- GrMockTexture(GrMockGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc,
- GrProtected isProtected, GrMipMapsStatus mipMapsStatus,
- const GrMockTextureInfo& info)
- : GrMockTexture(gpu, desc, isProtected, mipMapsStatus, info) {
- this->registerWithCache(budgeted);
- }
- GrMockTexture(GrMockGpu* gpu, const GrSurfaceDesc& desc, GrProtected isProtected,
- GrMipMapsStatus mipMapsStatus, const GrMockTextureInfo& info,
- GrWrapCacheable cacheable, GrIOType ioType)
- : GrMockTexture(gpu, desc, isProtected, mipMapsStatus, info) {
- if (ioType == kRead_GrIOType) {
- this->setReadOnly();
- }
- this->registerWithCacheWrapped(cacheable);
- }
- ~GrMockTexture() override {}
- GrBackendTexture getBackendTexture() const override {
- return GrBackendTexture(this->width(), this->height(), this->texturePriv().mipMapped(),
- fInfo);
- }
- GrBackendFormat backendFormat() const override {
- return fInfo.getBackendFormat();
- }
- void textureParamsModified() override {}
- protected:
- // constructor for subclasses
- GrMockTexture(GrMockGpu* gpu, const GrSurfaceDesc& desc, GrProtected isProtected,
- GrMipMapsStatus mipMapsStatus, const GrMockTextureInfo& info)
- : GrSurface(gpu, desc, isProtected)
- , INHERITED(gpu, desc, isProtected, GrTextureType::k2D, mipMapsStatus)
- , fInfo(info) {}
- void onRelease() override {
- INHERITED::onRelease();
- }
- void onAbandon() override {
- INHERITED::onAbandon();
- }
- bool onStealBackendTexture(GrBackendTexture*, SkImage::BackendTextureReleaseProc*) override {
- return false;
- }
- private:
- GrMockTextureInfo fInfo;
- typedef GrTexture INHERITED;
- };
- class GrMockRenderTarget : public GrRenderTarget {
- public:
- GrMockRenderTarget(GrMockGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc,
- int sampleCnt, GrProtected isProtected, const GrMockRenderTargetInfo& info)
- : GrSurface(gpu, desc, isProtected)
- , INHERITED(gpu, desc, sampleCnt, isProtected)
- , fInfo(info) {
- this->registerWithCache(budgeted);
- }
- enum Wrapped { kWrapped };
- GrMockRenderTarget(GrMockGpu* gpu, Wrapped, const GrSurfaceDesc& desc, int sampleCnt,
- GrProtected isProtected, const GrMockRenderTargetInfo& info)
- : GrSurface(gpu, desc, isProtected)
- , INHERITED(gpu, desc, sampleCnt, isProtected)
- , fInfo(info) {
- this->registerWithCacheWrapped(GrWrapCacheable::kNo);
- }
- ResolveType getResolveType() const override { return kCanResolve_ResolveType; }
- bool canAttemptStencilAttachment() const override { return true; }
- bool completeStencilAttachment() override { return true; }
- size_t onGpuMemorySize() const override {
- int numColorSamples = this->numSamples();
- if (numColorSamples > 1) {
- // Add one to account for the resolve buffer.
- ++numColorSamples;
- }
- return GrSurface::ComputeSize(this->config(), this->width(), this->height(),
- numColorSamples, GrMipMapped::kNo);
- }
- GrBackendRenderTarget getBackendRenderTarget() const override {
- int numStencilBits = 0;
- if (GrStencilAttachment* stencil = this->renderTargetPriv().getStencilAttachment()) {
- numStencilBits = stencil->bits();
- }
- return {this->width(), this->height(), this->numSamples(), numStencilBits, fInfo};
- }
- GrBackendFormat backendFormat() const override {
- return fInfo.getBackendFormat();
- }
- protected:
- // constructor for subclasses
- GrMockRenderTarget(GrMockGpu* gpu, const GrSurfaceDesc& desc, int sampleCnt,
- GrProtected isProtected, const GrMockRenderTargetInfo& info)
- : GrSurface(gpu, desc, isProtected)
- , INHERITED(gpu, desc, sampleCnt, isProtected)
- , fInfo(info) {}
- private:
- GrMockRenderTargetInfo fInfo;
- typedef GrRenderTarget INHERITED;
- };
- class GrMockTextureRenderTarget : public GrMockTexture, public GrMockRenderTarget {
- public:
- // Internally created.
- GrMockTextureRenderTarget(GrMockGpu* gpu, SkBudgeted budgeted, const GrSurfaceDesc& desc,
- int sampleCnt, GrProtected isProtected, GrMipMapsStatus mipMapsStatus,
- const GrMockTextureInfo& texInfo,
- const GrMockRenderTargetInfo& rtInfo)
- : GrSurface(gpu, desc, isProtected)
- , GrMockTexture(gpu, desc, isProtected, mipMapsStatus, texInfo)
- , GrMockRenderTarget(gpu, desc, sampleCnt, isProtected, rtInfo) {
- this->registerWithCache(budgeted);
- }
- // Renderable wrapped backend texture.
- GrMockTextureRenderTarget(GrMockGpu* gpu, const GrSurfaceDesc& desc, int sampleCnt,
- GrProtected isProtected, GrMipMapsStatus mipMapsStatus,
- const GrMockTextureInfo& texInfo,
- const GrMockRenderTargetInfo& rtInfo, GrWrapCacheable cacheble)
- : GrSurface(gpu, desc, isProtected)
- , GrMockTexture(gpu, desc, isProtected, mipMapsStatus, texInfo)
- , GrMockRenderTarget(gpu, desc, sampleCnt, isProtected, rtInfo) {
- this->registerWithCacheWrapped(cacheble);
- }
- GrTexture* asTexture() override { return this; }
- GrRenderTarget* asRenderTarget() override { return this; }
- const GrTexture* asTexture() const override { return this; }
- const GrRenderTarget* asRenderTarget() const override { return this; }
- GrBackendFormat backendFormat() const override {
- return GrMockTexture::backendFormat();
- }
- protected:
- // This avoids an inherits via dominance warning on MSVC.
- void willRemoveLastRefOrPendingIO() override { GrTexture::willRemoveLastRefOrPendingIO(); }
- private:
- void onAbandon() override {
- GrRenderTarget::onAbandon();
- GrMockTexture::onAbandon();
- }
- void onRelease() override {
- GrRenderTarget::onRelease();
- GrMockTexture::onRelease();
- }
- size_t onGpuMemorySize() const override {
- int numColorSamples = this->numSamples();
- if (numColorSamples > 1) {
- // Add one to account for the resolve buffer.
- ++numColorSamples;
- }
- return GrSurface::ComputeSize(this->config(), this->width(), this->height(),
- numColorSamples,
- this->texturePriv().mipMapped());
- }
- void computeScratchKey(GrScratchKey* key) const override {
- GrTexturePriv::ComputeScratchKey(this->config(), this->width(), this->height(),
- GrRenderable::kYes, this->numSamples(),
- this->texturePriv().mipMapped(), key);
- }
- };
- #endif
|