diff options
author | 2022-04-03 16:34:10 -0700 | |
---|---|---|
committer | 2022-04-03 16:34:10 -0700 | |
commit | a87508008dfa1604baf2d4e39bf44704c00f261c (patch) | |
tree | 0be2ade96772037a02803b30e157c367d931e3d9 /src/deps/skia/include/private/SkSLLayout.h | |
parent | 4a19a3f07f1887903e5638a3be167f0c7b377ba3 (diff) | |
download | bun-jarred/canvas.tar.gz bun-jarred/canvas.tar.zst bun-jarred/canvas.zip |
skia WIPjarred/canvas
Diffstat (limited to '')
-rw-r--r-- | src/deps/skia/include/private/SkSLLayout.h | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/src/deps/skia/include/private/SkSLLayout.h b/src/deps/skia/include/private/SkSLLayout.h new file mode 100644 index 000000000..d3654dd43 --- /dev/null +++ b/src/deps/skia/include/private/SkSLLayout.h @@ -0,0 +1,143 @@ +/* + * 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 "include/private/SkSLString.h" + +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, + kIndex_Flag = 1 << 7, + kSet_Flag = 1 << 8, + kBuiltin_Flag = 1 << 9, + kInputAttachmentIndex_Flag = 1 << 10, + }; + + 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() + : fFlags(0) + , fLocation(-1) + , fOffset(-1) + , fBinding(-1) + , fIndex(-1) + , fSet(-1) + , fBuiltin(-1) + , fInputAttachmentIndex(-1) {} + + static Layout builtin(int builtin) { + Layout result; + result.fBuiltin = builtin; + return result; + } + + String description() const { + String result; + auto separator = [firstSeparator = true]() mutable -> String { + if (firstSeparator) { + firstSeparator = false; + return ""; + } else { + return ", "; + }}; + if (fLocation >= 0) { + result += separator() + "location = " + to_string(fLocation); + } + if (fOffset >= 0) { + result += separator() + "offset = " + to_string(fOffset); + } + if (fBinding >= 0) { + result += separator() + "binding = " + to_string(fBinding); + } + if (fIndex >= 0) { + result += separator() + "index = " + to_string(fIndex); + } + if (fSet >= 0) { + result += separator() + "set = " + to_string(fSet); + } + if (fBuiltin >= 0) { + result += separator() + "builtin = " + to_string(fBuiltin); + } + if (fInputAttachmentIndex >= 0) { + result += separator() + "input_attachment_index = " + to_string(fInputAttachmentIndex); + } + if (fFlags & kOriginUpperLeft_Flag) { + result += separator() + "origin_upper_left"; + } + if (fFlags & kBlendSupportAllEquations_Flag) { + result += separator() + "blend_support_all_equations"; + } + if (fFlags & kPushConstant_Flag) { + result += separator() + "push_constant"; + } + if (fFlags & kColor_Flag) { + result += separator() + "color"; + } + if (result.size() > 0) { + result = "layout (" + result + ")"; + } + return result; + } + + bool operator==(const Layout& other) const { + return fFlags == other.fFlags && + fLocation == other.fLocation && + fOffset == other.fOffset && + fBinding == other.fBinding && + fIndex == other.fIndex && + fSet == other.fSet && + fBuiltin == other.fBuiltin && + fInputAttachmentIndex == other.fInputAttachmentIndex; + } + + bool operator!=(const Layout& other) const { + return !(*this == other); + } + + int fFlags; + int fLocation; + int fOffset; + int fBinding; + int fIndex; + int fSet; + // builtin comes from SPIR-V and identifies which particular builtin value this object + // represents. + int fBuiltin; + // 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; +}; + +} // namespace SkSL + +#endif |