Skip to content

Commit 815c5c6

Browse files
Simplify tests
1 parent facb350 commit 815c5c6

File tree

2 files changed

+43
-93
lines changed

2 files changed

+43
-93
lines changed

Graphics/ShaderTools/include/SPIRVTools.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2022 Diligent Graphics LLC
2+
* Copyright 2019-2025 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

Tests/DiligentCoreTest/src/ShaderTools/SPIRVShaderResourcesTest.cpp

Lines changed: 42 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -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

282288
void 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

350338
void 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

382352
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidBlockName_GLSLang)
@@ -391,36 +361,16 @@ TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidBlockName_DXC)
391361

392362
void 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

426376
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidResourceType_GLSLang)

0 commit comments

Comments
 (0)