Skip to content

Commit 8c0d032

Browse files
[SM6.10] Add Smoke Test For VectorAccumulate (#8458)
Adds a smoke test for the VectorAccumulate operation added for the preview followup --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent d9c0a26 commit 8c0d032

1 file changed

Lines changed: 44 additions & 1 deletion

File tree

tools/clang/unittests/HLSLExec/LinAlgTests.cpp

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
362365
private:
363366
CComPtr<ID3D12Device> D3DDevice;
364367
dxc::SpecificDllLoader DxcSupport;
@@ -1693,7 +1696,7 @@ static const char ConvertShader[] = R"(
16931696

16941697
static 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

Comments
 (0)