blob: 0252c04dbfe1c135bf5ceb07bb5d87644e5e14f0 [file] [log] [blame]
/*
* Copyright 2022 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "src/gpu/ganesh/GrSurfaceProxyView.h"
#include "include/core/SkRect.h"
#include "include/gpu/GpuTypes.h"
#include "src/gpu/ganesh/GrRenderTargetProxy.h"
#include "src/gpu/ganesh/GrTextureProxy.h"
bool GrSurfaceProxyView::operator==(const GrSurfaceProxyView& view) const {
return fProxy->uniqueID() == view.fProxy->uniqueID() && fOrigin == view.fOrigin &&
fSwizzle == view.fSwizzle;
}
skgpu::Mipmapped GrSurfaceProxyView::mipmapped() const {
if (const GrTextureProxy* proxy = this->asTextureProxy()) {
return proxy->mipmapped();
}
return skgpu::Mipmapped::kNo;
}
GrTextureProxy* GrSurfaceProxyView::asTextureProxy() const {
if (!fProxy) {
return nullptr;
}
return fProxy->asTextureProxy();
}
sk_sp<GrTextureProxy> GrSurfaceProxyView::asTextureProxyRef() const {
return sk_ref_sp<GrTextureProxy>(this->asTextureProxy());
}
GrRenderTargetProxy* GrSurfaceProxyView::asRenderTargetProxy() const {
if (!fProxy) {
return nullptr;
}
return fProxy->asRenderTargetProxy();
}
sk_sp<GrRenderTargetProxy> GrSurfaceProxyView::asRenderTargetProxyRef() const {
return sk_ref_sp<GrRenderTargetProxy>(this->asRenderTargetProxy());
}
void GrSurfaceProxyView::concatSwizzle(skgpu::Swizzle swizzle) {
fSwizzle = skgpu::Swizzle::Concat(fSwizzle, swizzle);
}
GrSurfaceProxyView GrSurfaceProxyView::makeSwizzle(skgpu::Swizzle swizzle) const& {
return {fProxy, fOrigin, skgpu::Swizzle::Concat(fSwizzle, swizzle)};
}
GrSurfaceProxyView GrSurfaceProxyView::makeSwizzle(skgpu::Swizzle swizzle) && {
return {std::move(fProxy), fOrigin, skgpu::Swizzle::Concat(fSwizzle, swizzle)};
}
void GrSurfaceProxyView::reset() { *this = {}; }
GrSurfaceProxyView GrSurfaceProxyView::Copy(GrRecordingContext* context,
GrSurfaceProxyView src,
skgpu::Mipmapped mipmapped,
SkIRect srcRect,
SkBackingFit fit,
skgpu::Budgeted budgeted,
std::string_view label) {
auto copy = GrSurfaceProxy::Copy(
context, src.refProxy(), src.origin(), mipmapped, srcRect, fit, budgeted, label);
return {std::move(copy), src.origin(), src.swizzle()};
}
GrSurfaceProxyView GrSurfaceProxyView::Copy(GrRecordingContext* rContext,
GrSurfaceProxyView src,
skgpu::Mipmapped mipmapped,
SkBackingFit fit,
skgpu::Budgeted budgeted,
std::string_view label) {
auto copy = GrSurfaceProxy::Copy(
rContext, src.refProxy(), src.origin(), mipmapped, fit, budgeted, label);
return {std::move(copy), src.origin(), src.swizzle()};
}