1 /* 2 * Copyright 2021 Google LLC. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SKSL_DSL_LAYOUT 9 #define SKSL_DSL_LAYOUT 10 11 #include "include/sksl/DSLLayout.h" 12 13 #include "include/private/SkSLLayout.h" 14 #include "include/sksl/DSLErrorHandling.h" 15 16 namespace SkSL { 17 18 namespace dsl { 19 20 class DSLLayout { 21 public: 22 DSLLayout& originUpperLeft(PositionInfo pos = PositionInfo()) { 23 return this->flag(SkSL::Layout::kOriginUpperLeft_Flag, "origin_upper_left", pos); 24 } 25 26 DSLLayout& overrideCoverage(PositionInfo pos = PositionInfo()) { 27 return this->flag(SkSL::Layout::kOverrideCoverage_Flag, "override_coverage", pos); 28 } 29 30 DSLLayout& pushConstant(PositionInfo pos = PositionInfo()) { 31 return this->flag(SkSL::Layout::kPushConstant_Flag, "push_constant", pos); 32 } 33 34 DSLLayout& blendSupportAllEquations(PositionInfo pos = PositionInfo()) { 35 return this->flag(SkSL::Layout::kBlendSupportAllEquations_Flag, 36 "blend_support_all_equations", pos); 37 } 38 39 DSLLayout& srgbUnpremul(PositionInfo pos = PositionInfo()) { 40 return this->flag(SkSL::Layout::kSRGBUnpremul_Flag, "srgb_unpremul", pos); 41 } 42 43 DSLLayout& location(int location, PositionInfo pos = PositionInfo()) { 44 return this->intValue(&fSkSLLayout.fLocation, location, SkSL::Layout::kLocation_Flag, 45 "location", pos); 46 } 47 48 DSLLayout& offset(int offset, PositionInfo pos = PositionInfo()) { 49 return this->intValue(&fSkSLLayout.fOffset, offset, SkSL::Layout::kOffset_Flag, "offset", 50 pos); 51 } 52 53 DSLLayout& binding(int binding, PositionInfo pos = PositionInfo()) { 54 return this->intValue(&fSkSLLayout.fBinding, binding, SkSL::Layout::kBinding_Flag, 55 "binding", pos); 56 } 57 58 DSLLayout& index(int index, PositionInfo pos = PositionInfo()) { 59 return this->intValue(&fSkSLLayout.fIndex, index, SkSL::Layout::kIndex_Flag, "index", pos); 60 } 61 62 DSLLayout& set(int set, PositionInfo pos = PositionInfo()) { 63 return this->intValue(&fSkSLLayout.fSet, set, SkSL::Layout::kSet_Flag, "set", pos); 64 } 65 66 DSLLayout& builtin(int builtin, PositionInfo pos = PositionInfo()) { 67 return this->intValue(&fSkSLLayout.fBuiltin, builtin, SkSL::Layout::kBuiltin_Flag, 68 "builtin", pos); 69 } 70 71 DSLLayout& inputAttachmentIndex(int inputAttachmentIndex, PositionInfo pos = PositionInfo()) { 72 return this->intValue(&fSkSLLayout.fInputAttachmentIndex, inputAttachmentIndex, 73 SkSL::Layout::kInputAttachmentIndex_Flag, "input_attachment_index", 74 pos); 75 } 76 77 private: 78 DSLLayout& flag(SkSL::Layout::Flag mask, const char* name, PositionInfo pos); 79 80 DSLLayout& intValue(int* target, int value, SkSL::Layout::Flag flag, const char* name, 81 PositionInfo pos); 82 83 SkSL::Layout fSkSLLayout; 84 85 friend class DSLModifiers; 86 }; 87 88 } // namespace dsl 89 90 } // namespace SkSL 91 92 #endif 93