blob: 6e598c41deee0488f19f6860e73aa4cf35faaa6e [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/graphite/Renderer.h"
namespace skgpu::graphite {
RenderStep::RenderStep(RenderStepID renderStepID,
SkEnumBitMask<Flags> flags,
std::initializer_list<Uniform> uniforms,
PrimitiveType primitiveType,
DepthStencilSettings depthStencilSettings,
SkSpan<const Attribute> staticAttrs,
SkSpan<const Attribute> appendAttrs,
SkSpan<const Varying> varyings)
: fRenderStepID(renderStepID)
, fFlags(flags)
, fPrimitiveType(primitiveType)
, fDepthStencilSettings(depthStencilSettings)
, fUniforms(uniforms)
, fStaticAttrs(staticAttrs.begin(), staticAttrs.end())
, fAppendAttrs(appendAttrs.begin(), appendAttrs.end())
, fVaryings(varyings.begin(), varyings.end())
, fStaticDataStride(0)
, fAppendDataStride(0) {
for (auto v : this->staticAttributes()) {
fStaticDataStride += v.sizeAlign4();
}
for (auto i : this->appendAttributes()) {
fAppendDataStride += i.sizeAlign4();
}
}
Coverage RenderStep::GetCoverage(SkEnumBitMask<Flags> flags) {
return !(flags & Flags::kEmitsCoverage) ? Coverage::kNone
: (flags & Flags::kLCDCoverage) ? Coverage::kLCD
: Coverage::kSingleChannel;
}
const char* RenderStep::RenderStepName(RenderStepID id) {
#define CASE1(BaseName) case RenderStepID::k##BaseName: return #BaseName "RenderStep";
#define CASE2(BaseName, VariantName) \
case RenderStepID::k##BaseName##_##VariantName: return #BaseName "RenderStep[" #VariantName "]";
switch (id) {
SKGPU_RENDERSTEP_TYPES(CASE1, CASE2)
}
#undef CASE1
#undef CASE2
SkUNREACHABLE;
}
bool RenderStep::IsValidRenderStepID(uint32_t renderStepID) {
return renderStepID > (int) RenderStep::RenderStepID::kInvalid &&
renderStepID < RenderStep::kNumRenderSteps;
}
} // namespace skgpu::graphite