#include "src/gpu/ganesh/GrDirectContextPriv.h"
#include "include/core/SkAlphaType.h"
#include "include/core/SkBitmap.h"
#include "include/core/SkColorSpace.h"
#include "include/core/SkColorType.h"
#include "include/core/SkImage.h"
#include "include/core/SkImageInfo.h"
#include "include/core/SkRect.h"
#include "include/core/SkString.h"
#include "include/core/SkTypes.h"
#include "include/effects/SkRuntimeEffect.h"
#include "include/gpu/ganesh/GrDirectContext.h"
#include "include/gpu/ganesh/GrTypes.h"
#include "include/private/base/SingleOwner.h"
#include "include/private/base/SkDebug.h"
#include "include/private/base/SkTemplates.h"
#include "include/private/chromium/GrDeferredDisplayList.h"
#include "src/core/SkRuntimeEffectPriv.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/AtlasTypes.h"
#include "src/gpu/SkBackingFit.h"
#include "src/gpu/ganesh/GrAuditTrail.h"
#include "src/gpu/ganesh/GrColorInfo.h"
#include "src/gpu/ganesh/GrDrawingManager.h"
#include "src/gpu/ganesh/GrFragmentProcessor.h"
#include "src/gpu/ganesh/GrGpu.h"
#include "src/gpu/ganesh/GrImageInfo.h"
#include "src/gpu/ganesh/GrPixmap.h"
#include "src/gpu/ganesh/GrRenderTargetProxy.h"
#include "src/gpu/ganesh/GrResourceCache.h"
#include "src/gpu/ganesh/GrSurfaceProxy.h"
#include "src/gpu/ganesh/GrSurfaceProxyPriv.h"
#include "src/gpu/ganesh/GrSurfaceProxyView.h"
#include "src/gpu/ganesh/GrTexture.h"
#include "src/gpu/ganesh/GrThreadSafePipelineBuilder.h"
#include "src/gpu/ganesh/GrTracing.h"
#include "src/gpu/ganesh/SkGr.h"
#include "src/gpu/ganesh/SurfaceFillContext.h"
#include "src/gpu/ganesh/effects/GrSkSLFP.h"
#include "src/gpu/ganesh/effects/GrTextureEffect.h"
#include "src/gpu/ganesh/image/SkImage_Ganesh.h"
#include "src/gpu/ganesh/text/GrAtlasManager.h"
#include "src/image/SkImage_Base.h"
#include <algorithm>
#include <cstdint>
#include <tuple>
class GrProgramDesc;
class GrProgramInfo;
usingnamespaceskia_private;
MaskFormat;
#define ASSERT_OWNED_PROXY(P) …
#define ASSERT_SINGLE_OWNER …
#define RETURN_VALUE_IF_ABANDONED(value) …
GrSemaphoresSubmitted GrDirectContextPriv::flushSurfaces(
SkSpan<GrSurfaceProxy*> proxies,
SkSurfaces::BackendSurfaceAccess access,
const GrFlushInfo& info,
const skgpu::MutableTextureState* newState) { … }
void GrDirectContextPriv::createDDLTask(sk_sp<const GrDeferredDisplayList> ddl,
sk_sp<GrRenderTargetProxy> newDest) { … }
bool GrDirectContextPriv::compile(const GrProgramDesc& desc, const GrProgramInfo& info) { … }
#if defined(GPU_TEST_UTILS)
void GrDirectContextPriv::dumpCacheStats(SkString* out) const {
#if GR_CACHE_STATS
this->context()->fResourceCache->dumpStats(out);
#endif
}
void GrDirectContextPriv::dumpCacheStatsKeyValuePairs(TArray<SkString>* keys,
TArray<double>* values) const {
#if GR_CACHE_STATS
this->context()->fResourceCache->dumpStatsKeyValuePairs(keys, values);
#endif
}
void GrDirectContextPriv::printCacheStats() const {
SkString out;
this->dumpCacheStats(&out);
SkDebugf("%s", out.c_str());
}
void GrDirectContextPriv::resetGpuStats() const {
#if GR_GPU_STATS
this->context()->fGpu->stats()->reset();
#endif
}
void GrDirectContextPriv::dumpGpuStats(SkString* out) const {
#if GR_GPU_STATS
this->context()->fGpu->stats()->dump(out);
if (auto builder = this->context()->fGpu->pipelineBuilder()) {
builder->stats()->dump(out);
}
#endif
}
void GrDirectContextPriv::dumpGpuStatsKeyValuePairs(TArray<SkString>* keys,
TArray<double>* values) const {
#if GR_GPU_STATS
this->context()->fGpu->stats()->dumpKeyValuePairs(keys, values);
if (auto builder = this->context()->fGpu->pipelineBuilder()) {
builder->stats()->dumpKeyValuePairs(keys, values);
}
#endif
}
void GrDirectContextPriv::printGpuStats() const {
SkString out;
this->dumpGpuStats(&out);
SkDebugf("%s", out.c_str());
}
void GrDirectContextPriv::resetContextStats() {
#if GR_GPU_STATS
this->context()->stats()->reset();
#endif
}
void GrDirectContextPriv::dumpContextStats(SkString* out) const {
#if GR_GPU_STATS
this->context()->stats()->dump(out);
#endif
}
void GrDirectContextPriv::dumpContextStatsKeyValuePairs(TArray<SkString>* keys,
TArray<double>* values) const {
#if GR_GPU_STATS
this->context()->stats()->dumpKeyValuePairs(keys, values);
#endif
}
void GrDirectContextPriv::printContextStats() const {
SkString out;
this->dumpContextStats(&out);
SkDebugf("%s", out.c_str());
}
sk_sp<SkImage> GrDirectContextPriv::testingOnly_getFontAtlasImage(MaskFormat format,
unsigned int index) {
auto atlasManager = this->getAtlasManager();
if (!atlasManager) {
return nullptr;
}
unsigned int numActiveProxies;
const GrSurfaceProxyView* views = atlasManager->getViews(format, &numActiveProxies);
if (index >= numActiveProxies || !views || !views[index].proxy()) {
return nullptr;
}
SkColorType colorType = skgpu::MaskFormatToColorType(format);
SkASSERT(views[index].proxy()->priv().isExact());
return sk_make_sp<SkImage_Ganesh>(sk_ref_sp(this->context()),
kNeedNewImageUniqueID,
views[index],
SkColorInfo(colorType, kPremul_SkAlphaType, nullptr));
}
void GrDirectContextPriv::testingOnly_flushAndRemoveOnFlushCallbackObject(
GrOnFlushCallbackObject* cb) {
this->context()->flushAndSubmit();
this->context()->drawingManager()->testingOnly_removeOnFlushCallbackObject(cb);
}
#endif
static std::unique_ptr<GrFragmentProcessor> make_premul_effect(
std::unique_ptr<GrFragmentProcessor> fp) { … }
static std::unique_ptr<GrFragmentProcessor> make_unpremul_effect(
std::unique_ptr<GrFragmentProcessor> fp) { … }
static bool test_for_preserving_PM_conversions(GrDirectContext* dContext) { … }
bool GrDirectContextPriv::validPMUPMConversionExists() { … }
std::unique_ptr<GrFragmentProcessor> GrDirectContextPriv::createPMToUPMEffect(
std::unique_ptr<GrFragmentProcessor> fp) { … }
std::unique_ptr<GrFragmentProcessor> GrDirectContextPriv::createUPMToPMEffect(
std::unique_ptr<GrFragmentProcessor> fp) { … }