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