blob: b72c8166946d7adefc2505b9d02713bfcdf9e1ba [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 "src/gpu/graphite/GraphicsPipeline.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/graphite/ContextUtils.h"
#include "src/gpu/graphite/GraphicsPipelineDesc.h"
#include "src/gpu/graphite/PaintParamsKey.h"
#include "src/gpu/graphite/Renderer.h"
#include "src/gpu/graphite/ShaderCodeDictionary.h"
#include "src/gpu/graphite/ShaderInfo.h"
#include "src/utils/SkShaderUtils.h"
namespace skgpu::graphite {
GraphicsPipeline::GraphicsPipeline(const SharedContext* sharedContext,
const PipelineInfo& pipelineInfo)
: Resource(sharedContext,
Ownership::kOwned,
/*gpuMemorySize=*/0)
, fPipelineInfo(pipelineInfo) {}
GraphicsPipeline::~GraphicsPipeline() {
#if defined(SK_PIPELINE_LIFETIME_LOGGING)
static const char* kNames[2] = { "DeletionN", "DeletionP" };
TRACE_EVENT_INSTANT2("skia.gpu",
TRACE_STR_STATIC(kNames[this->fromPrecompile()]),
TRACE_EVENT_SCOPE_THREAD,
"key", this->getPipelineInfo().fUniqueKeyHash,
"compilationID", this->getPipelineInfo().fCompilationID);
#endif
}
GraphicsPipeline::PipelineInfo::PipelineInfo(
const ShaderInfo& shaderInfo,
SkEnumBitMask<PipelineCreationFlags> pipelineCreationFlags,
uint32_t uniqueKeyHash,
uint32_t compilationID)
: fDstReadStrategy(shaderInfo.dstReadStrategy())
, fNumFragTexturesAndSamplers(shaderInfo.numFragmentTexturesAndSamplers())
, fHasPaintUniforms(shaderInfo.hasPaintUniforms())
, fHasStepUniforms(shaderInfo.hasStepUniforms())
, fHasGradientBuffer(shaderInfo.hasGradientBuffer())
, fUniqueKeyHash(uniqueKeyHash)
, fCompilationID(compilationID)
, fFromPrecompile(pipelineCreationFlags & PipelineCreationFlags::kForPrecompilation) {
#if defined(GPU_TEST_UTILS)
fSkSLVertexShader = SkShaderUtils::PrettyPrint(shaderInfo.vertexSkSL());
fSkSLFragmentShader = SkShaderUtils::PrettyPrint(shaderInfo.fragmentSkSL());
fLabel = shaderInfo.fsLabel();
#endif
}
#if defined(GPU_TEST_UTILS)
SkString GraphicsPipelineDesc::toString(ShaderCodeDictionary* dict) const {
SkString tmp;
tmp.append(RenderStep::RenderStepName(fRenderStepID));
tmp.append(" - ");
PaintParamsKey key = dict->lookup(fPaintID);
tmp.append(key.toString(dict));
return tmp;
}
#endif
} // namespace skgpu::graphite