brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · c55f680 Raw
55 lines · c
1//===- HLSLBufferLayoutBuilder.h ------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "clang/AST/TypeBase.h"10#include "llvm/ADT/StringRef.h"11#include "llvm/IR/DerivedTypes.h"12 13namespace clang {14namespace CodeGen {15class CGHLSLOffsetInfo;16class CodeGenModule;17class CGHLSLOffsetInfo;18 19//===----------------------------------------------------------------------===//20// Implementation of constant buffer layout common between DirectX and21// SPIR/SPIR-V.22//===----------------------------------------------------------------------===//23 24class HLSLBufferLayoutBuilder {25private:26  CodeGenModule &CGM;27 28public:29  HLSLBufferLayoutBuilder(CodeGenModule &CGM) : CGM(CGM) {}30 31  /// Lays out a struct type following HLSL buffer rules and considering any32  /// explicit offset information. Previously created layout structs are cached33  /// by CGHLSLRuntime.34  ///35  /// The function iterates over all fields of the record type (including base36  /// classes) and works out a padded llvm type to represent the buffer layout.37  ///38  /// If a non-empty OffsetInfo is provided (ie, from `packoffset` annotations39  /// in the source), any provided offsets offsets will be respected. If the40  /// OffsetInfo is available but has empty entries, those will be layed out at41  /// the end of the structure.42  llvm::StructType *layOutStruct(const RecordType *StructType,43                                 const CGHLSLOffsetInfo &OffsetInfo);44 45  /// Lays out an array type following HLSL buffer rules.46  llvm::Type *layOutArray(const ConstantArrayType *AT);47 48  /// Lays out a type following HLSL buffer rules. Arrays and structures will be49  /// padded appropriately and nested objects will be converted as appropriate.50  llvm::Type *layOutType(QualType Type);51};52 53} // namespace CodeGen54} // namespace clang55