Fix crash in WaveSizeTest on GPUs with more then one wave size options (#3431)

This commit is contained in:
Helena Kotas 2021-02-04 17:15:53 -08:00 коммит произвёл GitHub
Родитель f069cc9649
Коммит 63fcca6356
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 8 добавлений и 7 удалений

Просмотреть файл

@ -8296,8 +8296,6 @@ void ExecutionTest::WaveSizeTest() {
WEX::TestExecution::SetVerifyOutput verifySettings(WEX::TestExecution::VerifyOutputSettings::LogOnlyFailures);
CComPtr<ID3D12Device> pDevice;
CComPtr<IStream> pStream;
if (!CreateDevice(&pDevice, D3D_SHADER_MODEL_6_6)) {
return;
}
@ -8309,9 +8307,6 @@ void ExecutionTest::WaveSizeTest() {
return;
}
// read shader config
ReadHlslDataIntoNewStream(L"ShaderOpArith.xml", &pStream);
// Get supported wave sizes
D3D12_FEATURE_DATA_D3D12_OPTIONS1 waveOpts;
VERIFY_SUCCEEDED(pDevice->CheckFeatureSupport((D3D12_FEATURE)D3D12_FEATURE_D3D12_OPTIONS1, &waveOpts, sizeof(waveOpts)));
@ -8322,6 +8317,12 @@ void ExecutionTest::WaveSizeTest() {
DXASSERT((minWaveSize & (minWaveSize - 1)) == 0, "must be a power of 2");
DXASSERT((maxWaveSize & (maxWaveSize - 1)) == 0, "must be a power of 2");
// read shader config
CComPtr<IStream> pStream;
std::shared_ptr<st::ShaderOpSet> ShaderOpSet = std::make_shared<st::ShaderOpSet>();
ReadHlslDataIntoNewStream(L"ShaderOpArith.xml", &pStream);
st::ParseShaderOpSetFromStream(pStream, ShaderOpSet.get());
// format shader source
const char waveSizeTestShader[] =
"struct TestData { \r\n"
@ -8346,7 +8347,7 @@ void ExecutionTest::WaveSizeTest() {
VERIFY_IS_TRUE(sprintf_s(compilerOptions, sizeof(compilerOptions), "-D WAVESIZE=%d", waveSize) != -1);
// run the shader
std::shared_ptr<ShaderOpTestResult> test = RunShaderOpTest(pDevice, m_support, pStream, "WaveSizeTest",
std::shared_ptr<ShaderOpTestResult> test = RunShaderOpTestAfterParse(pDevice, m_support, "WaveSizeTest",
[&](LPCSTR Name, std::vector<BYTE> &Data, st::ShaderOp *pShaderOp) {
VERIFY_IS_TRUE((0 == strncmp(Name, "UAVBuffer0", 10)));
pShaderOp->Shaders.at(0).Arguments = compilerOptions;
@ -8355,7 +8356,7 @@ void ExecutionTest::WaveSizeTest() {
VERIFY_IS_TRUE(sizeof(WaveSizeTestData)*MAX_WAVESIZE <= Data.size());
WaveSizeTestData *pInData = (WaveSizeTestData *)Data.data();
memset(&pInData, sizeof(WaveSizeTestData)*MAX_WAVESIZE, 0);
});
}, ShaderOpSet);
// verify expected values
MappedData dataUav;