1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SKSL_ASTINTERFACEBLOCK 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SKSL_ASTINTERFACEBLOCK 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSLASTVarDeclaration.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "../ir/SkSLModifiers.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace SkSL { 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * An interface block, as in: 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * out sk_PerVertex { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * layout(builtin=0) float4 sk_Position; 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * layout(builtin=1) float sk_PointSize; 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * }; 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct ASTInterfaceBlock : public ASTDeclaration { 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // valueName is empty when it was not present in the source 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ASTInterfaceBlock(int offset, 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Modifiers modifiers, 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot StringFragment typeName, 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::vector<std::unique_ptr<ASTVarDeclarations>> declarations, 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot StringFragment instanceName, 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::vector<std::unique_ptr<ASTExpression>> sizes) 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : INHERITED(offset, kInterfaceBlock_Kind) 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fModifiers(modifiers) 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fTypeName(typeName) 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fDeclarations(std::move(declarations)) 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fInstanceName(instanceName) 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fSizes(std::move(sizes)) {} 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot String description() const override { 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot String result = fModifiers.description() + fTypeName + " {\n"; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (size_t i = 0; i < fDeclarations.size(); i++) { 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot result += fDeclarations[i]->description() + "\n"; 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot result += "}"; 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fInstanceName.fLength) { 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot result += " " + fInstanceName; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (const auto& size : fSizes) { 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot result += "["; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (size) { 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot result += size->description(); 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot result += "]"; 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return result + ";"; 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const Modifiers fModifiers; 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const StringFragment fTypeName; 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const std::vector<std::unique_ptr<ASTVarDeclarations>> fDeclarations; 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const StringFragment fInstanceName; 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const std::vector<std::unique_ptr<ASTExpression>> fSizes; 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef ASTDeclaration INHERITED; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // namespace 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 70