1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2019 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SKSL_DEFINES 9*c8dee2aaSAndroid Build Coastguard Worker #define SKSL_DEFINES 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTArray.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker using SKSL_INT = int64_t; 17*c8dee2aaSAndroid Build Coastguard Worker using SKSL_FLOAT = float; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker namespace SkSL { 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker class Expression; 22*c8dee2aaSAndroid Build Coastguard Worker class Statement; 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker class ExpressionArray : public skia_private::STArray<2, std::unique_ptr<Expression>> { 25*c8dee2aaSAndroid Build Coastguard Worker public: 26*c8dee2aaSAndroid Build Coastguard Worker using STArray::STArray; 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker /** Returns a new ExpressionArray containing a clone of every element. */ 29*c8dee2aaSAndroid Build Coastguard Worker ExpressionArray clone() const; 30*c8dee2aaSAndroid Build Coastguard Worker }; 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker using StatementArray = skia_private::STArray<2, std::unique_ptr<Statement>>; 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker // Functions larger than this (measured in IR nodes) will not be inlined. This growth factor 35*c8dee2aaSAndroid Build Coastguard Worker // accounts for the number of calls being inlined--i.e., a function called five times (that is, with 36*c8dee2aaSAndroid Build Coastguard Worker // five inlining opportunities) would be considered 5x larger than if it were called once. This 37*c8dee2aaSAndroid Build Coastguard Worker // default threshold value is arbitrary, but tends to work well in practice. 38*c8dee2aaSAndroid Build Coastguard Worker static constexpr int kDefaultInlineThreshold = 50; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker // A hard upper limit on the number of variable slots allowed in a function/global scope. 41*c8dee2aaSAndroid Build Coastguard Worker // This is an arbitrary limit, but is needed to prevent code generation from taking unbounded 42*c8dee2aaSAndroid Build Coastguard Worker // amounts of time or space. 43*c8dee2aaSAndroid Build Coastguard Worker static constexpr int kVariableSlotLimit = 100000; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSL 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard Worker #endif 48