diff --git a/tools/clang/lib/Sema/SemaHLSLDiagnoseTU.cpp b/tools/clang/lib/Sema/SemaHLSLDiagnoseTU.cpp index 1eb3df93b3..cf5d741541 100644 --- a/tools/clang/lib/Sema/SemaHLSLDiagnoseTU.cpp +++ b/tools/clang/lib/Sema/SemaHLSLDiagnoseTU.cpp @@ -529,10 +529,13 @@ void hlsl::DiagnoseTranslationUnit(clang::Sema *self) { // attribute. if (const auto *Attr = FDecl->getAttr()) EntrySK = ShaderModel::KindFromFullName(Attr->getStage()); - if (EntrySK == DXIL::ShaderKind::Node) + if (EntrySK == DXIL::ShaderKind::Node) { if (const auto *pAttr = FDecl->getAttr()) NodeLaunchTy = ShaderModel::NodeLaunchTypeFromName(pAttr->getLaunchType()); + else + NodeLaunchTy = DXIL::NodeLaunchType::Broadcasting; + } } // Visit all visited functions in call graph to collect illegal intrinsic // calls. diff --git a/tools/clang/test/SemaHLSL/hlsl/intrinsics/barrier/barrier-node-errors.hlsl b/tools/clang/test/SemaHLSL/hlsl/intrinsics/barrier/barrier-node-errors.hlsl index b966cd08b7..8060866314 100644 --- a/tools/clang/test/SemaHLSL/hlsl/intrinsics/barrier/barrier-node-errors.hlsl +++ b/tools/clang/test/SemaHLSL/hlsl/intrinsics/barrier/barrier-node-errors.hlsl @@ -192,3 +192,15 @@ void node02(RWThreadNodeInputRecord input, Barrier(threadRec, DEVICE_SCOPE); threadRec.OutputComplete(); } + +// Default launch type is broadcasting which has a visible group. +// It is OK to use GROUP_SYNC or GROUP_SCOPE. +[Shader("node")] +[NumThreads(64,1,1)] +[NodeDispatchGrid(1, 1, 1)] +void defaultBroadcastingLaunch(RWDispatchNodeInputRecord input, + [MaxRecords(11)] NodeOutput output) { + Barrier(UAV_MEMORY, GROUP_SYNC); + Barrier(UAV_MEMORY, GROUP_SCOPE); + Barrier(UAV_MEMORY, GROUP_SCOPE|GROUP_SYNC); +}