blob: 1f2204dce2576a85462324a76970f71b015bea8b [file] [log] [blame]
/*
* Copyright 2021 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/gpu/graphite/TextureInfo.h"
#include "include/core/SkFourByteTag.h"
#include "include/core/SkStream.h"
#include "src/gpu/GpuTypesPriv.h"
#include "src/gpu/graphite/Caps.h"
#include "src/gpu/graphite/TextureFormat.h"
#include "src/gpu/graphite/TextureInfoPriv.h"
namespace skgpu::graphite {
TextureInfo::TextureInfo(const TextureInfo& that)
: fBackend(that.fBackend)
, fViewFormat(that.fViewFormat)
, fProtected(that.fProtected) {
if (!that.fData.has_value()) {
SkASSERT(!fData.has_value());
return;
}
that.fData->copyTo(fData);
}
TextureInfo& TextureInfo::operator=(const TextureInfo& that) {
if (this != &that) {
this->~TextureInfo();
new (this) TextureInfo(that);
}
return *this;
}
bool TextureInfo::isCompatible(const TextureInfo& that, bool requireExact) const {
if (fBackend != that.fBackend) {
return false;
} else if (fBackend == skgpu::BackendApi::kUnsupported) {
SkASSERT(!fData.has_value() && !that.fData.has_value());
return true;
} else {
SkASSERT(fData.has_value() && that.fData.has_value());
return fData->fSampleCount == that.fData->fSampleCount &&
fData->fMipmapped == that.fData->fMipmapped &&
fData->isCompatible(that, requireExact);
}
}
SkString TextureInfo::toString() const {
if (!this->isValid()) {
return SkString("{}");
}
// Strip the leading "k" from the enum name when creating the TextureInfo string.
SkASSERT(BackendApiToStr(fBackend)[0] == 'k');
const char* backendName = BackendApiToStr(fBackend) + 1;
return SkStringPrintf("%s(viewFormat=%s,%s,bpp=%zu,sampleCount=%u,mipmapped=%d,protected=%d)",
backendName,
TextureFormatName(fViewFormat),
fData->toBackendString().c_str(),
TextureFormatBytesPerBlock(fViewFormat),
fData->fSampleCount,
static_cast<int>(fData->fMipmapped),
static_cast<int>(fProtected));
}
} // namespace skgpu::graphite