summaryrefslogtreecommitdiffstats
path: root/gfx/skia/skia/include/private/SkSLLayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/skia/skia/include/private/SkSLLayout.h')
-rw-r--r--gfx/skia/skia/include/private/SkSLLayout.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/gfx/skia/skia/include/private/SkSLLayout.h b/gfx/skia/skia/include/private/SkSLLayout.h
new file mode 100644
index 0000000000..a99f18a477
--- /dev/null
+++ b/gfx/skia/skia/include/private/SkSLLayout.h
@@ -0,0 +1,93 @@
+/*
+ * 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_LAYOUT
+#define SKSL_LAYOUT
+
+#include <string>
+
+namespace SkSL {
+
+/**
+ * Represents a layout block appearing before a variable declaration, as in:
+ *
+ * layout (location = 0) int x;
+ */
+struct Layout {
+ enum Flag {
+ kOriginUpperLeft_Flag = 1 << 0,
+ kPushConstant_Flag = 1 << 1,
+ kBlendSupportAllEquations_Flag = 1 << 2,
+ kColor_Flag = 1 << 3,
+
+ // These flags indicate if the qualifier appeared, regardless of the accompanying value.
+ kLocation_Flag = 1 << 4,
+ kOffset_Flag = 1 << 5,
+ kBinding_Flag = 1 << 6,
+ kTexture_Flag = 1 << 7,
+ kSampler_Flag = 1 << 8,
+ kIndex_Flag = 1 << 9,
+ kSet_Flag = 1 << 10,
+ kBuiltin_Flag = 1 << 11,
+ kInputAttachmentIndex_Flag = 1 << 12,
+
+ // These flags indicate the backend type; only one at most can be set.
+ kSPIRV_Flag = 1 << 13,
+ kMetal_Flag = 1 << 14,
+ kGL_Flag = 1 << 15,
+ kWGSL_Flag = 1 << 16,
+ };
+
+ static constexpr int kAllBackendFlagsMask =
+ Layout::kSPIRV_Flag | Layout::kMetal_Flag | Layout::kGL_Flag | Layout::kWGSL_Flag;
+
+ Layout(int flags, int location, int offset, int binding, int index, int set, int builtin,
+ int inputAttachmentIndex)
+ : fFlags(flags)
+ , fLocation(location)
+ , fOffset(offset)
+ , fBinding(binding)
+ , fIndex(index)
+ , fSet(set)
+ , fBuiltin(builtin)
+ , fInputAttachmentIndex(inputAttachmentIndex) {}
+
+ Layout() = default;
+
+ static Layout builtin(int builtin) {
+ Layout result;
+ result.fBuiltin = builtin;
+ return result;
+ }
+
+ std::string description() const;
+
+ bool operator==(const Layout& other) const;
+
+ bool operator!=(const Layout& other) const {
+ return !(*this == other);
+ }
+
+ int fFlags = 0;
+ int fLocation = -1;
+ int fOffset = -1;
+ int fBinding = -1;
+ int fTexture = -1;
+ int fSampler = -1;
+ int fIndex = -1;
+ int fSet = -1;
+ // builtin comes from SPIR-V and identifies which particular builtin value this object
+ // represents.
+ int fBuiltin = -1;
+ // input_attachment_index comes from Vulkan/SPIR-V to connect a shader variable to the a
+ // corresponding attachment on the subpass in which the shader is being used.
+ int fInputAttachmentIndex = -1;
+};
+
+} // namespace SkSL
+
+#endif