Quellcode durchsuchen

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

Helena Kotas vor 4 Jahren
Ursprung
Commit
63fcca6356
1 geänderte Dateien mit 8 neuen und 7 gelöschten Zeilen
  1. 8 7
      tools/clang/unittests/HLSL/ExecutionTest.cpp

+ 8 - 7
tools/clang/unittests/HLSL/ExecutionTest.cpp

@@ -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;