Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 25 additions & 27 deletions mlir/include/mlir/Dialect/DXSA/IR/DXSAOps.td
Original file line number Diff line number Diff line change
Expand Up @@ -18,37 +18,26 @@ include "mlir/IR/EnumAttr.td"
//===----------------------------------------------------------------------===//

// Global shader flags for 'dcl_globalFlags' instruction.
def DXSA_GlobalFlags_None : I32BitEnumAttrCaseNone<"none">;
// D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED
def DXSA_GlobalFlags_RefactoringAllowed : I32BitEnumAttrCaseBit<"refactoringAllowed", 11>;
// D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS
def DXSA_GlobalFlags_DoublePrecision : I32BitEnumAttrCaseBit<"enableDoublePrecision", 12>;
// D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL
def DXSA_GlobalFlags_ForceEarlyDepth : I32BitEnumAttrCaseBit<"forceEarlyDepth", 13>;
// D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
def DXSA_GlobalFlags_RawStructured : I32BitEnumAttrCaseBit<"enableRawStructured", 14>;
// D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION
def DXSA_GlobalFlags_SkipOptimization : I32BitEnumAttrCaseBit<"skipOptimization", 15>;
// D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION
def DXSA_GlobalFlags_MinPrecision : I32BitEnumAttrCaseBit<"enableMinPrecision", 16>;
// D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS
def DXSA_GlobalFlags_DoubleExtensions : I32BitEnumAttrCaseBit<"enableDoubleExtensions", 17>;
// D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS
def DXSA_GlobalFlags_ShaderExtensions : I32BitEnumAttrCaseBit<"enableShaderExtensions", 18>;
// D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND
def DXSA_GlobalFlags_AllResourcesBound : I32BitEnumAttrCaseBit<"allResourcesBound", 19>;
def DXSA_GlobalFlags_RefactoringAllowed : I32BitEnumAttrCaseBit<"refactoringAllowed", 0>;
def DXSA_GlobalFlags_EnableDoublePrecisionFloatOps : I32BitEnumAttrCaseBit<"enableDoublePrecisionFloatOps", 1>;
def DXSA_GlobalFlags_ForceEarlyDepthStencil : I32BitEnumAttrCaseBit<"forceEarlyDepthStencil", 2>;
def DXSA_GlobalFlags_EnableRawAndStructuredBuffers : I32BitEnumAttrCaseBit<"enableRawAndStructuredBuffers", 3>;
def DXSA_GlobalFlags_SkipOptimization : I32BitEnumAttrCaseBit<"skipOptimization", 4>;
def DXSA_GlobalFlags_EnableMinimumPrecision : I32BitEnumAttrCaseBit<"enableMinimumPrecision", 5>;
def DXSA_GlobalFlags_EnableDoubleExtensions : I32BitEnumAttrCaseBit<"enableDoubleExtensions", 6>;
def DXSA_GlobalFlags_EnableShaderExtensions : I32BitEnumAttrCaseBit<"enableShaderExtensions", 7>;
def DXSA_GlobalFlags_AllResourcesBound : I32BitEnumAttrCaseBit<"allResourcesBound", 8>;

def DXSA_GlobalFlags : I32BitEnumAttr<
"GlobalFlags", "global shader flags", [
DXSA_GlobalFlags_None,
DXSA_GlobalFlags_RefactoringAllowed,
DXSA_GlobalFlags_DoublePrecision,
DXSA_GlobalFlags_ForceEarlyDepth,
DXSA_GlobalFlags_RawStructured,
DXSA_GlobalFlags_EnableDoublePrecisionFloatOps,
DXSA_GlobalFlags_ForceEarlyDepthStencil,
DXSA_GlobalFlags_EnableRawAndStructuredBuffers,
DXSA_GlobalFlags_SkipOptimization,
DXSA_GlobalFlags_MinPrecision,
DXSA_GlobalFlags_DoubleExtensions,
DXSA_GlobalFlags_ShaderExtensions,
DXSA_GlobalFlags_EnableMinimumPrecision,
DXSA_GlobalFlags_EnableDoubleExtensions,
DXSA_GlobalFlags_EnableShaderExtensions,
DXSA_GlobalFlags_AllResourcesBound
]> {
let separator = "|";
Expand Down Expand Up @@ -146,9 +135,18 @@ def DXSA_Instruction : DXSA_Op<"instruction"> {

def DXSA_DclGlobalFlags : DXSA_Op<"dcl_global_flags"> {
let summary = "declares global shader flags";
let description = [{
The `dxsa.dcl_global_flags` operation declares a set of flags that
affect the entire shader.

Example:

```mlir
dxsa.dcl_global_flags <refactoringAllowed|forceEarlyDepthStencil>
```
}];
let arguments = (ins DXSA_GlobalFlagsAttr:$flags);
let assemblyFormat = "$flags attr-dict";
let hasVerifier = 1;
}

def DXSA_DclTemps : DXSA_Op<"dcl_temps"> {
Expand Down
10 changes: 0 additions & 10 deletions mlir/lib/Dialect/DXSA/IR/DXSA.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,6 @@ void DXSADialect::initialize() {
>();
}

//===----------------------------------------------------------------------===//
// DclGlobalFlags
//===----------------------------------------------------------------------===//

LogicalResult DclGlobalFlags::verify() {
if (getFlags() == GlobalFlags::none)
return emitOpError("expected at least one global flag to be set");
return success();
}

//===----------------------------------------------------------------------===//
// TableGen'd op method definitions
//===----------------------------------------------------------------------===//
Expand Down
32 changes: 27 additions & 5 deletions mlir/lib/Target/DXSA/BinaryParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -505,9 +505,8 @@ class DXBuilder {
return module;
}

Instruction buildDclGlobalFlags(uint32_t flags, Location loc) {
auto flagsAttr = dxsa::GlobalFlagsAttr::get(
builder.getContext(), static_cast<dxsa::GlobalFlags>(flags));
Instruction buildDclGlobalFlags(dxsa::GlobalFlags flags, Location loc) {
auto flagsAttr = dxsa::GlobalFlagsAttr::get(builder.getContext(), flags);
return dxsa::DclGlobalFlags::create(builder, loc, flagsAttr);
}

Expand Down Expand Up @@ -810,8 +809,31 @@ class Parser {

FailureOr<Instruction> parseDclGlobalFlags(uint32_t opcodeToken,
Location loc) {
return builder.buildDclGlobalFlags(
DECODE_D3D10_SB_GLOBAL_FLAGS(opcodeToken), loc);
auto raw = DECODE_D3D10_SB_GLOBAL_FLAGS(opcodeToken);
if (raw == 0) {
emitError(loc, "expected at least one global flag to be set");
return failure();
}
auto flags = static_cast<dxsa::GlobalFlags>(0);
if (raw & D3D10_SB_GLOBAL_FLAG_REFACTORING_ALLOWED)
flags |= dxsa::GlobalFlags::refactoringAllowed;
if (raw & D3D11_SB_GLOBAL_FLAG_ENABLE_DOUBLE_PRECISION_FLOAT_OPS)
flags |= dxsa::GlobalFlags::enableDoublePrecisionFloatOps;
if (raw & D3D11_SB_GLOBAL_FLAG_FORCE_EARLY_DEPTH_STENCIL)
flags |= dxsa::GlobalFlags::forceEarlyDepthStencil;
if (raw & D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS)
flags |= dxsa::GlobalFlags::enableRawAndStructuredBuffers;
if (raw & D3D11_1_SB_GLOBAL_FLAG_SKIP_OPTIMIZATION)
flags |= dxsa::GlobalFlags::skipOptimization;
if (raw & D3D11_1_SB_GLOBAL_FLAG_ENABLE_MINIMUM_PRECISION)
flags |= dxsa::GlobalFlags::enableMinimumPrecision;
if (raw & D3D11_1_SB_GLOBAL_FLAG_ENABLE_DOUBLE_EXTENSIONS)
flags |= dxsa::GlobalFlags::enableDoubleExtensions;
if (raw & D3D11_1_SB_GLOBAL_FLAG_ENABLE_SHADER_EXTENSIONS)
flags |= dxsa::GlobalFlags::enableShaderExtensions;
if (raw & D3D12_SB_GLOBAL_FLAG_ALL_RESOURCES_BOUND)
flags |= dxsa::GlobalFlags::allResourcesBound;
return builder.buildDclGlobalFlags(flags, loc);
}

FailureOr<Instruction> parseDclTemps(Location loc) {
Expand Down
10 changes: 5 additions & 5 deletions mlir/test/Target/DXSA/dcl_global_flags.mlir
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@

// CHECK: module {
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed>
// CHECK-NEXT: dxsa.dcl_global_flags <enableDoublePrecision>
// CHECK-NEXT: dxsa.dcl_global_flags <forceEarlyDepth>
// CHECK-NEXT: dxsa.dcl_global_flags <enableRawStructured>
// CHECK-NEXT: dxsa.dcl_global_flags <enableDoublePrecisionFloatOps>
// CHECK-NEXT: dxsa.dcl_global_flags <forceEarlyDepthStencil>
// CHECK-NEXT: dxsa.dcl_global_flags <enableRawAndStructuredBuffers>
// CHECK-NEXT: dxsa.dcl_global_flags <skipOptimization>
// CHECK-NEXT: dxsa.dcl_global_flags <enableMinPrecision>
// CHECK-NEXT: dxsa.dcl_global_flags <enableMinimumPrecision>
// CHECK-NEXT: dxsa.dcl_global_flags <enableDoubleExtensions>
// CHECK-NEXT: dxsa.dcl_global_flags <enableShaderExtensions>
// CHECK-NEXT: dxsa.dcl_global_flags <allResourcesBound>
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed|skipOptimization|allResourcesBound>
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed|enableDoublePrecision|forceEarlyDepth|enableRawStructured|skipOptimization|enableMinPrecision|enableDoubleExtensions|enableShaderExtensions|allResourcesBound>
// CHECK-NEXT: dxsa.dcl_global_flags <refactoringAllowed|enableDoublePrecisionFloatOps|forceEarlyDepthStencil|enableRawAndStructuredBuffers|skipOptimization|enableMinimumPrecision|enableDoubleExtensions|enableShaderExtensions|allResourcesBound>
// CHECK-NEXT: }
3 changes: 0 additions & 3 deletions mlir/test/Target/DXSA/dcl_global_flags_none.mlir

This file was deleted.

Binary file not shown.