1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLTextureRenderTarget.h"
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrDirectContext.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrCaps.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrDirectContextPriv.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrGpu.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSurface.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLGpu.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/gl/GrGLTypesPriv.h"
17*c8dee2aaSAndroid Build Coastguard Worker
18*c8dee2aaSAndroid Build Coastguard Worker #include <utility>
19*c8dee2aaSAndroid Build Coastguard Worker
GrGLTextureRenderTarget(GrGLGpu * gpu,skgpu::Budgeted budgeted,int sampleCount,const GrGLTexture::Desc & texDesc,const GrGLRenderTarget::IDs & rtIDs,GrMipmapStatus mipmapStatus,std::string_view label)20*c8dee2aaSAndroid Build Coastguard Worker GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu,
21*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted budgeted,
22*c8dee2aaSAndroid Build Coastguard Worker int sampleCount,
23*c8dee2aaSAndroid Build Coastguard Worker const GrGLTexture::Desc& texDesc,
24*c8dee2aaSAndroid Build Coastguard Worker const GrGLRenderTarget::IDs& rtIDs,
25*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus mipmapStatus,
26*c8dee2aaSAndroid Build Coastguard Worker std::string_view label)
27*c8dee2aaSAndroid Build Coastguard Worker : GrSurface(gpu, texDesc.fSize, texDesc.fIsProtected, label)
28*c8dee2aaSAndroid Build Coastguard Worker , GrGLTexture(gpu, texDesc, nullptr, mipmapStatus, label)
29*c8dee2aaSAndroid Build Coastguard Worker , GrGLRenderTarget(gpu, texDesc.fSize, texDesc.fFormat, sampleCount, rtIDs,
30*c8dee2aaSAndroid Build Coastguard Worker texDesc.fIsProtected, label) {
31*c8dee2aaSAndroid Build Coastguard Worker this->registerWithCache(budgeted);
32*c8dee2aaSAndroid Build Coastguard Worker }
33*c8dee2aaSAndroid Build Coastguard Worker
GrGLTextureRenderTarget(GrGLGpu * gpu,int sampleCount,const GrGLTexture::Desc & texDesc,sk_sp<GrGLTextureParameters> parameters,const GrGLRenderTarget::IDs & rtIDs,GrWrapCacheable cacheable,GrMipmapStatus mipmapStatus,std::string_view label)34*c8dee2aaSAndroid Build Coastguard Worker GrGLTextureRenderTarget::GrGLTextureRenderTarget(GrGLGpu* gpu,
35*c8dee2aaSAndroid Build Coastguard Worker int sampleCount,
36*c8dee2aaSAndroid Build Coastguard Worker const GrGLTexture::Desc& texDesc,
37*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureParameters> parameters,
38*c8dee2aaSAndroid Build Coastguard Worker const GrGLRenderTarget::IDs& rtIDs,
39*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable cacheable,
40*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus mipmapStatus,
41*c8dee2aaSAndroid Build Coastguard Worker std::string_view label)
42*c8dee2aaSAndroid Build Coastguard Worker : GrSurface(gpu, texDesc.fSize, texDesc.fIsProtected, label)
43*c8dee2aaSAndroid Build Coastguard Worker , GrGLTexture(gpu, texDesc, std::move(parameters), mipmapStatus, label)
44*c8dee2aaSAndroid Build Coastguard Worker , GrGLRenderTarget(gpu, texDesc.fSize, texDesc.fFormat, sampleCount, rtIDs,
45*c8dee2aaSAndroid Build Coastguard Worker texDesc.fIsProtected, label) {
46*c8dee2aaSAndroid Build Coastguard Worker this->registerWithCacheWrapped(cacheable);
47*c8dee2aaSAndroid Build Coastguard Worker }
48*c8dee2aaSAndroid Build Coastguard Worker
dumpMemoryStatistics(SkTraceMemoryDump * traceMemoryDump) const49*c8dee2aaSAndroid Build Coastguard Worker void GrGLTextureRenderTarget::dumpMemoryStatistics(
50*c8dee2aaSAndroid Build Coastguard Worker SkTraceMemoryDump* traceMemoryDump) const {
51*c8dee2aaSAndroid Build Coastguard Worker #ifndef SK_BUILD_FOR_ANDROID_FRAMEWORK
52*c8dee2aaSAndroid Build Coastguard Worker // Delegate to the base classes
53*c8dee2aaSAndroid Build Coastguard Worker GrGLRenderTarget::dumpMemoryStatistics(traceMemoryDump);
54*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture::dumpMemoryStatistics(traceMemoryDump);
55*c8dee2aaSAndroid Build Coastguard Worker #else
56*c8dee2aaSAndroid Build Coastguard Worker SkString resourceName = this->getResourceName();
57*c8dee2aaSAndroid Build Coastguard Worker resourceName.append("/texture_renderbuffer");
58*c8dee2aaSAndroid Build Coastguard Worker this->dumpMemoryStatisticsPriv(traceMemoryDump, resourceName, "RenderTarget",
59*c8dee2aaSAndroid Build Coastguard Worker this->gpuMemorySize());
60*c8dee2aaSAndroid Build Coastguard Worker #endif
61*c8dee2aaSAndroid Build Coastguard Worker }
62*c8dee2aaSAndroid Build Coastguard Worker
canAttemptStencilAttachment(bool useMultisampleFBO) const63*c8dee2aaSAndroid Build Coastguard Worker bool GrGLTextureRenderTarget::canAttemptStencilAttachment(bool useMultisampleFBO) const {
64*c8dee2aaSAndroid Build Coastguard Worker // This cap should have been handled at a higher level.
65*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(!this->getGpu()->getContext()->priv().caps()->avoidStencilBuffers());
66*c8dee2aaSAndroid Build Coastguard Worker // The RT FBO of GrGLTextureRenderTarget is never created from a wrapped FBO.
67*c8dee2aaSAndroid Build Coastguard Worker return true;
68*c8dee2aaSAndroid Build Coastguard Worker }
69*c8dee2aaSAndroid Build Coastguard Worker
MakeWrapped(GrGLGpu * gpu,int sampleCount,const GrGLTexture::Desc & texDesc,sk_sp<GrGLTextureParameters> parameters,const GrGLRenderTarget::IDs & rtIDs,GrWrapCacheable cacheable,GrMipmapStatus mipmapStatus,std::string_view label)70*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureRenderTarget> GrGLTextureRenderTarget::MakeWrapped(
71*c8dee2aaSAndroid Build Coastguard Worker GrGLGpu* gpu,
72*c8dee2aaSAndroid Build Coastguard Worker int sampleCount,
73*c8dee2aaSAndroid Build Coastguard Worker const GrGLTexture::Desc& texDesc,
74*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrGLTextureParameters> parameters,
75*c8dee2aaSAndroid Build Coastguard Worker const GrGLRenderTarget::IDs& rtIDs,
76*c8dee2aaSAndroid Build Coastguard Worker GrWrapCacheable cacheable,
77*c8dee2aaSAndroid Build Coastguard Worker GrMipmapStatus mipmapStatus,
78*c8dee2aaSAndroid Build Coastguard Worker std::string_view label) {
79*c8dee2aaSAndroid Build Coastguard Worker return sk_sp<GrGLTextureRenderTarget>(
80*c8dee2aaSAndroid Build Coastguard Worker new GrGLTextureRenderTarget(gpu,
81*c8dee2aaSAndroid Build Coastguard Worker sampleCount,
82*c8dee2aaSAndroid Build Coastguard Worker texDesc,
83*c8dee2aaSAndroid Build Coastguard Worker std::move(parameters),
84*c8dee2aaSAndroid Build Coastguard Worker rtIDs,
85*c8dee2aaSAndroid Build Coastguard Worker cacheable,
86*c8dee2aaSAndroid Build Coastguard Worker mipmapStatus,
87*c8dee2aaSAndroid Build Coastguard Worker label));
88*c8dee2aaSAndroid Build Coastguard Worker }
89*c8dee2aaSAndroid Build Coastguard Worker
onGpuMemorySize() const90*c8dee2aaSAndroid Build Coastguard Worker size_t GrGLTextureRenderTarget::onGpuMemorySize() const {
91*c8dee2aaSAndroid Build Coastguard Worker return GrSurface::ComputeSize(this->backendFormat(), this->dimensions(),
92*c8dee2aaSAndroid Build Coastguard Worker this->totalMemorySamplesPerPixel(), this->mipmapped());
93*c8dee2aaSAndroid Build Coastguard Worker }
94*c8dee2aaSAndroid Build Coastguard Worker
onSetLabel()95*c8dee2aaSAndroid Build Coastguard Worker void GrGLTextureRenderTarget::onSetLabel() {
96*c8dee2aaSAndroid Build Coastguard Worker GrGLTexture::onSetLabel();
97*c8dee2aaSAndroid Build Coastguard Worker }
98