@@ -359,6 +359,9 @@ class DxilConf_SM610_LinAlg {
359359 // Convert
360360 TEST_METHOD (Convert);
361361
362+ // Vector Accumulate
363+ TEST_METHOD (VectorAccumulateDescriptor_Thread_F16);
364+
362365private:
363366 CComPtr<ID3D12Device> D3DDevice;
364367 dxc::SpecificDllLoader DxcSupport;
@@ -1693,7 +1696,7 @@ static const char ConvertShader[] = R"(
16931696
16941697static void runConvert (ID3D12Device *Device, dxc::SpecificDllLoader &DxcSupport,
16951698 bool Verbose) {
1696- std::string Args = " -HV 202x" ;
1699+ std::string Args = " -HV 202x -enable-16bit-types " ;
16971700 MatrixDim NumElements = 4 ;
16981701 size_t BufferSize = elementSize (ComponentType::F32) * NumElements;
16991702
@@ -1718,4 +1721,44 @@ void DxilConf_SM610_LinAlg::Convert() {
17181721 runConvert (D3DDevice, DxcSupport, VerboseLogging);
17191722}
17201723
1724+ static const char VectorAccumulateDescriptorShader[] = R"(
1725+ RWByteAddressBuffer Output : register(u0);
1726+
1727+ [numthreads(1, 1, 1)]
1728+ void main() {
1729+ vector<half, 4> InVec = {1.0, 2.0, 3.0, 4.0};
1730+ __builtin_LinAlg_VectorAccumulateToDescriptor(InVec, Output, 0, 64);
1731+ }
1732+ )" ;
1733+
1734+ static void runVectorAccumulateDescriptor (ID3D12Device *Device,
1735+ dxc::SpecificDllLoader &DxcSupport,
1736+ bool Verbose) {
1737+ std::string Args = " -HV 202x -enable-16bit-types" ;
1738+ MatrixDim NumElements = 4 ;
1739+ size_t BufferSize = elementSize (ComponentType::F16) * NumElements;
1740+
1741+ compileShader (DxcSupport, VectorAccumulateDescriptorShader, " cs_6_10" , Args,
1742+ Verbose);
1743+
1744+ auto Expected = makeExpectedVec (ComponentType::F16, NumElements, 1.0 );
1745+
1746+ auto Op = createComputeOp (VectorAccumulateDescriptorShader, " cs_6_10" ,
1747+ " UAV(u0)" , Args.c_str ());
1748+ addUAVBuffer (Op.get (), " Output" , BufferSize, true );
1749+ addRootView (Op.get (), 0 , " Output" );
1750+
1751+ auto Result = runShaderOp (Device, DxcSupport, std::move (Op));
1752+
1753+ MappedData OutData;
1754+ Result->Test ->GetReadBackData (" Output" , &OutData);
1755+
1756+ VERIFY_IS_TRUE (verifyComponentBuffer (ComponentType::F16, OutData.data (),
1757+ Expected, NumElements, Verbose));
1758+ }
1759+
1760+ void DxilConf_SM610_LinAlg::VectorAccumulateDescriptor_Thread_F16 () {
1761+ runVectorAccumulateDescriptor (D3DDevice, DxcSupport, VerboseLogging);
1762+ }
1763+
17211764} // namespace LinAlg
0 commit comments