Skip to content

Commit 14eb901

Browse files
committed
Add PatchSPIRVCallback so we don't need sth. like "TestSPIRVResourcesWithSPIRV"
1 parent ae48bbf commit 14eb901

File tree

1 file changed

+42
-72
lines changed

1 file changed

+42
-72
lines changed

Tests/DiligentCoreTest/src/ShaderTools/SPIRVShaderResourcesTest.cpp

Lines changed: 42 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,30 @@ std::vector<unsigned int> LoadSPIRVFromGLSL(const char* FilePath, SHADER_TYPE Sh
175175
return GLSLangUtils::GLSLtoSPIRV(Attribs);
176176
}
177177

178-
void TestSPIRVResourcesWithSPIRV(
179-
const std::vector<unsigned int>& SPIRV,
180-
const char* FilePath,
181-
const std::vector<SPIRVShaderResourceRefAttribs>& RefResources,
182-
SHADER_COMPILER Compiler,
183-
SHADER_TYPE ShaderType = SHADER_TYPE_PIXEL,
184-
SHADER_SOURCE_LANGUAGE SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL)
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)
185184
{
185+
if (Compiler == SHADER_COMPILER_DXC)
186+
{
187+
VERIFY(SourceLanguage == SHADER_SOURCE_LANGUAGE_HLSL, "DXC only supports HLSL");
188+
if (!SPIRVShaderResourcesTest::DXCompiler || !SPIRVShaderResourcesTest::DXCompiler->IsLoaded())
189+
{
190+
GTEST_SKIP() << "DXC compiler is not available";
191+
}
192+
}
193+
194+
std::vector<unsigned int> SPIRV = (SourceLanguage == SHADER_SOURCE_LANGUAGE_GLSL) ?
195+
LoadSPIRVFromGLSL(FilePath, ShaderType) :
196+
LoadSPIRVFromHLSL(FilePath, ShaderType, Compiler);
197+
ASSERT_TRUE(!SPIRV.empty()) << "Failed to compile shader: " << FilePath;
198+
199+
if (PatchSPIRVCallback)
200+
PatchSPIRVCallback(SPIRV);
201+
186202
ShaderDesc ShaderDesc;
187203
ShaderDesc.Name = "SPIRVResources test";
188204
ShaderDesc.ShaderType = ShaderType;
@@ -229,29 +245,6 @@ void TestSPIRVResourcesWithSPIRV(
229245
}
230246
}
231247

232-
void TestSPIRVResources(const char* FilePath,
233-
const std::vector<SPIRVShaderResourceRefAttribs>& RefResources,
234-
SHADER_COMPILER Compiler,
235-
SHADER_TYPE ShaderType = SHADER_TYPE_PIXEL,
236-
SHADER_SOURCE_LANGUAGE SourceLanguage = SHADER_SOURCE_LANGUAGE_HLSL)
237-
{
238-
if (Compiler == SHADER_COMPILER_DXC)
239-
{
240-
VERIFY(SourceLanguage == SHADER_SOURCE_LANGUAGE_HLSL, "DXC only supports HLSL");
241-
if (!SPIRVShaderResourcesTest::DXCompiler || !SPIRVShaderResourcesTest::DXCompiler->IsLoaded())
242-
{
243-
GTEST_SKIP() << "DXC compiler is not available";
244-
}
245-
}
246-
247-
const std::vector<unsigned int> SPIRV = (SourceLanguage == SHADER_SOURCE_LANGUAGE_GLSL) ?
248-
LoadSPIRVFromGLSL(FilePath, ShaderType) :
249-
LoadSPIRVFromHLSL(FilePath, ShaderType, Compiler);
250-
ASSERT_TRUE(!SPIRV.empty()) << "Failed to compile shader: " << FilePath;
251-
252-
TestSPIRVResourcesWithSPIRV(SPIRV, FilePath, RefResources, Compiler, ShaderType, SourceLanguage);
253-
}
254-
255248
using SPIRVResourceType = SPIRVShaderResourceAttribs::ResourceType;
256249

257250
void TestUniformBuffers(SHADER_COMPILER Compiler)
@@ -274,54 +267,31 @@ TEST_F(SPIRVShaderResourcesTest, UniformBuffers_DXC)
274267
TestUniformBuffers(SHADER_COMPILER_DXC);
275268
}
276269

277-
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant)
270+
void TestConvertUBOToPushConstant(SHADER_COMPILER Compiler)
278271
{
279-
const auto& SPIRV = LoadSPIRVFromHLSL("UniformBuffers.psh", SHADER_TYPE_PIXEL, SHADER_COMPILER_GLSLANG);
280-
ASSERT_FALSE(SPIRV.empty()) << "Failed to compile HLSL to SPIRV with glslang";
281-
282-
// Convert CB1 from UniformBuffer to PushConstant
283-
const auto& ConvertedSPIRV = ConvertUBOToPushConstants(SPIRV, "CB1");
284-
ASSERT_FALSE(ConvertedSPIRV.empty()) << "Failed to convert UBO to push constant";
272+
TestSPIRVResources("UniformBuffers.psh",
273+
{
274+
// CB1 should now be a PushConstant (48 bytes = 12 floats)
275+
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 48, 0},
276+
// CB2 remains as UniformBuffer
277+
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
278+
},
279+
Compiler,
280+
SHADER_TYPE_PIXEL,
281+
SHADER_SOURCE_LANGUAGE_HLSL,
282+
[](std::vector<unsigned int> &SPIRV) {
283+
SPIRV = ConvertUBOToPushConstants(SPIRV, "CB1");
284+
});
285+
}
285286

286-
TestSPIRVResourcesWithSPIRV(
287-
ConvertedSPIRV,
288-
"UniformBuffers.psh",
289-
{
290-
// CB1 should now be a PushConstant (48 bytes = 12 floats)
291-
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 48, 0},
292-
// CB2 remains as UniformBuffer
293-
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
294-
},
295-
SHADER_COMPILER_GLSLANG,
296-
SHADER_TYPE_PIXEL);
287+
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant)
288+
{
289+
TestConvertUBOToPushConstant(SHADER_COMPILER_GLSLANG);
297290
}
298291

299292
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_DXC)
300293
{
301-
if (!DXCompiler || !DXCompiler->IsLoaded())
302-
{
303-
LOG_INFO_MESSAGE("HLSL->SPIRV with DXC skipped because DXCompiler is not available\n");
304-
return;
305-
}
306-
307-
const auto& SPIRV = LoadSPIRVFromHLSL("UniformBuffers.psh", SHADER_TYPE_PIXEL, SHADER_COMPILER_DXC);
308-
ASSERT_FALSE(SPIRV.empty()) << "Failed to compile HLSL to SPIRV with DXC";
309-
310-
// Convert CB1 from UniformBuffer to PushConstant
311-
const auto& ConvertedSPIRV = ConvertUBOToPushConstants(SPIRV, "CB1");
312-
ASSERT_FALSE(ConvertedSPIRV.empty()) << "Failed to convert UBO to push constant";
313-
314-
TestSPIRVResourcesWithSPIRV(
315-
ConvertedSPIRV,
316-
"UniformBuffers.psh",
317-
{
318-
// CB1 should now be a PushConstant (48 bytes = 12 floats)
319-
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 48, 0},
320-
// CB2 remains as UniformBuffer
321-
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
322-
},
323-
SHADER_COMPILER_DXC,
324-
SHADER_TYPE_PIXEL);
294+
TestConvertUBOToPushConstant(SHADER_COMPILER_DXC);
325295
}
326296

327297
void TestStorageBuffers(SHADER_COMPILER Compiler)

0 commit comments

Comments
 (0)