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