blob: 80608663148dcfb97ffb45c55468c829bf289424 [file] [log] [blame]
// RUN: %dxc -Tlib_6_8 -verify %s
struct RECORD { uint a; };
RWBuffer<uint> buf0;
static uint i = 7;
// Errors expected when called without visible group.
[noinline] export
void GroupBarriers() {
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(0, GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(ALL_MEMORY, GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(ALL_MEMORY, GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(ALL_MEMORY, GROUP_SCOPE | GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(ALL_MEMORY, DEVICE_SCOPE | GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(ALL_MEMORY, 1 + 2 + 4);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(UAV_MEMORY, GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(UAV_MEMORY, GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(UAV_MEMORY, GROUP_SCOPE | GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(UAV_MEMORY, DEVICE_SCOPE | GROUP_SCOPE);
// expected-error@+1{{GROUP_SHARED_MEMORY specified for Barrier operation when context has no visible group}}
Barrier(GROUP_SHARED_MEMORY, 0);
// expected-error@+2{{GROUP_SHARED_MEMORY specified for Barrier operation when context has no visible group}}
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(GROUP_SHARED_MEMORY, GROUP_SYNC);
// expected-error@+2{{GROUP_SHARED_MEMORY specified for Barrier operation when context has no visible group}}
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(GROUP_SHARED_MEMORY, GROUP_SCOPE);
// expected-error@+2{{GROUP_SHARED_MEMORY specified for Barrier operation when context has no visible group}}
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(GROUP_SHARED_MEMORY, GROUP_SCOPE);
}
// Errors expected when called without visible group.
[noinline] export
void GroupNodeBarriers() {
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_INPUT_MEMORY, GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_INPUT_MEMORY, GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_INPUT_MEMORY, GROUP_SCOPE | GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_INPUT_MEMORY, DEVICE_SCOPE | GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_OUTPUT_MEMORY, GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_OUTPUT_MEMORY, GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_OUTPUT_MEMORY, GROUP_SCOPE | GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(NODE_OUTPUT_MEMORY, DEVICE_SCOPE | GROUP_SCOPE);
}
// expected-note@+7{{entry function defined here}}
// expected-note@+6{{entry function defined here}}
// expected-note@+5{{entry function defined here}}
[Shader("node")]
[NodeLaunch("broadcasting")]
[NumThreads(64,1,1)]
[NodeDispatchGrid(1, 1, 1)]
void node01(RWDispatchNodeInputRecord<RECORD> input,
[MaxRecords(11)] NodeOutput<RECORD> output) {
GroupNodeOutputRecords<RECORD> groupRec = output.GetGroupNodeOutputRecords(1);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(groupRec, DEVICE_SCOPE);
groupRec.OutputComplete();
ThreadNodeOutputRecords<RECORD> threadRec = output.GetThreadNodeOutputRecords(1);
// expected-error@+1{{GROUP_SCOPE specified for Barrier operation without applicable memory}}
Barrier(threadRec, GROUP_SCOPE);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(threadRec, DEVICE_SCOPE);
threadRec.OutputComplete();
}
// expected-note@+7{{entry function defined here}}
// expected-note@+6{{entry function defined here}}
// expected-note@+5{{entry function defined here}}
// expected-note@+4{{entry function defined here}}
[Shader("node")]
[NodeLaunch("coalescing")]
[NumThreads(64,1,1)]
void node01([MaxRecords(64)] RWGroupNodeInputRecords<RECORD> input,
[MaxRecords(11)] NodeOutput<RECORD> output) {
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(input, DEVICE_SCOPE);
GroupNodeOutputRecords<RECORD> groupRec = output.GetGroupNodeOutputRecords(1);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(groupRec, DEVICE_SCOPE);
groupRec.OutputComplete();
ThreadNodeOutputRecords<RECORD> threadRec = output.GetThreadNodeOutputRecords(1);
// expected-error@+1{{GROUP_SCOPE specified for Barrier operation without applicable memory}}
Barrier(threadRec, GROUP_SCOPE);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(threadRec, DEVICE_SCOPE);
threadRec.OutputComplete();
}
// expected-note@+40{{entry function defined here}}
// expected-note@+39{{entry function defined here}}
// expected-note@+38{{entry function defined here}}
// expected-note@+37{{entry function defined here}}
// expected-note@+36{{entry function defined here}}
// expected-note@+35{{entry function defined here}}
// expected-note@+34{{entry function defined here}}
// expected-note@+33{{entry function defined here}}
// expected-note@+32{{entry function defined here}}
// expected-note@+31{{entry function defined here}}
// expected-note@+30{{entry function defined here}}
// expected-note@+29{{entry function defined here}}
// expected-note@+28{{entry function defined here}}
// expected-note@+27{{entry function defined here}}
// expected-note@+26{{entry function defined here}}
// expected-note@+25{{entry function defined here}}
// expected-note@+24{{entry function defined here}}
// expected-note@+23{{entry function defined here}}
// expected-note@+22{{entry function defined here}}
// expected-note@+21{{entry function defined here}}
// expected-note@+20{{entry function defined here}}
// expected-note@+19{{entry function defined here}}
// expected-note@+18{{entry function defined here}}
// expected-note@+17{{entry function defined here}}
// expected-note@+16{{entry function defined here}}
// expected-note@+15{{entry function defined here}}
// expected-note@+14{{entry function defined here}}
// expected-note@+13{{entry function defined here}}
// expected-note@+12{{entry function defined here}}
// expected-note@+11{{entry function defined here}}
// expected-note@+10{{entry function defined here}}
// expected-note@+9{{entry function defined here}}
// expected-note@+8{{entry function defined here}}
// expected-note@+7{{entry function defined here}}
// expected-note@+6{{entry function defined here}}
// expected-note@+5{{entry function defined here}}
// expected-note@+4{{entry function defined here}}
// expected-note@+3{{entry function defined here}}
[Shader("node")]
[NodeLaunch("thread")]
void node02(RWThreadNodeInputRecord<RECORD> input,
[MaxRecords(11)] NodeOutput<RECORD> output) {
GroupBarriers();
GroupNodeBarriers();
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(buf0, GROUP_SYNC);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(buf0, GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(input, GROUP_SYNC);
// expected-error@+2{{GROUP_SCOPE specified for Barrier operation without applicable memory}}
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(input, GROUP_SCOPE);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(input, DEVICE_SCOPE);
GroupNodeOutputRecords<RECORD> groupRec = output.GetGroupNodeOutputRecords(1);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(groupRec, GROUP_SCOPE);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(groupRec, GROUP_SYNC);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
Barrier(groupRec, DEVICE_SCOPE);
groupRec.OutputComplete();
ThreadNodeOutputRecords<RECORD> threadRec = output.GetThreadNodeOutputRecords(1);
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(threadRec, GROUP_SYNC);
// expected-error@+2{{GROUP_SCOPE specified for Barrier operation without applicable memory}}
// expected-error@+1{{GROUP_SYNC or GROUP_SCOPE specified for Barrier operation when context has no visible group}}
Barrier(threadRec, GROUP_SCOPE);
// expected-error@+1{{DEVICE_SCOPE specified for Barrier operation without applicable memory}}
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<RECORD> input,
[MaxRecords(11)] NodeOutput<RECORD> output) {
Barrier(UAV_MEMORY, GROUP_SYNC);
Barrier(UAV_MEMORY, GROUP_SCOPE);
Barrier(UAV_MEMORY, GROUP_SCOPE|GROUP_SYNC);
}