DirectXShaderCompiler
DirectXShaderCompiler copied to clipboard
Validation fails when linking to amplification shader target
Description
When using dxc -link with an amplification shader target ( -Tas_6_6) I get a validation error message:
Link failed:
error: validation errors
Function: main: error: For amplification shader with entry 'main', payload size 8 is greater than declared size of 4 bytes.
note: at 'call void @dx.op.dispatchMesh.struct.payloadStruct(i32 173, i32 1, i32 1, i32 1, %struct.payloadStruct addrspace(3)* nonnull @"\01?p@@3UpayloadStruct@@A")' in block '#0' of function 'main'.
Validation failed.
If I compile the same shader directly to an amplification shader it works correctly.
Steps to Reproduce
> cat as.hlsl
struct payloadStruct
{
uint myArbitraryData;
};
groupshared payloadStruct p;
[shader("amplification")]
[RootSignature("")]
[numthreads(1,1,1)]
void main(in uint3 groupID : SV_GroupID)
{
p.myArbitraryData = groupID.z;
DispatchMesh(1,1,1,p);
}
> dxc /Tas_6_6 as.hlsl
... outputs an amplification shader as expected ...
> dxc /Tlib_6_x /Fo as.lib as.hlsl
> dxc.exe /Tas_6_6 -link as.lib
Link failed:
error: validation errors
Function: main: error: For amplification shader with entry 'main', payload size 8 is greater than declared size of 4 bytes.
note: at 'call void @dx.op.dispatchMesh.struct.payloadStruct(i32 173, i32 1, i32 1, i32 1, %struct.payloadStruct addrspace(3)* nonnull @"\01?p@@3UpayloadStruct@@A")' in block '#0' of function 'main'.
Validation failed.
Actual Behavior
Link failed:
error: validation errors
Function: main: error: For amplification shader with entry 'main', payload size 8 is greater than declared size of 4 bytes.
note: at 'call void @dx.op.dispatchMesh.struct.payloadStruct(i32 173, i32 1, i32 1, i32 1, %struct.payloadStruct addrspace(3)* nonnull @"\01?p@@3UpayloadStruct@@A")' in block '#0' of function 'main'.
Validation failed.
Environment
- DXC version dxcompiler.dll: 1.7 - 1.7.0.14071 (main, 9a0768d66); dxil.dll: 1.6(101.6.2104.33))
- Host Operating System Windows 11