Skip to content

Commit 8b123b2

Browse files
committed
Add DXIL_MODULE_FLAG into DXContainerConstants.def to avoid dup.
1 parent 50136ca commit 8b123b2

File tree

10 files changed

+90
-56
lines changed

10 files changed

+90
-56
lines changed

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ enum class PartType {
141141
#include "DXContainerConstants.def"
142142
};
143143

144-
#define SHADER_FEATURE_FLAG(Num, Val, Str) Val = 1ull << Num,
144+
#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) Val = 1ull << Num,
145145
enum class FeatureFlags : uint64_t {
146146
#include "DXContainerConstants.def"
147147
};

llvm/include/llvm/BinaryFormat/DXContainerConstants.def

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,58 @@ CONTAINER_PART(PSG1)
1313

1414
#ifdef SHADER_FEATURE_FLAG
1515

16-
SHADER_FEATURE_FLAG(0, Doubles, "Double-precision floating point")
17-
SHADER_FEATURE_FLAG(1, ComputeShadersPlusRawAndStructuredBuffers, "Raw and Structured buffers")
18-
SHADER_FEATURE_FLAG(2, UAVsAtEveryStage, "UAVs at every shader stage")
19-
SHADER_FEATURE_FLAG(3, Max64UAVs, "64 UAV slots")
20-
SHADER_FEATURE_FLAG(4, MinimumPrecision, "Minimum-precision data types")
21-
SHADER_FEATURE_FLAG(5, DX11_1_DoubleExtensions, "Double-precision extensions for 11.1")
22-
SHADER_FEATURE_FLAG(6, DX11_1_ShaderExtensions, "Shader extensions for 11.1")
23-
SHADER_FEATURE_FLAG(7, LEVEL9ComparisonFiltering, "Comparison filtering for feature level 9")
24-
SHADER_FEATURE_FLAG(8, TiledResources, "Tiled resources")
25-
SHADER_FEATURE_FLAG(9, StencilRef, "PS Output Stencil Ref")
26-
SHADER_FEATURE_FLAG(10, InnerCoverage, "PS Inner Coverage")
27-
SHADER_FEATURE_FLAG(11, TypedUAVLoadAdditionalFormats, "Typed UAV Load Additional Formats")
28-
SHADER_FEATURE_FLAG(12, ROVs, "Raster Ordered UAVs")
29-
SHADER_FEATURE_FLAG(13, ViewportAndRTArrayIndexFromAnyShaderFeedingRasterizer, "SV_RenderTargetArrayIndex or SV_ViewportArrayIndex from any shader feeding rasterizer")
30-
SHADER_FEATURE_FLAG(14, WaveOps, "Wave level operations")
31-
SHADER_FEATURE_FLAG(15, Int64Ops, "64-Bit integer")
32-
SHADER_FEATURE_FLAG(16, ViewID, "View Instancing")
33-
SHADER_FEATURE_FLAG(17, Barycentrics, "Barycentrics")
34-
SHADER_FEATURE_FLAG(18, NativeLowPrecision, "Use native low precision")
35-
SHADER_FEATURE_FLAG(19, ShadingRate, "Shading Rate")
36-
SHADER_FEATURE_FLAG(20, Raytracing_Tier_1_1, "Raytracing tier 1.1 features")
37-
SHADER_FEATURE_FLAG(21, SamplerFeedback, "Sampler feedback")
38-
SHADER_FEATURE_FLAG(22, AtomicInt64OnTypedResource, "64-bit Atomics on Typed Resources")
39-
SHADER_FEATURE_FLAG(23, AtomicInt64OnGroupShared, "64-bit Atomics on Group Shared")
40-
SHADER_FEATURE_FLAG(24, DerivativesInMeshAndAmpShaders, "Derivatives in mesh and amplification shaders")
41-
SHADER_FEATURE_FLAG(25, ResourceDescriptorHeapIndexing, "Resource descriptor heap indexing")
42-
SHADER_FEATURE_FLAG(26, SamplerDescriptorHeapIndexing, "Sampler descriptor heap indexing")
43-
SHADER_FEATURE_FLAG(27, RESERVED, "<RESERVED>")
44-
SHADER_FEATURE_FLAG(28, AtomicInt64OnHeapResource, "64-bit Atomics on Heap Resources")
45-
SHADER_FEATURE_FLAG(29, AdvancedTextureOps, "Advanced Texture Ops")
46-
SHADER_FEATURE_FLAG(30, WriteableMSAATextures, "Writeable MSAA Textures")
47-
48-
SHADER_FEATURE_FLAG(31, NextUnusedBit, "Next reserved shader flag bit (not a flag)")
16+
// SHADER_FEATURE_FLAG(bit offset for the flag, bit offset for DXIL module flag, name, description.
17+
18+
SHADER_FEATURE_FLAG(0, 2, Doubles, "Double-precision floating point")
19+
SHADER_FEATURE_FLAG(1, 4, ComputeShadersPlusRawAndStructuredBuffers, "Raw and Structured buffers")
20+
SHADER_FEATURE_FLAG(2, 16, UAVsAtEveryStage, "UAVs at every shader stage")
21+
SHADER_FEATURE_FLAG(3, 15, Max64UAVs, "64 UAV slots")
22+
SHADER_FEATURE_FLAG(4, 5, MinimumPrecision, "Minimum-precision data types")
23+
SHADER_FEATURE_FLAG(5, 6, DX11_1_DoubleExtensions, "Double-precision extensions for 11.1")
24+
SHADER_FEATURE_FLAG(6, 7, DX11_1_ShaderExtensions, "Shader extensions for 11.1")
25+
SHADER_FEATURE_FLAG(7, 14, LEVEL9ComparisonFiltering, "Comparison filtering for feature level 9")
26+
SHADER_FEATURE_FLAG(8, 12, TiledResources, "Tiled resources")
27+
SHADER_FEATURE_FLAG(9, 11, StencilRef, "PS Output Stencil Ref")
28+
SHADER_FEATURE_FLAG(10, 10, InnerCoverage, "PS Inner Coverage")
29+
SHADER_FEATURE_FLAG(11, 13, TypedUAVLoadAdditionalFormats, "Typed UAV Load Additional Formats")
30+
SHADER_FEATURE_FLAG(12, 18, ROVs, "Raster Ordered UAVs")
31+
SHADER_FEATURE_FLAG(13, 9, ViewportAndRTArrayIndexFromAnyShaderFeedingRasterizer, "SV_RenderTargetArrayIndex or SV_ViewportArrayIndex from any shader feeding rasterizer")
32+
SHADER_FEATURE_FLAG(14, 19, WaveOps, "Wave level operations")
33+
SHADER_FEATURE_FLAG(15, 20, Int64Ops, "64-Bit integer")
34+
SHADER_FEATURE_FLAG(16, 21, ViewID, "View Instancing")
35+
SHADER_FEATURE_FLAG(17, 22, Barycentrics, "Barycentrics")
36+
SHADER_FEATURE_FLAG(18, 23, NativeLowPrecision, "Use native low precision")
37+
SHADER_FEATURE_FLAG(19, 24, ShadingRate, "Shading Rate")
38+
SHADER_FEATURE_FLAG(20, 25, Raytracing_Tier_1_1, "Raytracing tier 1.1 features")
39+
SHADER_FEATURE_FLAG(21, 26, SamplerFeedback, "Sampler feedback")
40+
SHADER_FEATURE_FLAG(22, 27, AtomicInt64OnTypedResource, "64-bit Atomics on Typed Resources")
41+
SHADER_FEATURE_FLAG(23, 28, AtomicInt64OnGroupShared, "64-bit Atomics on Group Shared")
42+
SHADER_FEATURE_FLAG(24, 29, DerivativesInMeshAndAmpShaders, "Derivatives in mesh and amplification shaders")
43+
SHADER_FEATURE_FLAG(25, 30, ResourceDescriptorHeapIndexing, "Resource descriptor heap indexing")
44+
SHADER_FEATURE_FLAG(26, 31, SamplerDescriptorHeapIndexing, "Sampler descriptor heap indexing")
45+
SHADER_FEATURE_FLAG(27, 63, RESERVED, "<RESERVED>")
46+
SHADER_FEATURE_FLAG(28, 32, AtomicInt64OnHeapResource, "64-bit Atomics on Heap Resources")
47+
SHADER_FEATURE_FLAG(29, 34, AdvancedTextureOps, "Advanced Texture Ops")
48+
SHADER_FEATURE_FLAG(30, 35, WriteableMSAATextures, "Writeable MSAA Textures")
49+
50+
SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a flag)")
4951

5052
#undef SHADER_FEATURE_FLAG
5153
#endif
5254

55+
#ifdef DXIL_MODULE_FLAG
56+
57+
// Only save DXIL module flags which not map to feature flags here.
58+
DXIL_MODULE_FLAG( 0, DisableOptimizations, "D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION")
59+
DXIL_MODULE_FLAG( 1, DisableMathRefactoring, "D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED")
60+
DXIL_MODULE_FLAG( 3, ForceEarlyDepthStencil, "D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL")
61+
DXIL_MODULE_FLAG( 8, AllResourcesBound, "D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND")
62+
DXIL_MODULE_FLAG(17, CSRawAndStructuredViaShader4X, "SHADER_FEATURE_COMPUTE_SHADERS_PLUS_RAW_AND_STRUCTURED_BUFFERS_VIA_SHADER_4_X")
63+
DXIL_MODULE_FLAG(33, ResMayNotAlias, "Any UAV may not alias any other UAV")
64+
65+
#undef DXIL_MODULE_FLAG
66+
#endif
67+
5368
#ifdef SEMANTIC_KIND
5469

5570
SEMANTIC_KIND(0, Arbitrary)

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ struct DXILProgram {
5656
std::optional<std::vector<llvm::yaml::Hex8>> DXIL;
5757
};
5858

59-
#define SHADER_FEATURE_FLAG(Num, Val, Str) bool Val = false;
59+
#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) bool Val = false;
6060
struct ShaderFeatureFlags {
6161
ShaderFeatureFlags() = default;
6262
ShaderFeatureFlags(uint64_t FlagData);

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ static_assert((uint64_t)dxbc::FeatureFlags::NextUnusedBit <= 1ull << 63,
2424
"Shader flag bits exceed enum size.");
2525

2626
DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) {
27-
#define SHADER_FEATURE_FLAG(Num, Val, Str) \
27+
#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) \
2828
Val = (FlagData & (uint64_t)dxbc::FeatureFlags::Val) > 0;
2929
#include "llvm/BinaryFormat/DXContainerConstants.def"
3030
}
3131

3232
uint64_t DXContainerYAML::ShaderFeatureFlags::getEncodedFlags() {
3333
uint64_t Flag = 0;
34-
#define SHADER_FEATURE_FLAG(Num, Val, Str) \
34+
#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) \
3535
if (Val) \
3636
Flag |= (uint64_t)dxbc::FeatureFlags::Val;
3737
#include "llvm/BinaryFormat/DXContainerConstants.def"
@@ -105,7 +105,8 @@ void MappingTraits<DXContainerYAML::DXILProgram>::mapping(
105105

106106
void MappingTraits<DXContainerYAML::ShaderFeatureFlags>::mapping(
107107
IO &IO, DXContainerYAML::ShaderFeatureFlags &Flags) {
108-
#define SHADER_FEATURE_FLAG(Num, Val, Str) IO.mapRequired(#Val, Flags.Val);
108+
#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) \
109+
IO.mapRequired(#Val, Flags.Val);
109110
#include "llvm/BinaryFormat/DXContainerConstants.def"
110111
}
111112

llvm/lib/Target/DirectX/DXContainerGlobals.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ using namespace llvm::dxil;
2828
namespace {
2929
class DXContainerGlobals : public llvm::ModulePass {
3030

31-
GlobalVariable *getShaderFlags(Module &M);
31+
GlobalVariable *getFeatureInfo(Module &M);
3232
GlobalVariable *computeShaderHash(Module &M);
3333

3434
public:
@@ -53,21 +53,24 @@ class DXContainerGlobals : public llvm::ModulePass {
5353

5454
bool DXContainerGlobals::runOnModule(Module &M) {
5555
llvm::SmallVector<GlobalValue *> Globals;
56-
Globals.push_back(getShaderFlags(M));
56+
Globals.push_back(getFeatureInfo(M));
5757
Globals.push_back(computeShaderHash(M));
5858

5959
appendToCompilerUsed(M, Globals);
6060
return true;
6161
}
6262

63-
GlobalVariable *DXContainerGlobals::getShaderFlags(Module &M) {
64-
const uint64_t Flags =
65-
(uint64_t)(getAnalysis<ShaderFlagsAnalysisWrapper>().getShaderFlags());
63+
GlobalVariable *DXContainerGlobals::getFeatureInfo(Module &M) {
64+
const uint64_t FeatureInfo =
65+
(uint64_t)(getAnalysis<ShaderFlagsAnalysisWrapper>()
66+
.getShaderFlags()
67+
.getFeatureInfo());
6668

67-
Constant *FlagsConstant = ConstantInt::get(M.getContext(), APInt(64, Flags));
68-
auto *GV = new llvm::GlobalVariable(M, FlagsConstant->getType(), true,
69+
Constant *FeatureInfoConstant =
70+
ConstantInt::get(M.getContext(), APInt(64, FeatureInfo));
71+
auto *GV = new llvm::GlobalVariable(M, FeatureInfoConstant->getType(), true,
6972
GlobalValue::PrivateLinkage,
70-
FlagsConstant, "dx.sfi0");
73+
FeatureInfoConstant, "dx.sfi0");
7174
GV->setSection("SFI0");
7275
GV->setAlignment(Align(4));
7376
return GV;

llvm/lib/Target/DirectX/DXILShaderFlags.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ void ComputedShaderFlags::print(raw_ostream &OS) const {
5151
if (FlagVal == 0)
5252
return;
5353
OS << "; Note: shader requires additional functionality:\n";
54-
#define SHADER_FEATURE_FLAG(bit, FlagName, Str) \
54+
#define SHADER_FEATURE_FLAG(bit, DxilModuleNum, FlagName, Str) \
55+
if (FlagName) \
56+
OS << "; " Str "\n";
57+
#define DXIL_MODULE_FLAG(bit, FlagName, Str) \
5558
if (FlagName) \
5659
OS << "; " Str "\n";
5760
#include "llvm/BinaryFormat/DXContainerConstants.def"

llvm/lib/Target/DirectX/DXILShaderFlags.h

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#ifndef LLVM_TARGET_DIRECTX_DXILSHADERFLAGS_H
1515
#define LLVM_TARGET_DIRECTX_DXILSHADERFLAGS_H
1616

17-
#include "llvm/BinaryFormat/DXContainer.h"
1817
#include "llvm/IR/PassManager.h"
1918
#include "llvm/Pass.h"
2019
#include "llvm/Support/Compiler.h"
@@ -29,23 +28,35 @@ class GlobalVariable;
2928
namespace dxil {
3029

3130
struct ComputedShaderFlags {
32-
#define SHADER_FEATURE_FLAG(bit, FlagName, Str) bool FlagName : 1;
31+
#define SHADER_FEATURE_FLAG(bit, DxilModuleBit, FlagName, Str) \
32+
bool FlagName : 1;
33+
#define DXIL_MODULE_FLAG(bit, FlagName, Str) bool FlagName : 1;
3334
#include "llvm/BinaryFormat/DXContainerConstants.def"
3435

35-
#define SHADER_FEATURE_FLAG(bit, FlagName, Str) FlagName = false;
36+
#define SHADER_FEATURE_FLAG(bit, DxilModuleBit, FlagName, Str) FlagName = false;
37+
#define DXIL_MODULE_FLAG(bit, FlagName, Str) FlagName = false;
3638
ComputedShaderFlags() {
3739
#include "llvm/BinaryFormat/DXContainerConstants.def"
3840
}
3941

4042
operator uint64_t() const {
4143
uint64_t FlagValue = 0;
42-
#define SHADER_FEATURE_FLAG(bit, FlagName, Str) \
43-
FlagValue |= \
44-
FlagName ? static_cast<uint64_t>(dxbc::FeatureFlags::FlagName) : 0ull;
44+
#define SHADER_FEATURE_FLAG(bit, DxilModuleBit, FlagName, Str) \
45+
FlagValue |= FlagName ? (uint64_t)1 << DxilModuleBit : 0ull;
46+
#define DXIL_MODULE_FLAG(bit, FlagName, Str) \
47+
FlagValue |= FlagName ? (uint64_t)1 << bit : 0ull;
4548
#include "llvm/BinaryFormat/DXContainerConstants.def"
4649
return FlagValue;
4750
}
4851

52+
uint64_t getFeatureInfo() const {
53+
uint64_t FeatureInfo = 0;
54+
#define SHADER_FEATURE_FLAG(bit, DxilModuleBit, FlagName, Str) \
55+
FeatureInfo |= FlagName ? (uint64_t)1 << bit : 0ull;
56+
#include "llvm/BinaryFormat/DXContainerConstants.def"
57+
return FeatureInfo;
58+
}
59+
4960
static ComputedShaderFlags computeFlags(Module &M);
5061
void print(raw_ostream &OS = dbgs()) const;
5162
LLVM_DUMP_METHOD void dump() const { print(); }

llvm/test/CodeGen/DirectX/ShaderFlags/double-extensions.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
target triple = "dxil-pc-shadermodel6.7-library"
55

6-
; CHECK: ; Shader Flags Value: 0x00000021
6+
; CHECK: ; Shader Flags Value: 0x00000044
77
; CHECK: ; Note: shader requires additional functionality:
88
; CHECK-NEXT: ; Double-precision floating point
99
; CHECK-NEXT: ; Double-precision extensions for 11.1

llvm/test/CodeGen/DirectX/ShaderFlags/doubles.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33

44
target triple = "dxil-pc-shadermodel6.7-library"
55

6-
; CHECK: ; Shader Flags Value: 0x00000001
6+
; CHECK: ; Shader Flags Value: 0x00000004
77
; CHECK: ; Note: shader requires additional functionality:
88
; CHECK-NEXT: ; Double-precision floating point
99
; CHECK-NEXT: {{^;$}}
10+
1011
define double @add(double %a, double %b) {
1112
%sum = fadd double %a, %b
1213
ret double %sum

llvm/test/CodeGen/DirectX/lib_entry.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ target triple = "dxil-unknown-shadermodel6.7-library"
77
; Make sure generate empty entry for lib profile.
88
;CHECK:![[empty_entry]] = !{null, !"", null, null, ![[shader_flags:[0-9]+]]}
99
; Make sure double is marked for shader flags.
10-
;CHECK:![[shader_flags]] = !{i32 0, i64 1}
10+
;CHECK:![[shader_flags]] = !{i32 0, i64 4}
1111
;CHECK:![[entry]] = !{ptr @entry, !"entry", null, null, ![[extra:[0-9]+]]}
1212
;CHECK:![[extra]] = !{i32 8, i32 5, i32 4, ![[numthreads:[0-9]+]]}
1313
;CHECK:![[numthreads]] = !{i32 1, i32 2, i32 1}

0 commit comments

Comments
 (0)