diff options
Diffstat (limited to 'gfx/skia/skia/include/private/SkSLLayout.h')
-rw-r--r-- | gfx/skia/skia/include/private/SkSLLayout.h | 93 |
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 |