diff options
author | ethannicholas <ethannicholas@google.com> | 2016-09-26 11:58:52 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-26 11:58:52 -0700 |
commit | b12b3c6908c62c908b3680be01e3b5bfd30de310 (patch) | |
tree | b591f6b46363388600fbba3ca21fbf11a5f9aeff /src/sksl/ir | |
parent | 1d08998e4fb81755978f3d1c11744a6c77ddab2e (diff) |
Turned on SkSL->GLSL compiler
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2288033003
Committed: https://skia.googlesource.com/skia/+/9b0fe3d125f237d9884732a48414fa85fc71b4e3
Review-Url: https://codereview.chromium.org/2288033003
Diffstat (limited to 'src/sksl/ir')
-rw-r--r-- | src/sksl/ir/SkSLIndexExpression.h | 4 | ||||
-rw-r--r-- | src/sksl/ir/SkSLIntLiteral.h | 4 | ||||
-rw-r--r-- | src/sksl/ir/SkSLLayout.h | 34 | ||||
-rw-r--r-- | src/sksl/ir/SkSLModifiersDeclaration.h | 37 | ||||
-rw-r--r-- | src/sksl/ir/SkSLProgramElement.h | 3 |
5 files changed, 69 insertions, 13 deletions
diff --git a/src/sksl/ir/SkSLIndexExpression.h b/src/sksl/ir/SkSLIndexExpression.h index f5b0d09c2c..319e06f97d 100644 --- a/src/sksl/ir/SkSLIndexExpression.h +++ b/src/sksl/ir/SkSLIndexExpression.h @@ -19,7 +19,7 @@ namespace SkSL { static const Type& index_type(const Context& context, const Type& type) { if (type.kind() == Type::kMatrix_Kind) { if (type.componentType() == *context.fFloat_Type) { - switch (type.columns()) { + switch (type.rows()) { case 2: return *context.fVec2_Type; case 3: return *context.fVec3_Type; case 4: return *context.fVec4_Type; @@ -47,7 +47,7 @@ struct IndexExpression : public Expression { : INHERITED(base->fPosition, kIndex_Kind, index_type(context, base->fType)) , fBase(std::move(base)) , fIndex(std::move(index)) { - ASSERT(fIndex->fType == *context.fInt_Type); + ASSERT(fIndex->fType == *context.fInt_Type || fIndex->fType == *context.fUInt_Type); } std::string description() const override { diff --git a/src/sksl/ir/SkSLIntLiteral.h b/src/sksl/ir/SkSLIntLiteral.h index 2bc565712e..8921c283b5 100644 --- a/src/sksl/ir/SkSLIntLiteral.h +++ b/src/sksl/ir/SkSLIntLiteral.h @@ -18,8 +18,8 @@ namespace SkSL { struct IntLiteral : public Expression { // FIXME: we will need to revisit this if/when we add full support for both signed and unsigned // 64-bit integers, but for right now an int64_t will hold every value we care about - IntLiteral(const Context& context, Position position, int64_t value) - : INHERITED(position, kIntLiteral_Kind, *context.fInt_Type) + IntLiteral(const Context& context, Position position, int64_t value, const Type* type = nullptr) + : INHERITED(position, kIntLiteral_Kind, type ? *type : *context.fInt_Type) , fValue(value) {} virtual std::string description() const override { diff --git a/src/sksl/ir/SkSLLayout.h b/src/sksl/ir/SkSLLayout.h index d8dc98096f..24087d0612 100644 --- a/src/sksl/ir/SkSLLayout.h +++ b/src/sksl/ir/SkSLLayout.h @@ -22,15 +22,20 @@ struct Layout { , fIndex(layout.fIndex) , fSet(layout.fSet) , fBuiltin(layout.fBuiltin) - , fOriginUpperLeft(layout.fOriginUpperLeft) {} + , fOriginUpperLeft(layout.fOriginUpperLeft) + , fOverrideCoverage(layout.fOverrideCoverage) + , fBlendSupportAllEquations(layout.fBlendSupportAllEquations) {} - Layout(int location, int binding, int index, int set, int builtin, bool originUpperLeft) + Layout(int location, int binding, int index, int set, int builtin, bool originUpperLeft, + bool overrideCoverage, bool blendSupportAllEquations) : fLocation(location) , fBinding(binding) , fIndex(index) , fSet(set) , fBuiltin(builtin) - , fOriginUpperLeft(originUpperLeft) {} + , fOriginUpperLeft(originUpperLeft) + , fOverrideCoverage(overrideCoverage) + , fBlendSupportAllEquations(blendSupportAllEquations) {} std::string description() const { std::string result; @@ -59,6 +64,14 @@ struct Layout { result += separator + "origin_upper_left"; separator = ", "; } + if (fOverrideCoverage) { + result += separator + "override_coverage"; + separator = ", "; + } + if (fBlendSupportAllEquations) { + result += separator + "blend_support_all_equations"; + separator = ", "; + } if (result.length() > 0) { result = "layout (" + result + ")"; } @@ -66,11 +79,14 @@ struct Layout { } bool operator==(const Layout& other) const { - return fLocation == other.fLocation && - fBinding == other.fBinding && - fIndex == other.fIndex && - fSet == other.fSet && - fBuiltin == other.fBuiltin; + return fLocation == other.fLocation && + fBinding == other.fBinding && + fIndex == other.fIndex && + fSet == other.fSet && + fBuiltin == other.fBuiltin && + fOriginUpperLeft == other.fOriginUpperLeft && + fOverrideCoverage == other.fOverrideCoverage && + fBlendSupportAllEquations == other.fBlendSupportAllEquations; } bool operator!=(const Layout& other) const { @@ -85,6 +101,8 @@ struct Layout { int fSet; int fBuiltin; bool fOriginUpperLeft; + bool fOverrideCoverage; + bool fBlendSupportAllEquations; }; } // namespace diff --git a/src/sksl/ir/SkSLModifiersDeclaration.h b/src/sksl/ir/SkSLModifiersDeclaration.h new file mode 100644 index 0000000000..0066fab877 --- /dev/null +++ b/src/sksl/ir/SkSLModifiersDeclaration.h @@ -0,0 +1,37 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SKSL_MODIFIERDECLARATION +#define SKSL_MODIFIERDECLARATION + +#include "SkSLProgramElement.h" +#include "SkSLModifiers.h" + +namespace SkSL { + +/** + * A declaration that consists only of modifiers, e.g.: + * + * layout(blend_support_all_equations) out; + */ +struct ModifiersDeclaration : public ProgramElement { + ModifiersDeclaration(Modifiers modifiers) + : INHERITED(Position(), kModifiers_Kind) + , fModifiers(modifiers) {} + + std::string description() const { + return fModifiers.description() + ";"; + } + + Modifiers fModifiers; + + typedef ProgramElement INHERITED; +}; + +} // namespace + +#endif diff --git a/src/sksl/ir/SkSLProgramElement.h b/src/sksl/ir/SkSLProgramElement.h index 44fc340667..2f1ce77199 100644 --- a/src/sksl/ir/SkSLProgramElement.h +++ b/src/sksl/ir/SkSLProgramElement.h @@ -20,7 +20,8 @@ struct ProgramElement : public IRNode { kVar_Kind, kFunction_Kind, kInterfaceBlock_Kind, - kExtension_Kind + kExtension_Kind, + kModifiers_Kind }; ProgramElement(Position position, Kind kind) |