@@ -175,12 +175,11 @@ std::vector<unsigned int> LoadSPIRVFromGLSL(const char* FilePath, SHADER_TYPE Sh
175175 return GLSLangUtils::GLSLtoSPIRV (Attribs);
176176}
177177
178- void TestSPIRVResources (const char * FilePath,
179- const std::vector<SPIRVShaderResourceRefAttribs>& RefResources,
180- SHADER_COMPILER Compiler,
181- SHADER_TYPE ShaderType = SHADER_TYPE_PIXEL,
182- SHADER_SOURCE_LANGUAGE SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL,
183- const std::function<void (std::vector<unsigned int >& SPIRV)>& PatchSPIRVCallback = nullptr)
178+ void CompileSPIRV (const char * FilePath,
179+ SHADER_COMPILER Compiler,
180+ SHADER_TYPE ShaderType,
181+ SHADER_SOURCE_LANGUAGE SourceLanguage,
182+ std::vector<unsigned int >& SPIRV)
184183{
185184 if (Compiler == SHADER_COMPILER_DXC)
186185 {
@@ -191,24 +190,31 @@ void TestSPIRVResources(const char*
191190 }
192191 }
193192
194- std::vector< unsigned int > SPIRV = (SourceLanguage == SHADER_SOURCE_LANGUAGE_GLSL) ?
193+ SPIRV = (SourceLanguage == SHADER_SOURCE_LANGUAGE_GLSL) ?
195194 LoadSPIRVFromGLSL (FilePath, ShaderType) :
196195 LoadSPIRVFromHLSL (FilePath, ShaderType, Compiler);
197- VERIFY (!SPIRV.empty (), " Failed to compile shader: " , FilePath);
196+ ASSERT_FALSE (SPIRV.empty ()) << " Failed to compile shader: " << FilePath;
197+ }
198+
199+ void TestSPIRVResources (const char * FilePath,
200+ const std::vector<SPIRVShaderResourceRefAttribs>& RefResources,
201+ SHADER_COMPILER Compiler,
202+ SHADER_TYPE ShaderType = SHADER_TYPE_PIXEL,
203+ SHADER_SOURCE_LANGUAGE SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL,
204+ const std::function<void (std::vector<unsigned int >& SPIRV)>& PatchSPIRVCallback = nullptr)
205+ {
206+ std::vector<unsigned int > SPIRV;
207+ ASSERT_NO_FATAL_FAILURE (CompileSPIRV (FilePath, Compiler, ShaderType, SourceLanguage, SPIRV));
198208
199- if (SPIRV. empty ())
209+ if (:: testing::Test::IsSkipped ())
200210 return ;
201211
202212 if (PatchSPIRVCallback)
203213 {
204214 PatchSPIRVCallback (SPIRV);
205-
206- VERIFY (!SPIRV.empty (), " Failed to patch shader: " , FilePath);
215+ ASSERT_FALSE (SPIRV.empty ()) << " Failed to patch shader: " << FilePath;
207216 }
208217
209- if (SPIRV.empty ())
210- return ;
211-
212218 ShaderDesc ShaderDesc;
213219 ShaderDesc.Name = " SPIRVResources test" ;
214220 ShaderDesc.ShaderType = ShaderType;
@@ -281,7 +287,7 @@ TEST_F(SPIRVShaderResourcesTest, UniformBuffers_DXC)
281287
282288void TestConvertUBOToPushConstant (SHADER_COMPILER Compiler)
283289{
284- std::vector<SPIRVShaderResourceRefAttribs> BaseRefAttribs = {
290+ const std::vector<SPIRVShaderResourceRefAttribs> BaseRefAttribs = {
285291 SPIRVShaderResourceRefAttribs{" CB1" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 48 , 0 },
286292 SPIRVShaderResourceRefAttribs{" CB2" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 16 , 0 },
287293 SPIRVShaderResourceRefAttribs{" CB3" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 32 , 0 },
@@ -294,32 +300,18 @@ void TestConvertUBOToPushConstant(SHADER_COMPILER Compiler)
294300 const char * PatchedAttribName = BaseRefAttribs[i].Name ;
295301
296302 std::vector<SPIRVShaderResourceRefAttribs> PatchedRefAttribs;
297-
298303 PatchedRefAttribs.reserve (BaseRefAttribs.size ());
299-
300304 for (size_t j = 0 ; j < BaseRefAttribs.size (); ++j)
301305 {
306+ const SPIRVShaderResourceRefAttribs& RefAttrib = BaseRefAttribs[j];
302307 // Build a new attrib with Type changed to PushConstant, other members remain the same
303- if (j == i)
304- {
305- PatchedRefAttribs.push_back ({BaseRefAttribs[j].Name ,
306- BaseRefAttribs[j].ArraySize ,
307- SPIRVResourceType::PushConstant,
308- BaseRefAttribs[j].ResourceDim ,
309- BaseRefAttribs[j].IsMS ,
310- BaseRefAttribs[j].BufferStaticSize ,
311- BaseRefAttribs[j].BufferStride });
312- }
313- else
314- {
315- PatchedRefAttribs.push_back ({BaseRefAttribs[j].Name ,
316- BaseRefAttribs[j].ArraySize ,
317- BaseRefAttribs[j].Type ,
318- BaseRefAttribs[j].ResourceDim ,
319- BaseRefAttribs[j].IsMS ,
320- BaseRefAttribs[j].BufferStaticSize ,
321- BaseRefAttribs[j].BufferStride });
322- }
308+ PatchedRefAttribs.push_back ({RefAttrib.Name ,
309+ RefAttrib.ArraySize ,
310+ i == j ? SPIRVResourceType::PushConstant : RefAttrib.Type ,
311+ RefAttrib.ResourceDim ,
312+ RefAttrib.IsMS ,
313+ RefAttrib.BufferStaticSize ,
314+ RefAttrib.BufferStride });
323315 }
324316
325317 TestSPIRVResources (" UniformBuffers.psh" ,
@@ -329,10 +321,6 @@ void TestConvertUBOToPushConstant(SHADER_COMPILER Compiler)
329321 SHADER_SOURCE_LANGUAGE_HLSL,
330322 [PatchedAttribName](std::vector<unsigned int >& SPIRV) {
331323 SPIRV = ConvertUBOToPushConstants (SPIRV, PatchedAttribName);
332- if (SPIRV.empty ())
333- {
334- LOG_ERROR (" ConvertUBOToPushConstants: Could not find uniform buffer block: " , PatchedAttribName);
335- }
336324 });
337325 }
338326}
@@ -349,34 +337,16 @@ TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_DXC)
349337
350338void TestConvertUBOToPushConstant_InvalidBlockName (SHADER_COMPILER Compiler)
351339{
352- TestingEnvironment* const pEnv = TestingEnvironment::GetInstance ();
353-
354- pEnv->SetErrorAllowance (2 , " Errors below are expected: testing ConvertUBOToPushConstants invalid block name failure\n " );
355- pEnv->PushExpectedErrorSubstring (" Failed to patch shader:" , false );
356- pEnv->PushExpectedErrorSubstring (" ConvertUBOToPushConstants: Could not find uniform buffer block" , false );
357-
358340 // "CB5" is not available in given HLSL thus cannot be patched with ConvertUBOToPushConstants.
359341 std::string PatchedAttribName = " CB5" ;
360342
361- TestSPIRVResources (" UniformBuffers.psh" ,
362- {
363- SPIRVShaderResourceRefAttribs{" CB1" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 48 , 0 },
364- SPIRVShaderResourceRefAttribs{" CB2" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 16 , 0 },
365- SPIRVShaderResourceRefAttribs{" CB3" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 32 , 0 },
366- SPIRVShaderResourceRefAttribs{" CB4" , 1 , SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0 , 32 , 0 },
367- },
368- Compiler,
369- SHADER_TYPE_PIXEL,
370- SHADER_SOURCE_LANGUAGE_HLSL,
371- [PatchedAttribName](std::vector<unsigned int >& SPIRV) {
372- SPIRV = ConvertUBOToPushConstants (SPIRV, PatchedAttribName);
373- if (SPIRV.empty ())
374- {
375- LOG_ERROR (" ConvertUBOToPushConstants: Could not find uniform buffer block: " , PatchedAttribName);
376- }
377- });
343+ std::vector<unsigned int > SPIRV;
344+ ASSERT_NO_FATAL_FAILURE (CompileSPIRV (" UniformBuffers.psh" , Compiler, SHADER_TYPE_PIXEL, SHADER_SOURCE_LANGUAGE_HLSL, SPIRV));
345+ if (::testing::Test::IsSkipped ())
346+ return ;
378347
379- pEnv->SetErrorAllowance (0 );
348+ SPIRV = ConvertUBOToPushConstants (SPIRV, PatchedAttribName);
349+ EXPECT_TRUE (SPIRV.empty ());
380350}
381351
382352TEST_F (SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidBlockName_GLSLang)
@@ -391,36 +361,16 @@ TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidBlockName_DXC)
391361
392362void TestConvertUBOToPushConstant_InvalidResourceType (SHADER_COMPILER Compiler)
393363{
394- TestingEnvironment* const pEnv = TestingEnvironment::GetInstance ();
395-
396- pEnv->SetErrorAllowance (2 , " Errors below are expected: testing ConvertUBOToPushConstants invalid resource type failure\n " );
397- pEnv->PushExpectedErrorSubstring (" Failed to patch shader:" , false );
398- pEnv->PushExpectedErrorSubstring (" ConvertUBOToPushConstants: Could not find uniform buffer block" , false );
399-
400364 // "g_ROBuffer" is a ROStorageBuffer and cannot be patched with ConvertUBOToPushConstants.
401365 std::string PatchedAttribName = " g_ROBuffer" ;
402366
403- TestSPIRVResources (" StorageBuffers.psh" ,
404- {
405- // StructuredBuffers have BufferStaticSize=0 (runtime array) and BufferStride is the element size
406- SPIRVShaderResourceRefAttribs{" g_ROBuffer" , 1 , SPIRVResourceType::ROStorageBuffer, RESOURCE_DIM_BUFFER, 0 , 0 , 32 },
407- SPIRVShaderResourceRefAttribs{" g_RWBuffer" , 1 , SPIRVResourceType::RWStorageBuffer, RESOURCE_DIM_BUFFER, 0 , 0 , 64 },
408- // ByteAddressBuffers also have BufferStaticSize=0 and BufferStride=4 (uint size)
409- SPIRVShaderResourceRefAttribs{" g_ROAtomicBuffer" , 1 , SPIRVResourceType::ROStorageBuffer, RESOURCE_DIM_BUFFER, 0 , 0 , 4 },
410- SPIRVShaderResourceRefAttribs{" g_RWAtomicBuffer" , 1 , SPIRVResourceType::RWStorageBuffer, RESOURCE_DIM_BUFFER, 0 , 0 , 4 },
411- },
412- Compiler,
413- SHADER_TYPE_PIXEL,
414- SHADER_SOURCE_LANGUAGE_HLSL,
415- [PatchedAttribName](std::vector<unsigned int >& SPIRV) {
416- SPIRV = ConvertUBOToPushConstants (SPIRV, PatchedAttribName);
417- if (SPIRV.empty ())
418- {
419- LOG_ERROR (" ConvertUBOToPushConstants: Could not find uniform buffer block: " , PatchedAttribName);
420- }
421- });
422-
423- pEnv->SetErrorAllowance (0 );
367+ std::vector<unsigned int > SPIRV;
368+ ASSERT_NO_FATAL_FAILURE (CompileSPIRV (" StorageBuffers.psh" , Compiler, SHADER_TYPE_PIXEL, SHADER_SOURCE_LANGUAGE_HLSL, SPIRV));
369+ if (::testing::Test::IsSkipped ())
370+ return ;
371+
372+ SPIRV = ConvertUBOToPushConstants (SPIRV, PatchedAttribName);
373+ EXPECT_TRUE (SPIRV.empty ());
424374}
425375
426376TEST_F (SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidResourceType_GLSLang)
0 commit comments