-
Notifications
You must be signed in to change notification settings - Fork 170
/
Copy pathigc_resourceDimTypes.h
71 lines (59 loc) · 2.64 KB
/
igc_resourceDimTypes.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*========================== begin_copyright_notice ============================
Copyright (C) 2018-2021 Intel Corporation
SPDX-License-Identifier: MIT
============================= end_copyright_notice ===========================*/
#pragma once
#include "common/LLVMWarningsPush.hpp"
#include <llvm/IR/Module.h>
#include <llvm/IR/IRBuilder.h>
#include "common/LLVMWarningsPop.hpp"
#include "Probe/Assertion.h"
namespace IGC
{
enum RESOURCE_DIMENSION_TYPE
{
DIM_TYPED_BUFFER_TYPE = 0,
DIM_1D_TYPE,
DIM_1D_ARRAY_TYPE,
DIM_2D_TYPE,
DIM_2D_ARRAY_TYPE,
DIM_3D_TYPE,
DIM_CUBE_TYPE,
DIM_CUBE_ARRAY_TYPE,
NUM_RESOURCE_DIMENSION_TYPES
};
const char * const ResourceDimensionTypeName[RESOURCE_DIMENSION_TYPE::NUM_RESOURCE_DIMENSION_TYPES] =
{ "__Buffer_Typed_DIM_Resource",
"__1D_DIM_Resource", "__1D_ARRAY_DIM_Resource",
"__2D_DIM_Resource", "__2D_ARRAY_DIM_Resource",
"__3D_DIM_Resource", "__Cube_DIM_Resource", "__Cube_ARRAY_DIM_Resource" };
inline llvm::Type* CreateResourceDimensionType(llvm::LLVMContext& llvmCtx, RESOURCE_DIMENSION_TYPE resourceDimType)
{
return llvm::StructType::create(llvmCtx, ResourceDimensionTypeName[resourceDimType]);
}
inline void CreateResourceDimensionTypes(llvm::LLVMContext& llvmCtx)
{
for (unsigned int resourceDimTypeId = 0; resourceDimTypeId < (unsigned int)RESOURCE_DIMENSION_TYPE::NUM_RESOURCE_DIMENSION_TYPES; resourceDimTypeId++)
{
CreateResourceDimensionType(llvmCtx, static_cast<RESOURCE_DIMENSION_TYPE>(resourceDimTypeId));
}
}
inline llvm::Type* GetResourceDimensionType(const llvm::Module& module, RESOURCE_DIMENSION_TYPE resourceDimTypeId)
{
IGC_ASSERT((resourceDimTypeId == DIM_TYPED_BUFFER_TYPE ||
resourceDimTypeId == DIM_1D_TYPE || resourceDimTypeId == DIM_1D_ARRAY_TYPE ||
resourceDimTypeId == DIM_2D_TYPE || resourceDimTypeId == DIM_2D_ARRAY_TYPE ||
resourceDimTypeId == DIM_3D_TYPE || resourceDimTypeId == DIM_CUBE_TYPE || resourceDimTypeId == DIM_CUBE_ARRAY_TYPE));
llvm::LLVMContext& llvmCtx = module.getContext();
return llvm::StructType::getTypeByName(llvmCtx, ResourceDimensionTypeName[resourceDimTypeId]);
}
inline llvm::Type* GetOrCreateResourceDimensionType(const llvm::Module& module, RESOURCE_DIMENSION_TYPE resourceDimTypeId)
{
llvm::Type* pRet = GetResourceDimensionType(module, resourceDimTypeId);
if (pRet == nullptr)
{
pRet = CreateResourceDimensionType(module.getContext(), resourceDimTypeId);
}
return pRet;
}
}