xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrShaderVar.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "src/gpu/ganesh/GrShaderVar.h"
9 
10 #include "src/core/SkSLTypeShared.h"
11 
type_modifier_string(GrShaderVar::TypeModifier t)12 static const char* type_modifier_string(GrShaderVar::TypeModifier t) {
13     switch (t) {
14         case GrShaderVar::TypeModifier::None: return "";
15         case GrShaderVar::TypeModifier::In: return "in";
16         case GrShaderVar::TypeModifier::InOut: return "inout";
17         case GrShaderVar::TypeModifier::Out: return "out";
18         case GrShaderVar::TypeModifier::Uniform: return "uniform";
19     }
20     SK_ABORT("Unknown shader variable type modifier.");
21 }
22 
appendDecl(const GrShaderCaps * shaderCaps,SkString * out) const23 void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const {
24     if (!fLayoutQualifier.isEmpty()) {
25         out->appendf("layout(%s) ", fLayoutQualifier.c_str());
26     }
27     if (!fExtraModifiers.isEmpty()) {
28         out->appendf("%s ", fExtraModifiers.c_str());
29     }
30     if (this->getTypeModifier() != TypeModifier::None) {
31         out->appendf("%s ", type_modifier_string(this->getTypeModifier()));
32     }
33     SkSLType effectiveType = this->getType();
34     if (this->isArray()) {
35         SkASSERT(this->getArrayCount() > 0);
36         out->appendf("%s %s[%d]",
37                      SkSLTypeString(effectiveType),
38                      this->getName().c_str(),
39                      this->getArrayCount());
40     } else {
41         out->appendf("%s %s", SkSLTypeString(effectiveType), this->getName().c_str());
42     }
43 }
44