LayoutFlags backendFlags = layoutFlags & LayoutFlag::kAllBackends; if (SkPopCount(backendFlags.value()) > 1) {
context.fErrors->error(pos, "only one backend qualifier can be used");
success = false;
}
LayoutFlags pixelFormatFlags = layoutFlags & LayoutFlag::kAllPixelFormats; if (SkPopCount(pixelFormatFlags.value()) > 1) {
context.fErrors->error(pos, "only one pixel format qualifier can be used");
success = false;
}
if ((layoutFlags & (LayoutFlag::kTexture | LayoutFlag::kSampler)) &&
layoutFlags & LayoutFlag::kBinding) {
context.fErrors->error(pos, "'binding' modifier cannot coexist with 'texture'/'sampler'");
success = false;
} // The `texture` and `sampler` flags are only allowed when targeting Metal, WebGPU or Direct3D. if (!(layoutFlags & (LayoutFlag::kMetal | LayoutFlag::kWebGPU | LayoutFlag::kDirect3D))) {
permittedLayoutFlags &= ~LayoutFlag::kTexture;
permittedLayoutFlags &= ~LayoutFlag::kSampler;
} // The `push_constant` flag is only allowed when targeting Vulkan or WebGPU. if (!(layoutFlags & (LayoutFlag::kVulkan | LayoutFlag::kWebGPU))) {
permittedLayoutFlags &= ~LayoutFlag::kPushConstant;
} // The `set` flag is not allowed when explicitly targeting Metal. if (layoutFlags & LayoutFlag::kMetal) {
permittedLayoutFlags &= ~LayoutFlag::kSet;
}
for (constauto& lf : kLayoutFlags) { if (layoutFlags & lf.flag) { if (!(permittedLayoutFlags & lf.flag)) {
context.fErrors->error(pos, "layout qualifier '" + std::string(lf.name) + "' is not permitted here");
success = false;
}
layoutFlags &= ~lf.flag;
}
}
SkASSERT(layoutFlags == LayoutFlag::kNone); return success;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.