Skip to content

Commit 85992f4

Browse files
committed
add ConvertUBOToPushConstant tests.
1 parent 15a57f2 commit 85992f4

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Tests/DiligentCoreTest/src/ShaderTools/SPIRVShaderResourcesTest.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
#include "SPIRVShaderResources.hpp"
2828
#include "GLSLangUtils.hpp"
29+
#include "SPIRVTools.hpp"
2930
#include "DXCompiler.hpp"
3031
#include "DefaultShaderSourceStreamFactory.h"
3132
#include "RefCntAutoPtr.hpp"
@@ -287,6 +288,52 @@ TEST_F(SPIRVShaderResourcesTest, UniformBuffers_DXC)
287288
});
288289
}
289290

291+
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant)
292+
{
293+
const auto& SPIRV = LoadSPIRVFromHLSL("UniformBuffers.psh", SHADER_TYPE_PIXEL, false);
294+
ASSERT_FALSE(SPIRV.empty()) << "Failed to compile HLSL to SPIRV with glslang";
295+
296+
// Convert CB1 from UniformBuffer to PushConstant
297+
const auto& ConvertedSPIRV = ConvertUBOToPushConstants(SPIRV, "CB1");
298+
ASSERT_FALSE(ConvertedSPIRV.empty()) << "Failed to convert UBO to push constant";
299+
300+
TestSPIRVResourcesInternal("UniformBuffers.psh",
301+
{
302+
// CB1 should now be a PushConstant (48 bytes = 12 floats)
303+
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 48, 0},
304+
// CB2 remains as UniformBuffer
305+
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
306+
},
307+
ConvertedSPIRV,
308+
SHADER_TYPE_PIXEL);
309+
}
310+
311+
TEST_F(SPIRVShaderResourcesTest, ConvertUBOToPushConstant_DXC)
312+
{
313+
if (!DXCompiler || !DXCompiler->IsLoaded())
314+
{
315+
LOG_INFO_MESSAGE("HLSL->SPIRV with DXC skipped because DXCompiler is not available\n");
316+
return;
317+
}
318+
319+
const auto& SPIRV = LoadSPIRVFromHLSL("UniformBuffers.psh", SHADER_TYPE_PIXEL, true);
320+
ASSERT_FALSE(SPIRV.empty()) << "Failed to compile HLSL to SPIRV with DXC";
321+
322+
// Convert CB1 from UniformBuffer to PushConstant
323+
const auto& ConvertedSPIRV = ConvertUBOToPushConstants(SPIRV, "CB1");
324+
ASSERT_FALSE(ConvertedSPIRV.empty()) << "Failed to convert UBO to push constant";
325+
326+
TestSPIRVResourcesInternal("UniformBuffers.psh",
327+
{
328+
// CB1 should now be a PushConstant (48 bytes = 12 floats)
329+
SPIRVShaderResourceRefAttribs{"CB1", 1, SPIRVResourceType::PushConstant, RESOURCE_DIM_BUFFER, 0, 48, 0},
330+
// CB2 remains as UniformBuffer
331+
SPIRVShaderResourceRefAttribs{"CB2", 1, SPIRVResourceType::UniformBuffer, RESOURCE_DIM_BUFFER, 0, 16, 0},
332+
},
333+
ConvertedSPIRV,
334+
SHADER_TYPE_PIXEL);
335+
}
336+
290337
TEST_F(SPIRVShaderResourcesTest, StorageBuffers)
291338
{
292339
TestSPIRVResources("StorageBuffers.psh",

0 commit comments

Comments
 (0)