| //===- HLSLResource.cpp - HLSL Resource helper objects --------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| /// | |
| /// \file This file contains helper objects for working with HLSL Resources. | |
| /// | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/Frontend/HLSL/HLSLResource.h" | |
| #include "llvm/IR/IRBuilder.h" | |
| #include "llvm/IR/Metadata.h" | |
| #include "llvm/IR/Module.h" | |
| using namespace llvm; | |
| using namespace llvm::hlsl; | |
| GlobalVariable *FrontendResource::getGlobalVariable() { | |
| return cast<GlobalVariable>( | |
| cast<ConstantAsMetadata>(Entry->getOperand(0))->getValue()); | |
| } | |
| StringRef FrontendResource::getSourceType() { | |
| return cast<MDString>(Entry->getOperand(1))->getString(); | |
| } | |
| uint32_t FrontendResource::FrontendResource::getResourceKind() { | |
| return cast<ConstantInt>( | |
| cast<ConstantAsMetadata>(Entry->getOperand(2))->getValue()) | |
| ->getLimitedValue(); | |
| } | |
| uint32_t FrontendResource::getResourceIndex() { | |
| return cast<ConstantInt>( | |
| cast<ConstantAsMetadata>(Entry->getOperand(3))->getValue()) | |
| ->getLimitedValue(); | |
| } | |
| uint32_t FrontendResource::getSpace() { | |
| return cast<ConstantInt>( | |
| cast<ConstantAsMetadata>(Entry->getOperand(4))->getValue()) | |
| ->getLimitedValue(); | |
| } | |
| FrontendResource::FrontendResource(GlobalVariable *GV, StringRef TypeStr, | |
| ResourceKind RK, uint32_t ResIndex, | |
| uint32_t Space) { | |
| auto &Ctx = GV->getContext(); | |
| IRBuilder<> B(Ctx); | |
| Entry = MDNode::get( | |
| Ctx, {ValueAsMetadata::get(GV), MDString::get(Ctx, TypeStr), | |
| ConstantAsMetadata::get(B.getInt32(static_cast<int>(RK))), | |
| ConstantAsMetadata::get(B.getInt32(ResIndex)), | |
| ConstantAsMetadata::get(B.getInt32(Space))}); | |
| } |