From 14b5cac0be15b2a1f6624431ae1b694f3a4487dd Mon Sep 17 00:00:00 2001 From: Alok Hota Date: Fri, 25 May 2018 10:19:45 -0500 Subject: [PATCH] swr/rast: Use metadata to communicate between passes Reviewed-by: Bruce Cherniak --- .../drivers/swr/rasterizer/jitter/builder.h | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/gallium/drivers/swr/rasterizer/jitter/builder.h b/src/gallium/drivers/swr/rasterizer/jitter/builder.h index 6ca128d38f1..08a3a6e4734 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/builder.h +++ b/src/gallium/drivers/swr/rasterizer/jitter/builder.h @@ -124,6 +124,34 @@ namespace SwrJit bool SetTexelMaskEvaluate(Instruction* inst); bool IsTexelMaskEvaluate(Instruction* inst); Type* GetVectorType(Type* pType); + void SetMetadata(StringRef s, uint32_t val) + { + llvm::NamedMDNode *metaData = mpJitMgr->mpCurrentModule->getOrInsertNamedMetadata(s); + Constant* cval = mpIRBuilder->getInt32(val); + llvm::MDNode *mdNode = llvm::MDNode::get(mpJitMgr->mpCurrentModule->getContext(), llvm::ConstantAsMetadata::get(cval)); + if (metaData->getNumOperands()) + { + metaData->setOperand(0, mdNode); + } + else + { + metaData->addOperand(mdNode); + } + } + uint32_t GetMetadata(StringRef s) + { + NamedMDNode* metaData = mpJitMgr->mpCurrentModule->getNamedMetadata(s); + if (metaData) + { + MDNode* mdNode = metaData->getOperand(0); + Metadata* val = mdNode->getOperand(0); + return mdconst::dyn_extract(val)->getZExtValue(); + } + else + { + return 0; + } + } #include "gen_builder.hpp" #include "gen_builder_meta.hpp" -- 2.30.2