aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
authorGravatar Ben Wagner <benjaminwagner@google.com>2016-11-06 12:33:22 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-06 12:47:22 +0000
commit9c46b68d5340efc91368cef1cc5775f13c97cab8 (patch)
tree5185d315cb799a8c51b41c3067b9022b4effeb3a /src/gpu
parentce4d04ae8eace6ba53ff8b8c8d8f4a2e6af4e59f (diff)
Revert "Further centralize computation of GrSurface VRAM consumption"
This reverts commit ccd3c8937fce4bb28df19533ed043cad209e277d. Reason for revert: Blocking Chromium roll: https://codereview.chromium.org/2482643002/ Original change's description: > Further centralize computation of GrSurface VRAM consumption > > GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4383 > > Change-Id: I054b74f2cd15f904f8e05af0fda58d6e8a523eb9 > Reviewed-on: https://skia-review.googlesource.com/4383 > Commit-Queue: Robert Phillips <robertphillips@google.com> > Reviewed-by: Brian Salomon <bsalomon@google.com> > TBR=egdaniel@google.com,bsalomon@google.com,robertphillips@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=662630 Change-Id: I186db2a41eb2bd789e6f681b3547e32d9ca374cf Reviewed-on: https://skia-review.googlesource.com/4443 Commit-Queue: Ben Wagner <benjaminwagner@google.com> Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Diffstat (limited to 'src/gpu')
-rw-r--r--src/gpu/GrRenderTarget.cpp11
-rw-r--r--src/gpu/GrRenderTargetProxy.cpp2
-rw-r--r--src/gpu/GrSurface.cpp32
-rw-r--r--src/gpu/GrTexture.cpp23
-rw-r--r--src/gpu/GrTextureProxy.cpp2
-rw-r--r--src/gpu/gl/GrGLGpu.cpp12
-rw-r--r--src/gpu/gl/GrGLRenderTarget.cpp4
-rw-r--r--src/gpu/gl/GrGLRenderTarget.h5
-rw-r--r--src/gpu/gl/GrGLTexture.cpp5
-rw-r--r--src/gpu/gl/GrGLTexture.h2
-rw-r--r--src/gpu/gl/GrGLTextureRenderTarget.cpp2
-rw-r--r--src/gpu/gl/GrGLTextureRenderTarget.h16
-rw-r--r--src/gpu/vk/GrVkRenderTarget.h3
-rw-r--r--src/gpu/vk/GrVkTextureRenderTarget.h6
14 files changed, 59 insertions, 66 deletions
diff --git a/src/gpu/GrRenderTarget.cpp b/src/gpu/GrRenderTarget.cpp
index f15e3b01bf..2828866435 100644
--- a/src/gpu/GrRenderTarget.cpp
+++ b/src/gpu/GrRenderTarget.cpp
@@ -84,6 +84,17 @@ void GrRenderTarget::onAbandon() {
INHERITED::onAbandon();
}
+size_t GrRenderTarget::ComputeSize(const GrSurfaceDesc& desc, int colorValuesPerPixel) {
+ SkASSERT(kUnknown_GrPixelConfig != desc.fConfig);
+ SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig));
+ size_t colorBytes = GrBytesPerPixel(desc.fConfig);
+ SkASSERT(colorBytes > 0);
+
+ size_t rtSize = colorValuesPerPixel * desc.fWidth * desc.fHeight * colorBytes;
+ SkASSERT(rtSize <= WorstCaseSize(desc));
+ return rtSize;
+}
+
///////////////////////////////////////////////////////////////////////////////
bool GrRenderTargetPriv::attachStencilAttachment(GrStencilAttachment* stencil) {
diff --git a/src/gpu/GrRenderTargetProxy.cpp b/src/gpu/GrRenderTargetProxy.cpp
index eb750847d2..ac8f5edb76 100644
--- a/src/gpu/GrRenderTargetProxy.cpp
+++ b/src/gpu/GrRenderTargetProxy.cpp
@@ -82,7 +82,7 @@ size_t GrRenderTargetProxy::onGpuMemorySize() const {
}
// TODO: do we have enough information to improve this worst case estimate?
- return GrSurface::ComputeSize(fDesc, fDesc.fSampleCnt+1, false);
+ return GrRenderTarget::ComputeSize(fDesc, fDesc.fSampleCnt+1);
}
sk_sp<GrRenderTargetProxy> GrRenderTargetProxy::Make(const GrCaps& caps,
diff --git a/src/gpu/GrSurface.cpp b/src/gpu/GrSurface.cpp
index e06fc0109d..9fe00ded5d 100644
--- a/src/gpu/GrSurface.cpp
+++ b/src/gpu/GrSurface.cpp
@@ -38,16 +38,15 @@ size_t GrSurface::WorstCaseSize(const GrSurfaceDesc& desc) {
}
SkASSERT(kUnknown_GrPixelConfig != desc.fConfig);
SkASSERT(!GrPixelConfigIsCompressed(desc.fConfig));
- size_t colorBytes = desc.fWidth * desc.fHeight * GrBytesPerPixel(desc.fConfig);
+ size_t colorBytes = GrBytesPerPixel(desc.fConfig);
SkASSERT(colorBytes > 0);
- size = colorValuesPerPixel * colorBytes;
- size += colorBytes/3; // in case we have to mipmap
+ size = (size_t) colorValuesPerPixel * desc.fWidth * desc.fHeight * colorBytes;
} else {
if (GrPixelConfigIsCompressed(desc.fConfig)) {
size = GrCompressedFormatDataSize(desc.fConfig, desc.fWidth, desc.fHeight);
} else {
- size = desc.fWidth * desc.fHeight * GrBytesPerPixel(desc.fConfig);
+ size = (size_t) desc.fWidth * desc.fHeight * GrBytesPerPixel(desc.fConfig);
}
size += size/3; // in case we have to mipmap
@@ -56,31 +55,6 @@ size_t GrSurface::WorstCaseSize(const GrSurfaceDesc& desc) {
return size;
}
-size_t GrSurface::ComputeSize(const GrSurfaceDesc& desc,
- int colorSamplesPerPixel,
- bool hasMIPMaps) {
- size_t colorSize;
-
- SkASSERT(kUnknown_GrPixelConfig != desc.fConfig);
- if (GrPixelConfigIsCompressed(desc.fConfig)) {
- colorSize = GrCompressedFormatDataSize(desc.fConfig, desc.fWidth, desc.fHeight);
- } else {
- colorSize = desc.fWidth * desc.fHeight * GrBytesPerPixel(desc.fConfig);
- }
- SkASSERT(colorSize > 0);
-
- size_t finalSize = colorSamplesPerPixel * colorSize;
-
- if (hasMIPMaps) {
- // We don't have to worry about the mipmaps being a different size than
- // we'd expect because we never change fDesc.fWidth/fHeight.
- finalSize += colorSize/3;
- }
-
- SkASSERT(finalSize <= WorstCaseSize(desc));
- return finalSize;
-}
-
template<typename T> static bool adjust_params(int surfaceWidth,
int surfaceHeight,
size_t bpp,
diff --git a/src/gpu/GrTexture.cpp b/src/gpu/GrTexture.cpp
index de1135a1eb..91036bc156 100644
--- a/src/gpu/GrTexture.cpp
+++ b/src/gpu/GrTexture.cpp
@@ -35,8 +35,29 @@ void GrTexture::dirtyMipMaps(bool mipMapsDirty) {
}
}
+size_t GrTexture::ComputeSize(const GrSurfaceDesc& desc, bool hasMipMaps) {
+ size_t textureSize;
+
+ if (GrPixelConfigIsCompressed(desc.fConfig)) {
+ textureSize = GrCompressedFormatDataSize(desc.fConfig, desc.fWidth, desc.fHeight);
+ } else {
+ textureSize = (size_t) desc.fWidth * desc.fHeight * GrBytesPerPixel(desc.fConfig);
+ }
+
+ if (hasMipMaps) {
+ // We don't have to worry about the mipmaps being a different size than
+ // we'd expect because we never change fDesc.fWidth/fHeight.
+ textureSize += textureSize/3;
+ }
+
+ SkASSERT(!SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag));
+ SkASSERT(textureSize <= WorstCaseSize(desc));
+
+ return textureSize;
+}
+
size_t GrTexture::onGpuMemorySize() const {
- return GrSurface::ComputeSize(fDesc, 1, this->texturePriv().hasMipMaps());
+ return ComputeSize(fDesc, this->texturePriv().hasMipMaps());
}
void GrTexture::validateDesc() const {
diff --git a/src/gpu/GrTextureProxy.cpp b/src/gpu/GrTextureProxy.cpp
index 0a7f767fa7..d60bf90ba4 100644
--- a/src/gpu/GrTextureProxy.cpp
+++ b/src/gpu/GrTextureProxy.cpp
@@ -46,7 +46,7 @@ size_t GrTextureProxy::onGpuMemorySize() const {
static const bool kHasMipMaps = true;
// TODO: add tracking of mipmap state to improve the estimate
- return GrSurface::ComputeSize(fDesc, 1, kHasMipMaps);
+ return GrTexture::ComputeSize(fDesc, kHasMipMaps);
}
sk_sp<GrTextureProxy> GrTextureProxy::Make(GrTextureProvider* texProvider,
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index 9af3acc474..d8f383a196 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -1642,11 +1642,6 @@ GrTexture* GrGLGpu::onCreateTexture(const GrSurfaceDesc& desc,
return return_null_texture();
}
- bool wasMipMapDataProvided = false;
- if (texels.count() > 1) {
- wasMipMapDataProvided = true;
- }
-
GrGLTexture* tex;
if (renderTarget) {
// unbind the texture from the texture unit before binding it to the frame buffer
@@ -1657,9 +1652,12 @@ GrTexture* GrGLGpu::onCreateTexture(const GrSurfaceDesc& desc,
GL_CALL(DeleteTextures(1, &idDesc.fInfo.fID));
return return_null_texture();
}
- tex = new GrGLTextureRenderTarget(this, budgeted, desc, idDesc, rtIDDesc,
- wasMipMapDataProvided);
+ tex = new GrGLTextureRenderTarget(this, budgeted, desc, idDesc, rtIDDesc);
} else {
+ bool wasMipMapDataProvided = false;
+ if (texels.count() > 1) {
+ wasMipMapDataProvided = true;
+ }
tex = new GrGLTexture(this, budgeted, desc, idDesc, wasMipMapDataProvided);
}
tex->setCachedTexParams(initialTexParams, this->getResetTimestamp());
diff --git a/src/gpu/gl/GrGLRenderTarget.cpp b/src/gpu/gl/GrGLRenderTarget.cpp
index 5af5e67676..2f92e0a82d 100644
--- a/src/gpu/gl/GrGLRenderTarget.cpp
+++ b/src/gpu/gl/GrGLRenderTarget.cpp
@@ -82,7 +82,7 @@ sk_sp<GrGLRenderTarget> GrGLRenderTarget::MakeWrapped(GrGLGpu* gpu,
}
size_t GrGLRenderTarget::onGpuMemorySize() const {
- return GrSurface::ComputeSize(fDesc, fNumSamplesOwnedPerPixel, false);
+ return GrRenderTarget::ComputeSize(fDesc, fNumSamplesOwnedPerPixel);
}
bool GrGLRenderTarget::completeStencilAttachment() {
@@ -183,7 +183,7 @@ void GrGLRenderTarget::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump)
// Log any renderbuffer's contribution to memory. We only do this if we own the renderbuffer
// (have a fMSColorRenderbufferID).
if (fMSColorRenderbufferID) {
- size_t size = GrSurface::ComputeSize(fDesc, this->msaaSamples(), false);
+ size_t size = GrRenderTarget::ComputeSize(fDesc, this->msaaSamples());
// Due to this resource having both a texture and a renderbuffer component, dump as
// skia/gpu_resources/resource_#/renderbuffer
diff --git a/src/gpu/gl/GrGLRenderTarget.h b/src/gpu/gl/GrGLRenderTarget.h
index 11b23473cf..fc18e30437 100644
--- a/src/gpu/gl/GrGLRenderTarget.h
+++ b/src/gpu/gl/GrGLRenderTarget.h
@@ -77,7 +77,8 @@ protected:
void onAbandon() override;
void onRelease() override;
- int numSamplesOwnedPerPixel() const { return fNumSamplesOwnedPerPixel; }
+ // In protected because subclass GrGLTextureRenderTarget calls this version.
+ size_t onGpuMemorySize() const override;
private:
// Constructor for instances wrapping backend objects.
@@ -88,8 +89,6 @@ private:
GrGLGpu* getGLGpu() const;
bool completeStencilAttachment() override;
- size_t onGpuMemorySize() const override;
-
int msaaSamples() const;
// The number total number of samples, including both MSAA and resolve texture samples.
int totalSamples() const;
diff --git a/src/gpu/gl/GrGLTexture.cpp b/src/gpu/gl/GrGLTexture.cpp
index ec0ad3b7f3..4653c5bce7 100644
--- a/src/gpu/gl/GrGLTexture.cpp
+++ b/src/gpu/gl/GrGLTexture.cpp
@@ -50,10 +50,9 @@ GrGLTexture::GrGLTexture(GrGLGpu* gpu, Wrapped, const GrSurfaceDesc& desc, const
this->registerWithCacheWrapped();
}
-GrGLTexture::GrGLTexture(GrGLGpu* gpu, const GrSurfaceDesc& desc, const IDDesc& idDesc,
- bool wasMipMapDataProvided)
+GrGLTexture::GrGLTexture(GrGLGpu* gpu, const GrSurfaceDesc& desc, const IDDesc& idDesc)
: GrSurface(gpu, desc)
- , INHERITED(gpu, desc, sampler_type(idDesc, gpu), wasMipMapDataProvided) {
+ , INHERITED(gpu, desc, sampler_type(idDesc, gpu), false) {
this->init(desc, idDesc);
}
diff --git a/src/gpu/gl/GrGLTexture.h b/src/gpu/gl/GrGLTexture.h
index 029fd87a1a..ee027d790d 100644
--- a/src/gpu/gl/GrGLTexture.h
+++ b/src/gpu/gl/GrGLTexture.h
@@ -59,7 +59,7 @@ public:
static sk_sp<GrGLTexture> MakeWrapped(GrGLGpu*, const GrSurfaceDesc&, const IDDesc&);
protected:
// Constructor for subclasses.
- GrGLTexture(GrGLGpu*, const GrSurfaceDesc&, const IDDesc&, bool wasMipMapDataProvided);
+ GrGLTexture(GrGLGpu*, const GrSurfaceDesc&, const IDDesc&);
enum Wrapped { kWrapped };
// Constructor for instances wrapping backend objects.
diff --git a/src/gpu/gl/GrGLTextureRenderTarget.cpp b/src/gpu/gl/GrGLTextureRenderTarget.cpp
index 9c350f89ae..9b37fbb343 100644
--- a/src/gpu/gl/GrGLTextureRenderTarget.cpp
+++ b/src/gpu/gl/GrGLTextureRenderTarget.cpp
@@ -49,5 +49,5 @@ sk_sp<GrGLTextureRenderTarget> GrGLTextureRenderTarget::MakeWrapped(
const GrGLTexture::IDDesc& texIDDesc, const GrGLRenderTarget::IDDesc& rtIDDesc)
{
return sk_sp<GrGLTextureRenderTarget>(
- new GrGLTextureRenderTarget(gpu, desc, texIDDesc, rtIDDesc, false));
+ new GrGLTextureRenderTarget(gpu, desc, texIDDesc, rtIDDesc));
}
diff --git a/src/gpu/gl/GrGLTextureRenderTarget.h b/src/gpu/gl/GrGLTextureRenderTarget.h
index 7ff8d490e0..c5c020fef6 100644
--- a/src/gpu/gl/GrGLTextureRenderTarget.h
+++ b/src/gpu/gl/GrGLTextureRenderTarget.h
@@ -12,7 +12,6 @@
#include "GrGLGpu.h"
#include "GrGLTexture.h"
#include "GrGLRenderTarget.h"
-#include "GrTexturePriv.h"
class GrGLGpu;
@@ -30,10 +29,9 @@ public:
SkBudgeted budgeted,
const GrSurfaceDesc& desc,
const GrGLTexture::IDDesc& texIDDesc,
- const GrGLRenderTarget::IDDesc& rtIDDesc,
- bool wasMipMapDataProvided)
+ const GrGLRenderTarget::IDDesc& rtIDDesc)
: GrSurface(gpu, desc)
- , GrGLTexture(gpu, desc, texIDDesc, wasMipMapDataProvided)
+ , GrGLTexture(gpu, desc, texIDDesc)
, GrGLRenderTarget(gpu, desc, rtIDDesc) {
this->registerWithCache(budgeted);
}
@@ -61,18 +59,16 @@ private:
GrGLTextureRenderTarget(GrGLGpu* gpu,
const GrSurfaceDesc& desc,
const GrGLTexture::IDDesc& texIDDesc,
- const GrGLRenderTarget::IDDesc& rtIDDesc,
- bool wasMipMapDataProvided)
+ const GrGLRenderTarget::IDDesc& rtIDDesc)
: GrSurface(gpu, desc)
- , GrGLTexture(gpu, desc, texIDDesc, wasMipMapDataProvided)
+ , GrGLTexture(gpu, desc, texIDDesc)
, GrGLRenderTarget(gpu, desc, rtIDDesc) {
this->registerWithCacheWrapped();
}
+ // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
size_t onGpuMemorySize() const override {
- return GrSurface::ComputeSize(fDesc,
- this->numSamplesOwnedPerPixel(),
- this->texturePriv().hasMipMaps());
+ return GrGLRenderTarget::onGpuMemorySize();
}
};
diff --git a/src/gpu/vk/GrVkRenderTarget.h b/src/gpu/vk/GrVkRenderTarget.h
index 3e5c5eab17..2e2f60a5fd 100644
--- a/src/gpu/vk/GrVkRenderTarget.h
+++ b/src/gpu/vk/GrVkRenderTarget.h
@@ -100,8 +100,7 @@ protected:
// This accounts for the texture's memory and any MSAA renderbuffer's memory.
size_t onGpuMemorySize() const override {
// The plus 1 is to account for the resolve texture.
- // TODO: is this still correct?
- return GrSurface::ComputeSize(fDesc, fDesc.fSampleCnt+1, false);
+ return GrRenderTarget::ComputeSize(fDesc, fDesc.fSampleCnt+1); // TODO: this still correct?
}
void createFramebuffer(GrVkGpu* gpu);
diff --git a/src/gpu/vk/GrVkTextureRenderTarget.h b/src/gpu/vk/GrVkTextureRenderTarget.h
index 2877a36265..daa168758d 100644
--- a/src/gpu/vk/GrVkTextureRenderTarget.h
+++ b/src/gpu/vk/GrVkTextureRenderTarget.h
@@ -13,8 +13,6 @@
#include "GrVkRenderTarget.h"
#include "GrVkGpu.h"
-#include "GrTexturePriv.h"
-
#ifdef SK_BUILD_FOR_WIN
// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance.
#pragma warning(push)
@@ -114,9 +112,7 @@ private:
// GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
size_t onGpuMemorySize() const override {
- // The plus 1 is to account for the resolve texture.
- return GrSurface::ComputeSize(fDesc, fDesc.fSampleCnt+1, // TODO: this still correct?
- this->texturePriv().hasMipMaps());
+ return GrVkRenderTarget::onGpuMemorySize();
}
};