1972a253aSDimitry Andric //===-- DXILOperationCommon.h - DXIL Operation ------------------*- C++ -*-===//
2972a253aSDimitry Andric //
3972a253aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4972a253aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5972a253aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6972a253aSDimitry Andric //
7972a253aSDimitry Andric //===----------------------------------------------------------------------===//
8972a253aSDimitry Andric //
9972a253aSDimitry Andric // This file is created to share common definitions used by both the
10972a253aSDimitry Andric // DXILOpBuilder and the table
11972a253aSDimitry Andric //  generator.
12972a253aSDimitry Andric // Documentation for DXIL can be found in
13972a253aSDimitry Andric // https://github.com/Microsoft/DirectXShaderCompiler/blob/main/docs/DXIL.rst.
14972a253aSDimitry Andric //
15972a253aSDimitry Andric //===----------------------------------------------------------------------===//
16972a253aSDimitry Andric 
17972a253aSDimitry Andric #ifndef LLVM_SUPPORT_DXILOPERATIONCOMMON_H
18972a253aSDimitry Andric #define LLVM_SUPPORT_DXILOPERATIONCOMMON_H
19972a253aSDimitry Andric 
20972a253aSDimitry Andric #include "llvm/ADT/StringSwitch.h"
21972a253aSDimitry Andric 
22972a253aSDimitry Andric namespace llvm {
23*bdd1243dSDimitry Andric namespace dxil {
24972a253aSDimitry Andric 
25972a253aSDimitry Andric enum class ParameterKind : uint8_t {
26972a253aSDimitry Andric   INVALID = 0,
27972a253aSDimitry Andric   VOID,
28972a253aSDimitry Andric   HALF,
29972a253aSDimitry Andric   FLOAT,
30972a253aSDimitry Andric   DOUBLE,
31972a253aSDimitry Andric   I1,
32972a253aSDimitry Andric   I8,
33972a253aSDimitry Andric   I16,
34972a253aSDimitry Andric   I32,
35972a253aSDimitry Andric   I64,
36972a253aSDimitry Andric   OVERLOAD,
37972a253aSDimitry Andric   CBUFFER_RET,
38972a253aSDimitry Andric   RESOURCE_RET,
39972a253aSDimitry Andric   DXIL_HANDLE,
40972a253aSDimitry Andric };
41972a253aSDimitry Andric 
parameterTypeNameToKind(StringRef Name)42972a253aSDimitry Andric inline ParameterKind parameterTypeNameToKind(StringRef Name) {
43972a253aSDimitry Andric   return StringSwitch<ParameterKind>(Name)
44972a253aSDimitry Andric       .Case("void", ParameterKind::VOID)
45972a253aSDimitry Andric       .Case("half", ParameterKind::HALF)
46972a253aSDimitry Andric       .Case("float", ParameterKind::FLOAT)
47972a253aSDimitry Andric       .Case("double", ParameterKind::DOUBLE)
48972a253aSDimitry Andric       .Case("i1", ParameterKind::I1)
49972a253aSDimitry Andric       .Case("i8", ParameterKind::I8)
50972a253aSDimitry Andric       .Case("i16", ParameterKind::I16)
51972a253aSDimitry Andric       .Case("i32", ParameterKind::I32)
52972a253aSDimitry Andric       .Case("i64", ParameterKind::I64)
53972a253aSDimitry Andric       .Case("$o", ParameterKind::OVERLOAD)
54972a253aSDimitry Andric       .Case("dx.types.Handle", ParameterKind::DXIL_HANDLE)
55972a253aSDimitry Andric       .Case("dx.types.CBufRet", ParameterKind::CBUFFER_RET)
56972a253aSDimitry Andric       .Case("dx.types.ResRet", ParameterKind::RESOURCE_RET)
57972a253aSDimitry Andric       .Default(ParameterKind::INVALID);
58972a253aSDimitry Andric }
59972a253aSDimitry Andric 
60*bdd1243dSDimitry Andric } // namespace dxil
61972a253aSDimitry Andric } // namespace llvm
62972a253aSDimitry Andric 
63972a253aSDimitry Andric #endif
64