aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sksl/SkSLMetalCodeGenerator.h
diff options
context:
space:
mode:
authorGravatar Timothy Liang <timliang@google.com>2018-06-05 09:58:07 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-06-05 15:20:58 +0000
commit7d63778a0a262a8728fd2507794d3a8d92e5fac5 (patch)
tree5d05fbcbabbf6b9249a8e07cf251aed42fdfd36f /src/sksl/SkSLMetalCodeGenerator.h
parent1b7cd334f8d6de2e31396eb0d2a8ad3a99c1d221 (diff)
fixed interface/in/out struct for mvk integration and added a few missing builtins to skslc msl backend
Bug: skia: Change-Id: Id514dc6af64bb2a5eb71f2161ceba549a8a6836d Reviewed-on: https://skia-review.googlesource.com/131881 Reviewed-by: Ethan Nicholas <ethannicholas@google.com> Commit-Queue: Timothy Liang <timliang@google.com>
Diffstat (limited to 'src/sksl/SkSLMetalCodeGenerator.h')
-rw-r--r--src/sksl/SkSLMetalCodeGenerator.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/sksl/SkSLMetalCodeGenerator.h b/src/sksl/SkSLMetalCodeGenerator.h
index 517f9f655b..3f0bc2862b 100644
--- a/src/sksl/SkSLMetalCodeGenerator.h
+++ b/src/sksl/SkSLMetalCodeGenerator.h
@@ -53,6 +53,7 @@ namespace SkSL {
class MetalCodeGenerator : public CodeGenerator {
public:
static constexpr const char* SAMPLER_SUFFIX = "Smplr";
+ static constexpr const char* PACKED_PREFIX = "packed_";
enum Precedence {
kParentheses_Precedence = 1,
@@ -83,6 +84,7 @@ public:
this->setupIntrinsics();
}
+ bool generateCode(int shaderNum); // FIXME - remove when done inserting MSL
bool generateCode() override;
protected:
@@ -129,6 +131,12 @@ protected:
void writeOutputStruct();
+ void writeInterfaceBlocks();
+
+ int size(const Type* type, bool isPacked) const;
+
+ int alignment(const Type* type, bool isPacked) const;
+
void writeGlobalStruct();
void writePrecisionModifier();
@@ -221,13 +229,14 @@ protected:
Requirements requirements(const Statement& e);
- typedef std::tuple<IntrinsicKind, int32_t, int32_t, int32_t, int32_t> Intrinsic;
+ typedef std::pair<IntrinsicKind, int32_t> Intrinsic;
std::unordered_map<String, Intrinsic> fIntrinsicMap;
std::vector<const VarDeclaration*> fInitNonConstGlobalVars;
std::vector<const Variable*> fTextures;
std::unordered_map<const Type::Field*, const InterfaceBlock*> fInterfaceBlockMap;
std::unordered_map<const InterfaceBlock*, String> fInterfaceBlockNameMap;
int fAnonInterfaceCount = 0;
+ int fPaddingCount = 0;
bool fNeedsGlobalStructInit = false;
const char* fLineEnding;
const Context& fContext;