xref: /llvm-project/llvm/include/llvm/Support/DXILABI.h (revision e41579a31f77008eb76c418df5d192d0974421d2)
1db6bf921SJustin Bogner //===-- DXILABI.h - ABI Sensitive Values for DXIL ---------------*- C++ -*-===//
2db6bf921SJustin Bogner //
3db6bf921SJustin Bogner // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4db6bf921SJustin Bogner // See https://llvm.org/LICENSE.txt for license information.
5db6bf921SJustin Bogner // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6db6bf921SJustin Bogner //
7db6bf921SJustin Bogner //===----------------------------------------------------------------------===//
8db6bf921SJustin Bogner //
9db6bf921SJustin Bogner // This file contains definitions of various constants and enums that are
10db6bf921SJustin Bogner // required to remain stable as per the DXIL format's requirements.
11db6bf921SJustin Bogner //
12db6bf921SJustin Bogner // Documentation for DXIL can be found in
13db6bf921SJustin Bogner // https://github.com/Microsoft/DirectXShaderCompiler/blob/main/docs/DXIL.rst.
14db6bf921SJustin Bogner //
15db6bf921SJustin Bogner //===----------------------------------------------------------------------===//
16db6bf921SJustin Bogner 
17db6bf921SJustin Bogner #ifndef LLVM_SUPPORT_DXILABI_H
18db6bf921SJustin Bogner #define LLVM_SUPPORT_DXILABI_H
19db6bf921SJustin Bogner 
202c435b80SJustin Bogner #include <cstdint>
21db6bf921SJustin Bogner 
22db6bf921SJustin Bogner namespace llvm {
23db6bf921SJustin Bogner namespace dxil {
24db6bf921SJustin Bogner 
2539048b69SJustin Bogner enum class ResourceClass : uint8_t {
2639048b69SJustin Bogner   SRV = 0,
2739048b69SJustin Bogner   UAV,
2839048b69SJustin Bogner   CBuffer,
2939048b69SJustin Bogner   Sampler,
3039048b69SJustin Bogner };
3139048b69SJustin Bogner 
32ad713186SJustin Bogner /// The kind of resource for an SRV or UAV resource. Sometimes referred to as
33ad713186SJustin Bogner /// "Shape" in the DXIL docs.
34ad713186SJustin Bogner enum class ResourceKind : uint32_t {
35ad713186SJustin Bogner   Invalid = 0,
36ad713186SJustin Bogner   Texture1D,
37ad713186SJustin Bogner   Texture2D,
38ad713186SJustin Bogner   Texture2DMS,
39ad713186SJustin Bogner   Texture3D,
40ad713186SJustin Bogner   TextureCube,
41ad713186SJustin Bogner   Texture1DArray,
42ad713186SJustin Bogner   Texture2DArray,
43ad713186SJustin Bogner   Texture2DMSArray,
44ad713186SJustin Bogner   TextureCubeArray,
45ad713186SJustin Bogner   TypedBuffer,
46ad713186SJustin Bogner   RawBuffer,
47ad713186SJustin Bogner   StructuredBuffer,
48ad713186SJustin Bogner   CBuffer,
49ad713186SJustin Bogner   Sampler,
50ad713186SJustin Bogner   TBuffer,
51ad713186SJustin Bogner   RTAccelerationStructure,
52ad713186SJustin Bogner   FeedbackTexture2D,
53ad713186SJustin Bogner   FeedbackTexture2DArray,
54ad713186SJustin Bogner   NumEntries,
55ad713186SJustin Bogner };
56ad713186SJustin Bogner 
57ad713186SJustin Bogner /// The element type of an SRV or UAV resource.
58ad713186SJustin Bogner enum class ElementType : uint32_t {
59ad713186SJustin Bogner   Invalid = 0,
60ad713186SJustin Bogner   I1,
61ad713186SJustin Bogner   I16,
62ad713186SJustin Bogner   U16,
63ad713186SJustin Bogner   I32,
64ad713186SJustin Bogner   U32,
65ad713186SJustin Bogner   I64,
66ad713186SJustin Bogner   U64,
67ad713186SJustin Bogner   F16,
68ad713186SJustin Bogner   F32,
69ad713186SJustin Bogner   F64,
70ad713186SJustin Bogner   SNormF16,
71ad713186SJustin Bogner   UNormF16,
72ad713186SJustin Bogner   SNormF32,
73ad713186SJustin Bogner   UNormF32,
74ad713186SJustin Bogner   SNormF64,
75ad713186SJustin Bogner   UNormF64,
76ad713186SJustin Bogner   PackedS8x32,
77ad713186SJustin Bogner   PackedU8x32,
78ad713186SJustin Bogner };
79ad713186SJustin Bogner 
8048f55ba9SJustin Bogner /// Metadata tags for extra resource properties.
8148f55ba9SJustin Bogner enum class ExtPropTags : uint32_t {
8248f55ba9SJustin Bogner   ElementType = 0,
8348f55ba9SJustin Bogner   StructuredBufferStride = 1,
8448f55ba9SJustin Bogner   SamplerFeedbackKind = 2,
8548f55ba9SJustin Bogner   Atomic64Use = 3,
8648f55ba9SJustin Bogner };
8748f55ba9SJustin Bogner 
8848f55ba9SJustin Bogner enum class SamplerType : uint32_t {
8948f55ba9SJustin Bogner   Default = 0,
9048f55ba9SJustin Bogner   Comparison = 1,
9148f55ba9SJustin Bogner   Mono = 2, // Note: Seems to be unused.
9248f55ba9SJustin Bogner };
9348f55ba9SJustin Bogner 
9448f55ba9SJustin Bogner enum class SamplerFeedbackType : uint32_t {
9548f55ba9SJustin Bogner   MinMip = 0,
9648f55ba9SJustin Bogner   MipRegionUsed = 1,
9748f55ba9SJustin Bogner };
9848f55ba9SJustin Bogner 
99*e41579a3SXiang Li const unsigned MinWaveSize = 4;
100*e41579a3SXiang Li const unsigned MaxWaveSize = 128;
101*e41579a3SXiang Li 
102db6bf921SJustin Bogner } // namespace dxil
103db6bf921SJustin Bogner } // namespace llvm
104db6bf921SJustin Bogner 
105db6bf921SJustin Bogner #endif // LLVM_SUPPORT_DXILABI_H
106