Skip to content

Commit d74beec

Browse files
committed
[mlir][dxsa] Refine dcl_global_flags instruction
Decouple MLIR enum values from the binary layout, drop the artificial 'none' case. Example: dxsa.dcl_global_flags <refactoringAllowed|forceEarlyDepthStencil> Signed-off-by: Vladimir Shiryaev <tagolog@users.noreply.github.com>
1 parent 856b5d3 commit d74beec

6 files changed

Lines changed: 57 additions & 50 deletions

File tree

mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,26 @@ include "mlir/IR/EnumAttr.td"
1818
//===----------------------------------------------------------------------===//
1919

2020
// Global shader flags for 'dcl_globalFlags' instruction.
21-
def DXSA_GlobalFlags_None : I32BitEnumAttrCaseNone<"none">;
22-
// D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED
23-
def DXSA_GlobalFlags_RefactoringAllowed : I32BitEnumAttrCaseBit<"refactoringAllowed", 11>;
24-
// D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS
25-
def DXSA_GlobalFlags_DoublePrecision : I32BitEnumAttrCaseBit<"enableDoublePrecision", 12>;
26-
// D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL
27-
def DXSA_GlobalFlags_ForceEarlyDepth : I32BitEnumAttrCaseBit<"forceEarlyDepth", 13>;
28-
// D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
29-
def DXSA_GlobalFlags_RawStructured : I32BitEnumAttrCaseBit<"enableRawStructured", 14>;
30-
// D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION
31-
def DXSA_GlobalFlags_SkipOptimization : I32BitEnumAttrCaseBit<"skipOptimization", 15>;
32-
// D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION
33-
def DXSA_GlobalFlags_MinPrecision : I32BitEnumAttrCaseBit<"enableMinPrecision", 16>;
34-
// D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS
35-
def DXSA_GlobalFlags_DoubleExtensions : I32BitEnumAttrCaseBit<"enableDoubleExtensions", 17>;
36-
// D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS
37-
def DXSA_GlobalFlags_ShaderExtensions : I32BitEnumAttrCaseBit<"enableShaderExtensions", 18>;
38-
// D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND
39-
def DXSA_GlobalFlags_AllResourcesBound : I32BitEnumAttrCaseBit<"allResourcesBound", 19>;
21+
def DXSA_GlobalFlags_RefactoringAllowed : I32BitEnumAttrCaseBit<"refactoringAllowed", 0>;
22+
def DXSA_GlobalFlags_EnableDoublePrecisionFloatOps : I32BitEnumAttrCaseBit<"enableDoublePrecisionFloatOps", 1>;
23+
def DXSA_GlobalFlags_ForceEarlyDepthStencil : I32BitEnumAttrCaseBit<"forceEarlyDepthStencil", 2>;
24+
def DXSA_GlobalFlags_EnableRawAndStructuredBuffers : I32BitEnumAttrCaseBit<"enableRawAndStructuredBuffers", 3>;
25+
def DXSA_GlobalFlags_SkipOptimization : I32BitEnumAttrCaseBit<"skipOptimization", 4>;
26+
def DXSA_GlobalFlags_EnableMinimumPrecision : I32BitEnumAttrCaseBit<"enableMinimumPrecision", 5>;
27+
def DXSA_GlobalFlags_EnableDoubleExtensions : I32BitEnumAttrCaseBit<"enableDoubleExtensions", 6>;
28+
def DXSA_GlobalFlags_EnableShaderExtensions : I32BitEnumAttrCaseBit<"enableShaderExtensions", 7>;
29+
def DXSA_GlobalFlags_AllResourcesBound : I32BitEnumAttrCaseBit<"allResourcesBound", 8>;
4030

4131
def DXSA_GlobalFlags : I32BitEnumAttr<
4232
"GlobalFlags", "global shader flags", [
43-
DXSA_GlobalFlags_None,
4433
DXSA_GlobalFlags_RefactoringAllowed,
45-
DXSA_GlobalFlags_DoublePrecision,
46-
DXSA_GlobalFlags_ForceEarlyDepth,
47-
DXSA_GlobalFlags_RawStructured,
34+
DXSA_GlobalFlags_EnableDoublePrecisionFloatOps,
35+
DXSA_GlobalFlags_ForceEarlyDepthStencil,
36+
DXSA_GlobalFlags_EnableRawAndStructuredBuffers,
4837
DXSA_GlobalFlags_SkipOptimization,
49-
DXSA_GlobalFlags_MinPrecision,
50-
DXSA_GlobalFlags_DoubleExtensions,
51-
DXSA_GlobalFlags_ShaderExtensions,
38+
DXSA_GlobalFlags_EnableMinimumPrecision,
39+
DXSA_GlobalFlags_EnableDoubleExtensions,
40+
DXSA_GlobalFlags_EnableShaderExtensions,
5241
DXSA_GlobalFlags_AllResourcesBound
5342
]> {
5443
let separator = "|";
@@ -146,9 +135,18 @@ def DXSA_Instruction : DXSA_Op<"instruction"> {
146135

147136
def DXSA_DclGlobalFlags : DXSA_Op<"dcl_global_flags"> {
148137
let summary = "declares global shader flags";
138+
let description = [{
139+
The `dxsa.dcl_global_flags` operation declares a set of flags that
140+
affect the entire shader.
141+
142+
Example:
143+
144+
```mlir
145+
dxsa.dcl_global_flags <refactoringAllowed|enableDoublePrecisionFloatOps>
146+
```
147+
}];
149148
let arguments = (ins DXSA_GlobalFlagsAttr:$flags);
150149
let assemblyFormat = "$flags attr-dict";
151-
let hasVerifier = 1;
152150
}
153151

154152
def DXSA_DclTemps : DXSA_Op<"dcl_temps"> {

mlir/lib/Dialect/DXSA/IR/DXSA.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,6 @@ void DXSADialect::initialize() {
3434
>();
3535
}
3636

37-
//===----------------------------------------------------------------------===//
38-
// DclGlobalFlags
39-
//===----------------------------------------------------------------------===//
40-
41-
LogicalResult DclGlobalFlags::verify() {
42-
if (getFlags() == GlobalFlags::none)
43-
return emitOpError("expected at least one global flag to be set");
44-
return success();
45-
}
46-
4737
//===----------------------------------------------------------------------===//
4838
// TableGen'd op method definitions
4939
//===----------------------------------------------------------------------===//

mlir/lib/Target/DXSA/BinaryParser.cpp

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -505,9 +505,8 @@ class DXBuilder {
505505
return module;
506506
}
507507

508-
Instruction buildDclGlobalFlags(uint32_t flags, Location loc) {
509-
auto flagsAttr = dxsa::GlobalFlagsAttr::get(
510-
builder.getContext(), static_cast<dxsa::GlobalFlags>(flags));
508+
Instruction buildDclGlobalFlags(dxsa::GlobalFlags flags, Location loc) {
509+
auto flagsAttr = dxsa::GlobalFlagsAttr::get(builder.getContext(), flags);
511510
return dxsa::DclGlobalFlags::create(builder, loc, flagsAttr);
512511
}
513512

@@ -810,8 +809,31 @@ class Parser {
810809

811810
FailureOr<Instruction> parseDclGlobalFlags(uint32_t opcodeToken,
812811
Location loc) {
813-
return builder.buildDclGlobalFlags(
814-
DECODE_D3D10_SB_GLOBAL_FLAGS(opcodeToken), loc);
812+
auto raw = DECODE_D3D10_SB_GLOBAL_FLAGS(opcodeToken);
813+
if (raw == 0) {
814+
emitError(loc, "expected at least one global flag to be set");
815+
return failure();
816+
}
817+
auto flags = static_cast<dxsa::GlobalFlags>(0);
818+
if (raw & D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED)
819+
flags |= dxsa::GlobalFlags::refactoringAllowed;
820+
if (raw & D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS)
821+
flags |= dxsa::GlobalFlags::enableDoublePrecisionFloatOps;
822+
if (raw & D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL)
823+
flags |= dxsa::GlobalFlags::forceEarlyDepthStencil;
824+
if (raw & D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS)
825+
flags |= dxsa::GlobalFlags::enableRawAndStructuredBuffers;
826+
if (raw & D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION)
827+
flags |= dxsa::GlobalFlags::skipOptimization;
828+
if (raw & D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION)
829+
flags |= dxsa::GlobalFlags::enableMinimumPrecision;
830+
if (raw & D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS)
831+
flags |= dxsa::GlobalFlags::enableDoubleExtensions;
832+
if (raw & D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS)
833+
flags |= dxsa::GlobalFlags::enableShaderExtensions;
834+
if (raw & D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND)
835+
flags |= dxsa::GlobalFlags::allResourcesBound;
836+
return builder.buildDclGlobalFlags(flags, loc);
815837
}
816838

817839
FailureOr<Instruction> parseDclTemps(Location loc) {

mlir/test/Target/DXSA/dcl_global_flags.mlir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
// CHECK: module {
66
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed>
7-
// CHECK-NEXT: dxsa.dcl_global_flags <enableDoublePrecision>
8-
// CHECK-NEXT: dxsa.dcl_global_flags <forceEarlyDepth>
9-
// CHECK-NEXT: dxsa.dcl_global_flags <enableRawStructured>
7+
// CHECK-NEXT: dxsa.dcl_global_flags <enableDoublePrecisionFloatOps>
8+
// CHECK-NEXT: dxsa.dcl_global_flags <forceEarlyDepthStencil>
9+
// CHECK-NEXT: dxsa.dcl_global_flags <enableRawAndStructuredBuffers>
1010
// CHECK-NEXT: dxsa.dcl_global_flags <skipOptimization>
11-
// CHECK-NEXT: dxsa.dcl_global_flags <enableMinPrecision>
11+
// CHECK-NEXT: dxsa.dcl_global_flags <enableMinimumPrecision>
1212
// CHECK-NEXT: dxsa.dcl_global_flags <enableDoubleExtensions>
1313
// CHECK-NEXT: dxsa.dcl_global_flags <enableShaderExtensions>
1414
// CHECK-NEXT: dxsa.dcl_global_flags <allResourcesBound>
1515
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed|skipOptimization|allResourcesBound>
16-
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed|enableDoublePrecision|forceEarlyDepth|enableRawStructured|skipOptimization|enableMinPrecision|enableDoubleExtensions|enableShaderExtensions|allResourcesBound>
16+
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed|enableDoublePrecisionFloatOps|forceEarlyDepthStencil|enableRawAndStructuredBuffers|skipOptimization|enableMinimumPrecision|enableDoubleExtensions|enableShaderExtensions|allResourcesBound>
1717
// CHECK-NEXT: }

mlir/test/Target/DXSA/dcl_global_flags_none.mlir

Lines changed: 0 additions & 3 deletions
This file was deleted.
-4 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)