Path: blob/21.2-virgl/src/gallium/drivers/swr/rasterizer/jitter/builder.h
4574 views
/****************************************************************************1* Copyright (C) 2014-2015 Intel Corporation. All Rights Reserved.2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice (including the next11* paragraph) shall be included in all copies or substantial portions of the12* Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING19* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS20* IN THE SOFTWARE.21*22* @file builder.h23*24* @brief Includes all the builder related functionality25*26* Notes:27*28******************************************************************************/29#pragma once3031#include "JitManager.h"32#include "common/formats.h"3334namespace SwrJit35{36///@todo Move this to better place37enum SHADER_STATS_COUNTER_TYPE38{39STATS_INST_EXECUTED = 0,40STATS_SAMPLE_EXECUTED = 1,41STATS_SAMPLE_L_EXECUTED = 2,42STATS_SAMPLE_B_EXECUTED = 3,43STATS_SAMPLE_C_EXECUTED = 4,44STATS_SAMPLE_C_LZ_EXECUTED = 5,45STATS_SAMPLE_C_D_EXECUTED = 6,46STATS_LOD_EXECUTED = 7,47STATS_GATHER4_EXECUTED = 8,48STATS_GATHER4_C_EXECUTED = 9,49STATS_GATHER4_C_PO_EXECUTED = 10,50STATS_GATHER4_C_PO_C_EXECUTED = 11,51STATS_LOAD_RAW_UAV = 12,52STATS_LOAD_RAW_RESOURCE = 13,53STATS_STORE_RAW_UAV = 14,54STATS_STORE_TGSM = 15,55STATS_DISCARD = 16,56STATS_BARRIER = 17,5758// ------------------59STATS_TOTAL_COUNTERS60};6162using namespace llvm;63struct Builder64{65Builder(JitManager* pJitMgr);66virtual ~Builder() {}6768IRBuilder<>* IRB() { return mpIRBuilder; };69JitManager* JM() { return mpJitMgr; }7071JitManager* mpJitMgr;72IRBuilder<>* mpIRBuilder;7374uint32_t mVWidth; // vector width target simd75uint32_t mVWidth16; // vector width simd167677// Built in types: scalar7879Type* mVoidTy;80Type* mHandleTy;81Type* mInt1Ty;82Type* mInt8Ty;83Type* mInt16Ty;84Type* mInt32Ty;85Type* mInt64Ty;86Type* mIntPtrTy;87Type* mFP16Ty;88Type* mFP32Ty;89Type* mFP32PtrTy;90Type* mDoubleTy;91Type* mInt8PtrTy;92Type* mInt16PtrTy;93Type* mInt32PtrTy;94Type* mInt64PtrTy;9596Type* mSimd4FP64Ty;9798// Built in types: target SIMD99100Type* mSimdFP16Ty;101Type* mSimdFP32Ty;102Type* mSimdInt1Ty;103Type* mSimdInt16Ty;104Type* mSimdInt32Ty;105Type* mSimdInt64Ty;106Type* mSimdIntPtrTy;107Type* mSimdVectorTy;108Type* mSimdVectorTRTy;109Type* mSimdVectorIntTy;110Type* mSimdVectorTRIntTy;111112// Built in types: simd16113114Type* mSimd16FP16Ty;115Type* mSimd16FP32Ty;116Type* mSimd16Int1Ty;117Type* mSimd16Int16Ty;118Type* mSimd16Int32Ty;119Type* mSimd16Int64Ty;120Type* mSimd16IntPtrTy;121Type* mSimd16VectorTy;122Type* mSimd16VectorTRTy;123124Type* mSimd32Int8Ty;125126void SetTargetWidth(uint32_t width);127void SetTempAlloca(Value* inst);128bool IsTempAlloca(Value* inst);129bool SetNamedMetaDataOnCallInstr(Instruction* inst, StringRef mdName);130bool HasNamedMetaDataOnCallInstr(Instruction* inst, StringRef mdName);131Type* GetVectorType(Type* pType);132void SetMetadata(StringRef s, uint32_t val)133{134llvm::NamedMDNode* metaData = mpJitMgr->mpCurrentModule->getOrInsertNamedMetadata(s);135Constant* cval = mpIRBuilder->getInt32(val);136llvm::MDNode* mdNode = llvm::MDNode::get(mpJitMgr->mpCurrentModule->getContext(),137llvm::ConstantAsMetadata::get(cval));138if (metaData->getNumOperands())139{140metaData->setOperand(0, mdNode);141}142else143{144metaData->addOperand(mdNode);145}146}147uint32_t GetMetadata(StringRef s)148{149NamedMDNode* metaData = mpJitMgr->mpCurrentModule->getNamedMetadata(s);150if (metaData)151{152MDNode* mdNode = metaData->getOperand(0);153Metadata* val = mdNode->getOperand(0);154return mdconst::dyn_extract<ConstantInt>(val)->getZExtValue();155}156else157{158return 0;159}160}161162#include "gen_builder.hpp"163#include "gen_builder_meta.hpp"164#include "gen_builder_intrin.hpp"165#include "builder_misc.h"166#include "builder_math.h"167#include "builder_mem.h"168169void SetPrivateContext(Value* pPrivateContext)170{171mpPrivateContext = pPrivateContext;172NotifyPrivateContextSet();173}174virtual void NotifyPrivateContextSet() {}175inline Value* GetPrivateContext() { return mpPrivateContext; }176177private:178Value* mpPrivateContext;179};180} // namespace SwrJit181182183