runtime shaders
This extends the runStriped to all for return data.
GPU impl not done yet, will be done in a follow-on CL.
Change-Id: Ib107d2945f6fdb34ce1b5405a6c88a5ae7e9f7ac
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/221539
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/src/shaders/SkRTShader.h b/src/shaders/SkRTShader.h
new file mode 100644
index 0000000..6bd4447
--- /dev/null
+++ b/src/shaders/SkRTShader.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkRTShader_DEFINED
+#define SkRTShader_DEFINED
+
+#include "include/core/SkString.h"
+#include "include/private/SkMutex.h"
+#include "src/shaders/SkShaderBase.h"
+#include "src/sksl/SkSLByteCode.h"
+
+#if SK_SUPPORT_GPU
+#include "src/gpu/GrFragmentProcessor.h"
+#endif
+
+class SkData;
+class SkMatrix;
+
+class SkRTShader : public SkShaderBase {
+public:
+ SkRTShader(SkString sksl, sk_sp<SkData> inputs, const SkMatrix* localMatrix, bool isOpaque);
+
+#if SK_SUPPORT_GPU
+ std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override {
+ // TODO
+ return nullptr;
+ }
+#endif
+
+ bool isOpaque() const override { return fIsOpaque; }
+
+protected:
+ void flatten(SkWriteBuffer&) const override;
+ bool onAppendStages(const SkStageRec& rec) const override;
+
+private:
+ SK_FLATTENABLE_HOOKS(SkRTShader)
+
+ SkString fSkSL;
+ sk_sp<SkData> fInputs;
+ const bool fIsOpaque;
+
+ mutable SkMutex fByteCodeMutex;
+ mutable std::unique_ptr<SkSL::ByteCode> fByteCode;
+
+ typedef SkShaderBase INHERITED;
+};
+
+#endif