Skip to content

Commit 029c4f7

Browse files
Simplify tests
1 parent facb350 commit 029c4f7

File tree

2 files changed

+36
-95
lines changed

2 files changed

+36
-95
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: 35 additions & 94 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,28 @@ 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+
}
198198

199-
if (SPIRV.empty())
200-
return;
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+
CompileSPIRV(FilePath, Compiler, ShaderType, SourceLanguage, SPIRV);
201208

202209
if (PatchSPIRVCallback)
203210
{
204211
PatchSPIRVCallback(SPIRV);
205-
206-
VERIFY(!SPIRV.empty(), "Failed to patch shader: ", FilePath);
212+
ASSERT_FALSE(SPIRV.empty()) << "Failed to patch shader: " << FilePath;
207213
}
208214

209-
if (SPIRV.empty())
210-
return;
211-
212215
ShaderDesc ShaderDesc;
213216
ShaderDesc.Name = "SPIRVResources test";
214217
ShaderDesc.ShaderType = ShaderType;
@@ -281,7 +284,7 @@ TEST_F(SPIRVShaderResourcesTest, UniformBuffers_DXC)
281284

282285
void TestConvertUBOToPushConstant(SHADER_COMPILER Compiler)
283286
{
284-
std::vector<SPIRVShaderResourceRefAttribs> BaseRefAttribs = {
287+
const std::vector<SPIRVShaderResourceRefAttribs> BaseRefAttribs = {
285288
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 48, 0},
286289
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
287290
SPIRVShaderResourceRefAttribs{"CB3", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 32, 0},
@@ -294,32 +297,18 @@ void TestConvertUBOToPushConstant(SHADER_COMPILER Compiler)
294297
const char* PatchedAttribName = BaseRefAttribs[i].Name;
295298

296299
std::vector<SPIRVShaderResourceRefAttribs> PatchedRefAttribs;
297-
298300
PatchedRefAttribs.reserve(BaseRefAttribs.size());
299-
300301
for (size_t j = 0; j < BaseRefAttribs.size(); ++j)
301302
{
303+
const SPIRVShaderResourceRefAttribs& RefAttrib = BaseRefAttribs[j];
302304
// 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-
}
305+
PatchedRefAttribs.push_back({RefAttrib.Name,
306+
RefAttrib.ArraySize,
307+
i == j ? SPIRVResourceType::PushConstant : RefAttrib.Type,
308+
RefAttrib.ResourceDim,
309+
RefAttrib.IsMS,
310+
RefAttrib.BufferStaticSize,
311+
RefAttrib.BufferStride});
323312
}
324313

325314
TestSPIRVResources("UniformBuffers.psh",
@@ -329,10 +318,6 @@ void TestConvertUBOToPushConstant(SHADER_COMPILER Compiler)
329318
SHADER_SOURCE_LANGUAGE_HLSL,
330319
[PatchedAttribName](std::vector<unsigned int>& SPIRV) {
331320
SPIRV = ConvertUBOToPushConstants(SPIRV, PatchedAttribName);
332-
if (SPIRV.empty())
333-
{
334-
LOG_ERROR("ConvertUBOToPushConstants: Could not find uniform buffer block: ", PatchedAttribName);
335-
}
336321
});
337322
}
338323
}
@@ -349,34 +334,13 @@ TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_DXC)
349334

350335
void TestConvertUBOToPushConstant_InvalidBlockName(SHADER_COMPILER Compiler)
351336
{
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-
358337
//"CB5" is not available in given HLSL thus cannot be patched with ConvertUBOToPushConstants.
359338
std::string PatchedAttribName = "CB5";
360339

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-
});
378-
379-
pEnv->SetErrorAllowance(0);
340+
std::vector<unsigned int> SPIRV;
341+
CompileSPIRV("UniformBuffers.psh", Compiler, SHADER_TYPE_PIXEL, SHADER_SOURCE_LANGUAGE_HLSL, SPIRV);
342+
SPIRV = ConvertUBOToPushConstants(SPIRV, PatchedAttribName);
343+
EXPECT_TRUE(SPIRV.empty());
380344
}
381345

382346
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidBlockName_GLSLang)
@@ -391,36 +355,13 @@ TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidBlockName_DXC)
391355

392356
void TestConvertUBOToPushConstant_InvalidResourceType(SHADER_COMPILER Compiler)
393357
{
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-
400358
//"g_ROBuffer" is a ROStorageBuffer and cannot be patched with ConvertUBOToPushConstants.
401359
std::string PatchedAttribName = "g_ROBuffer";
402360

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);
361+
std::vector<unsigned int> SPIRV;
362+
CompileSPIRV("StorageBuffers.psh", Compiler, SHADER_TYPE_PIXEL, SHADER_SOURCE_LANGUAGE_HLSL, SPIRV);
363+
SPIRV = ConvertUBOToPushConstants(SPIRV, PatchedAttribName);
364+
EXPECT_TRUE(SPIRV.empty());
424365
}
425366

426367
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_InvalidResourceType_GLSLang)

0 commit comments

Comments
 (0)