blob: 04f8ffc1f198eb0a424006d524d6ac85d6041fd2 [file] [log] [blame]
ericrk0a5fa482015-09-15 14:16:10 -07001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "GrGLTextureRenderTarget.h"
Eric Karl5c779752017-05-08 12:02:07 -07009#include "GrContext.h"
Brian Salomonc7fe0f72018-05-11 10:14:21 -040010#include "GrContextPriv.h"
Greg Daniel6ecc9112017-06-16 16:17:03 +000011#include "GrGLGpu.h"
Robert Phillips646e4292017-06-13 12:44:56 -040012#include "GrTexturePriv.h"
ericrk0a5fa482015-09-15 14:16:10 -070013#include "SkTraceMemoryDump.h"
14
Greg Daniel6ecc9112017-06-16 16:17:03 +000015GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu,
16 SkBudgeted budgeted,
17 const GrSurfaceDesc& desc,
18 const GrGLTexture::IDDesc& texIDDesc,
19 const GrGLRenderTarget::IDDesc& rtIDDesc,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040020 GrMipMapsStatus mipMapsStatus)
Greg Daniel6ecc9112017-06-16 16:17:03 +000021 : GrSurface(gpu, desc)
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040022 , GrGLTexture(gpu, desc, texIDDesc, mipMapsStatus)
Greg Daniel4065d452018-11-16 15:43:41 -050023 , GrGLRenderTarget(gpu, desc, texIDDesc.fInfo.fFormat, rtIDDesc) {
Greg Daniel6ecc9112017-06-16 16:17:03 +000024 this->registerWithCache(budgeted);
25}
26
27GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu,
28 const GrSurfaceDesc& desc,
29 const GrGLTexture::IDDesc& texIDDesc,
Greg Daniel177e6952017-10-12 12:27:11 -040030 const GrGLRenderTarget::IDDesc& rtIDDesc,
31 GrMipMapsStatus mipMapsStatus)
Greg Daniel6ecc9112017-06-16 16:17:03 +000032 : GrSurface(gpu, desc)
Greg Daniel177e6952017-10-12 12:27:11 -040033 , GrGLTexture(gpu, desc, texIDDesc, mipMapsStatus)
Greg Daniel4065d452018-11-16 15:43:41 -050034 , GrGLRenderTarget(gpu, desc, texIDDesc.fInfo.fFormat, rtIDDesc) {
Greg Daniel6ecc9112017-06-16 16:17:03 +000035 this->registerWithCacheWrapped();
36}
37
ericrk0a5fa482015-09-15 14:16:10 -070038void GrGLTextureRenderTarget::dumpMemoryStatistics(
39 SkTraceMemoryDump* traceMemoryDump) const {
Derek Sollenbergercf6da8c2018-03-29 13:40:02 -040040#ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK
Eric Karlaf770022018-03-19 13:04:03 -070041 // Delegate to the base classes
42 GrGLRenderTarget::dumpMemoryStatistics(traceMemoryDump);
43 GrGLTexture::dumpMemoryStatistics(traceMemoryDump);
Derek Sollenbergercf6da8c2018-03-29 13:40:02 -040044#else
45 SkString resourceName = this->getResourceName();
46 resourceName.append("/texture_renderbuffer");
47 this->dumpMemoryStatisticsPriv(traceMemoryDump, resourceName, "RenderTarget",
48 this->gpuMemorySize());
49#endif
ericrk0a5fa482015-09-15 14:16:10 -070050}
kkinnunen2e6055b2016-04-22 01:48:29 -070051
52bool GrGLTextureRenderTarget::canAttemptStencilAttachment() const {
53 // The RT FBO of GrGLTextureRenderTarget is never created from a
Eric Karl5c779752017-05-08 12:02:07 -070054 // wrapped FBO, so we only care about the flag.
Brian Salomonc7fe0f72018-05-11 10:14:21 -040055 return !this->getGpu()->getContext()->contextPriv().caps()->avoidStencilBuffers();
kkinnunen2e6055b2016-04-22 01:48:29 -070056}
57
bungeman6bd52842016-10-27 09:30:08 -070058sk_sp<GrGLTextureRenderTarget> GrGLTextureRenderTarget::MakeWrapped(
Greg Daniel177e6952017-10-12 12:27:11 -040059 GrGLGpu* gpu, const GrSurfaceDesc& desc, const GrGLTexture::IDDesc& texIDDesc,
60 const GrGLRenderTarget::IDDesc& rtIDDesc, GrMipMapsStatus mipMapsStatus)
bungeman6bd52842016-10-27 09:30:08 -070061{
62 return sk_sp<GrGLTextureRenderTarget>(
Greg Daniel177e6952017-10-12 12:27:11 -040063 new GrGLTextureRenderTarget(gpu, desc, texIDDesc, rtIDDesc, mipMapsStatus));
kkinnunen2e6055b2016-04-22 01:48:29 -070064}
Robert Phillips646e4292017-06-13 12:44:56 -040065
66size_t GrGLTextureRenderTarget::onGpuMemorySize() const {
67 return GrSurface::ComputeSize(this->config(), this->width(), this->height(),
68 this->numSamplesOwnedPerPixel(),
Greg Daniele252f082017-10-23 16:05:23 -040069 this->texturePriv().mipMapped());
Robert Phillips646e4292017-06-13 12:44:56 -040070}