1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2022 Google LLC
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
8*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSurfaceProxyView.h"
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrRenderTargetProxy.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrTextureProxy.h"
14*c8dee2aaSAndroid Build Coastguard Worker
operator ==(const GrSurfaceProxyView & view) const15*c8dee2aaSAndroid Build Coastguard Worker bool GrSurfaceProxyView::operator==(const GrSurfaceProxyView& view) const {
16*c8dee2aaSAndroid Build Coastguard Worker return fProxy->uniqueID() == view.fProxy->uniqueID() && fOrigin == view.fOrigin &&
17*c8dee2aaSAndroid Build Coastguard Worker fSwizzle == view.fSwizzle;
18*c8dee2aaSAndroid Build Coastguard Worker }
19*c8dee2aaSAndroid Build Coastguard Worker
mipmapped() const20*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped GrSurfaceProxyView::mipmapped() const {
21*c8dee2aaSAndroid Build Coastguard Worker if (const GrTextureProxy* proxy = this->asTextureProxy()) {
22*c8dee2aaSAndroid Build Coastguard Worker return proxy->mipmapped();
23*c8dee2aaSAndroid Build Coastguard Worker }
24*c8dee2aaSAndroid Build Coastguard Worker return skgpu::Mipmapped::kNo;
25*c8dee2aaSAndroid Build Coastguard Worker }
26*c8dee2aaSAndroid Build Coastguard Worker
asTextureProxy() const27*c8dee2aaSAndroid Build Coastguard Worker GrTextureProxy* GrSurfaceProxyView::asTextureProxy() const {
28*c8dee2aaSAndroid Build Coastguard Worker if (!fProxy) {
29*c8dee2aaSAndroid Build Coastguard Worker return nullptr;
30*c8dee2aaSAndroid Build Coastguard Worker }
31*c8dee2aaSAndroid Build Coastguard Worker return fProxy->asTextureProxy();
32*c8dee2aaSAndroid Build Coastguard Worker }
33*c8dee2aaSAndroid Build Coastguard Worker
asTextureProxyRef() const34*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrTextureProxy> GrSurfaceProxyView::asTextureProxyRef() const {
35*c8dee2aaSAndroid Build Coastguard Worker return sk_ref_sp<GrTextureProxy>(this->asTextureProxy());
36*c8dee2aaSAndroid Build Coastguard Worker }
37*c8dee2aaSAndroid Build Coastguard Worker
asRenderTargetProxy() const38*c8dee2aaSAndroid Build Coastguard Worker GrRenderTargetProxy* GrSurfaceProxyView::asRenderTargetProxy() const {
39*c8dee2aaSAndroid Build Coastguard Worker if (!fProxy) {
40*c8dee2aaSAndroid Build Coastguard Worker return nullptr;
41*c8dee2aaSAndroid Build Coastguard Worker }
42*c8dee2aaSAndroid Build Coastguard Worker return fProxy->asRenderTargetProxy();
43*c8dee2aaSAndroid Build Coastguard Worker }
44*c8dee2aaSAndroid Build Coastguard Worker
asRenderTargetProxyRef() const45*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrRenderTargetProxy> GrSurfaceProxyView::asRenderTargetProxyRef() const {
46*c8dee2aaSAndroid Build Coastguard Worker return sk_ref_sp<GrRenderTargetProxy>(this->asRenderTargetProxy());
47*c8dee2aaSAndroid Build Coastguard Worker }
48*c8dee2aaSAndroid Build Coastguard Worker
concatSwizzle(skgpu::Swizzle swizzle)49*c8dee2aaSAndroid Build Coastguard Worker void GrSurfaceProxyView::concatSwizzle(skgpu::Swizzle swizzle) {
50*c8dee2aaSAndroid Build Coastguard Worker fSwizzle = skgpu::Swizzle::Concat(fSwizzle, swizzle);
51*c8dee2aaSAndroid Build Coastguard Worker }
52*c8dee2aaSAndroid Build Coastguard Worker
makeSwizzle(skgpu::Swizzle swizzle) const53*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceProxyView GrSurfaceProxyView::makeSwizzle(skgpu::Swizzle swizzle) const& {
54*c8dee2aaSAndroid Build Coastguard Worker return {fProxy, fOrigin, skgpu::Swizzle::Concat(fSwizzle, swizzle)};
55*c8dee2aaSAndroid Build Coastguard Worker }
56*c8dee2aaSAndroid Build Coastguard Worker
makeSwizzle(skgpu::Swizzle swizzle)57*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceProxyView GrSurfaceProxyView::makeSwizzle(skgpu::Swizzle swizzle) && {
58*c8dee2aaSAndroid Build Coastguard Worker return {std::move(fProxy), fOrigin, skgpu::Swizzle::Concat(fSwizzle, swizzle)};
59*c8dee2aaSAndroid Build Coastguard Worker }
60*c8dee2aaSAndroid Build Coastguard Worker
reset()61*c8dee2aaSAndroid Build Coastguard Worker void GrSurfaceProxyView::reset() { *this = {}; }
62*c8dee2aaSAndroid Build Coastguard Worker
Copy(GrRecordingContext * context,GrSurfaceProxyView src,skgpu::Mipmapped mipmapped,SkIRect srcRect,SkBackingFit fit,skgpu::Budgeted budgeted,std::string_view label)63*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceProxyView GrSurfaceProxyView::Copy(GrRecordingContext* context,
64*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceProxyView src,
65*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped mipmapped,
66*c8dee2aaSAndroid Build Coastguard Worker SkIRect srcRect,
67*c8dee2aaSAndroid Build Coastguard Worker SkBackingFit fit,
68*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted budgeted,
69*c8dee2aaSAndroid Build Coastguard Worker std::string_view label) {
70*c8dee2aaSAndroid Build Coastguard Worker auto copy = GrSurfaceProxy::Copy(
71*c8dee2aaSAndroid Build Coastguard Worker context, src.refProxy(), src.origin(), mipmapped, srcRect, fit, budgeted, label);
72*c8dee2aaSAndroid Build Coastguard Worker return {std::move(copy), src.origin(), src.swizzle()};
73*c8dee2aaSAndroid Build Coastguard Worker }
74*c8dee2aaSAndroid Build Coastguard Worker
Copy(GrRecordingContext * rContext,GrSurfaceProxyView src,skgpu::Mipmapped mipmapped,SkBackingFit fit,skgpu::Budgeted budgeted,std::string_view label)75*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceProxyView GrSurfaceProxyView::Copy(GrRecordingContext* rContext,
76*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceProxyView src,
77*c8dee2aaSAndroid Build Coastguard Worker skgpu::Mipmapped mipmapped,
78*c8dee2aaSAndroid Build Coastguard Worker SkBackingFit fit,
79*c8dee2aaSAndroid Build Coastguard Worker skgpu::Budgeted budgeted,
80*c8dee2aaSAndroid Build Coastguard Worker std::string_view label) {
81*c8dee2aaSAndroid Build Coastguard Worker auto copy = GrSurfaceProxy::Copy(
82*c8dee2aaSAndroid Build Coastguard Worker rContext, src.refProxy(), src.origin(), mipmapped, fit, budgeted, label);
83*c8dee2aaSAndroid Build Coastguard Worker return {std::move(copy), src.origin(), src.swizzle()};
84*c8dee2aaSAndroid Build Coastguard Worker }
85