/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "src/gpu/ganesh/GrShaderVar.h" #include "src/core/SkSLTypeShared.h" static const char* type_modifier_string(GrShaderVar::TypeModifier t) { switch (t) { case GrShaderVar::TypeModifier::None: return ""; case GrShaderVar::TypeModifier::In: return "in"; case GrShaderVar::TypeModifier::InOut: return "inout"; case GrShaderVar::TypeModifier::Out: return "out"; case GrShaderVar::TypeModifier::Uniform: return "uniform"; } SK_ABORT("Unknown shader variable type modifier."); } void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const { if (!fLayoutQualifier.isEmpty()) { out->appendf("layout(%s) ", fLayoutQualifier.c_str()); } if (!fExtraModifiers.isEmpty()) { out->appendf("%s ", fExtraModifiers.c_str()); } if (this->getTypeModifier() != TypeModifier::None) { out->appendf("%s ", type_modifier_string(this->getTypeModifier())); } SkSLType effectiveType = this->getType(); if (this->isArray()) { SkASSERT(this->getArrayCount() > 0); out->appendf("%s %s[%d]", SkSLTypeString(effectiveType), this->getName().c_str(), this->getArrayCount()); } else { out->appendf("%s %s", SkSLTypeString(effectiveType), this->getName().c_str()); } }