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>
diff --git a/src/sksl/SkSLMetalCodeGenerator.h b/src/sksl/SkSLMetalCodeGenerator.h
index 517f9f6..3f0bc28 100644
--- a/src/sksl/SkSLMetalCodeGenerator.h
+++ b/src/sksl/SkSLMetalCodeGenerator.h
@@ -53,6 +53,7 @@
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 @@
this->setupIntrinsics();
}
+ bool generateCode(int shaderNum); // FIXME - remove when done inserting MSL
bool generateCode() override;
protected:
@@ -129,6 +131,12 @@
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 @@
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;