diff options
author | ethannicholas <ethannicholas@google.com> | 2016-10-12 06:39:56 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-10-12 06:39:56 -0700 |
commit | 5961bc9278a00e56dacdd9408d0744b5a0a3b493 (patch) | |
tree | d491a2df69b12eb937788951d726e72168572fdb /src/sksl/ir | |
parent | 5772eaa91d6a10d74959d7732513c5ab9c057e03 (diff) |
Turned on SkSL->GLSL compiler
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2288033003
Committed: https://skia.googlesource.com/skia/+/9b0fe3d125f237d9884732a48414fa85fc71b4e3
Committed: https://skia.googlesource.com/skia/+/b12b3c6908c62c908b3680be01e3b5bfd30de310
Committed: https://skia.googlesource.com/skia/+/f008b0a59f45c0d4bea3e66faf3b01805009ec89
Committed: https://skia.googlesource.com/skia/+/08b2ccf398e2b81bc05d2c105837e5419899469b
Committed: https://skia.googlesource.com/skia/+/dcfe6dba4a335e50e86ff68e3252065d4197432c
Committed: https://skia.googlesource.com/skia/+/ccb1dd8f267f9d7fe7c9d0ce222ebc81b41853b3
Review-Url: https://codereview.chromium.org/2288033003
Diffstat (limited to 'src/sksl/ir')
-rw-r--r-- | src/sksl/ir/SkSLIndexExpression.h | 6 | ||||
-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/SkSLProgram.h | 9 | ||||
-rw-r--r-- | src/sksl/ir/SkSLProgramElement.h | 3 |
6 files changed, 77 insertions, 16 deletions
diff --git a/src/sksl/ir/SkSLIndexExpression.h b/src/sksl/ir/SkSLIndexExpression.h index f5b0d09c2c..ea9af3d897 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; @@ -27,7 +27,7 @@ static const Type& index_type(const Context& context, const Type& type) { } } else { ASSERT(type.componentType() == *context.fDouble_Type); - switch (type.columns()) { + switch (type.rows()) { case 2: return *context.fDVec2_Type; case 3: return *context.fDVec3_Type; case 4: return *context.fDVec4_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/SkSLProgram.h b/src/sksl/ir/SkSLProgram.h index 205db6e932..8393341269 100644 --- a/src/sksl/ir/SkSLProgram.h +++ b/src/sksl/ir/SkSLProgram.h @@ -11,6 +11,7 @@ #include <vector> #include <memory> +#include "SkSLModifiers.h" #include "SkSLProgramElement.h" #include "SkSLSymbolTable.h" @@ -25,14 +26,18 @@ struct Program { kVertex_Kind }; - Program(Kind kind, std::vector<std::unique_ptr<ProgramElement>> elements, + Program(Kind kind, + Modifiers::Flag defaultPrecision, + std::vector<std::unique_ptr<ProgramElement>> elements, std::shared_ptr<SymbolTable> symbols) : fKind(kind) + , fDefaultPrecision(defaultPrecision) , fElements(std::move(elements)) , fSymbols(symbols) {} Kind fKind; - + // FIXME handle different types; currently it assumes this is for floats + Modifiers::Flag fDefaultPrecision; std::vector<std::unique_ptr<ProgramElement>> fElements; std::shared_ptr<SymbolTable> fSymbols; }; 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) |