blob: 78c9331bd02a47e32161570e8788564537f5d1b3 [file] [log] [blame]
Brian Salomon99938a82016-11-21 13:41:08 -05001/*
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
Mike Kleinc0bd9f92019-04-23 12:05:21 -05009#include "src/gpu/GrShaderCaps.h"
10#include "src/gpu/GrShaderVar.h"
Brian Salomon99938a82016-11-21 13:41:08 -050011
Brian Salomonf9f45122016-11-29 11:59:17 -050012static const char* type_modifier_string(GrShaderVar::TypeModifier t) {
13 switch (t) {
Ben Wagnerdabd98c2020-03-25 15:17:18 -040014 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";
Brian Salomonf9f45122016-11-29 11:59:17 -050019 }
Ben Wagnerb4aab9a2017-08-16 10:53:04 -040020 SK_ABORT("Unknown shader variable type modifier.");
Brian Salomonf9f45122016-11-29 11:59:17 -050021}
22
Brian Salomon1edc5b92016-11-29 13:43:46 -050023void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const {
Brian Salomon99938a82016-11-21 13:41:08 -050024 if (!fLayoutQualifier.isEmpty()) {
25 out->appendf("layout(%s) ", fLayoutQualifier.c_str());
26 }
Ben Wagnerdabd98c2020-03-25 15:17:18 -040027 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()));
Brian Salomon99938a82016-11-21 13:41:08 -050032 }
33 GrSLType effectiveType = this->getType();
Brian Salomon99938a82016-11-21 13:41:08 -050034 if (this->isArray()) {
35 if (this->isUnsizedArray()) {
Chris Dalton4f5cbcd2019-02-13 14:04:34 -070036 out->appendf("%s %s[]", GrGLSLTypeString(effectiveType), this->getName().c_str());
Brian Salomon99938a82016-11-21 13:41:08 -050037 } else {
38 SkASSERT(this->getArrayCount() > 0);
39 out->appendf("%s %s[%d]",
Chris Dalton4f5cbcd2019-02-13 14:04:34 -070040 GrGLSLTypeString(effectiveType),
Brian Salomon99938a82016-11-21 13:41:08 -050041 this->getName().c_str(),
42 this->getArrayCount());
43 }
44 } else {
Chris Dalton4f5cbcd2019-02-13 14:04:34 -070045 out->appendf("%s %s", GrGLSLTypeString(effectiveType), this->getName().c_str());
Brian Salomon99938a82016-11-21 13:41:08 -050046 }
47}