Skip to content

Commit a3e881f

Browse files
committed
Update SpecConst_NameNotFoundInShader to expect success, Update SpecConst_SizeMismatch to provide insufficient data.
1 parent 34bd28f commit a3e881f

1 file changed

Lines changed: 20 additions & 14 deletions

File tree

Tests/DiligentCoreAPITest/src/ObjectCreationFailure/PSOCreationFailureTest.cpp

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,12 +1760,14 @@ TEST_F(PSOCreationFailureTest, SpecConst_ErrorAtSecondElement)
17601760

17611761

17621762
// ---------------------------------------------------------------------------
1763-
// Vulkan-specific negative tests for BuildSpecializationData (Name->SpecId matching).
1763+
// Vulkan-specific tests for BuildSpecializationData (Name->SpecId matching).
17641764
// These require GLSL shaders with layout(constant_id) declarations so that
17651765
// the reflected specialization constants are available for matching.
17661766
// ---------------------------------------------------------------------------
17671767

1768-
TEST_F(PSOCreationFailureTest, SpecConst_NameNotFoundInShader)
1768+
// Providing a user constant whose name does not match any reflected constant
1769+
// in the shader should succeed silently (the constant is simply skipped).
1770+
TEST_F(PSOCreationFailureTest, SpecConst_UnmatchedNameIsSkipped)
17691771
{
17701772
auto* const pEnv = GPUTestingEnvironment::GetInstance();
17711773
auto* const pDevice = pEnv->GetDevice();
@@ -1803,34 +1805,38 @@ TEST_F(PSOCreationFailureTest, SpecConst_NameNotFoundInShader)
18031805

18041806
RefCntAutoPtr<IShader> pVS;
18051807
{
1806-
ShaderCI.Desc = {"SpecConst NameNotFound VS", SHADER_TYPE_VERTEX, true};
1808+
ShaderCI.Desc = {"SpecConst UnmatchedName VS", SHADER_TYPE_VERTEX, true};
18071809
ShaderCI.Source = VSSource_GLSL;
18081810
pDevice->CreateShader(ShaderCI, &pVS);
18091811
ASSERT_TRUE(pVS);
18101812
}
18111813

18121814
RefCntAutoPtr<IShader> pPS;
18131815
{
1814-
ShaderCI.Desc = {"SpecConst NameNotFound PS", SHADER_TYPE_PIXEL, true};
1816+
ShaderCI.Desc = {"SpecConst UnmatchedName PS", SHADER_TYPE_PIXEL, true};
18151817
ShaderCI.Source = PSSource_GLSL;
18161818
pDevice->CreateShader(ShaderCI, &pPS);
18171819
ASSERT_TRUE(pPS);
18181820
}
18191821

18201822
const float Data = 2.0f;
18211823
SpecializationConstant SpecConsts[] = {
1824+
// This name does not exist in the shader; it should be silently skipped.
18221825
{"sc_NonExistent", SHADER_TYPE_VERTEX, sizeof(Data), &Data},
18231826
};
18241827

1825-
auto PsoCI{GetGraphicsPSOCreateInfo("PSO Create Failure - SpecConst NameNotFoundInShader")};
1828+
auto PsoCI{GetGraphicsPSOCreateInfo("SpecConst UnmatchedNameIsSkipped")};
18261829
PsoCI.pVS = pVS;
18271830
PsoCI.pPS = pPS;
18281831
PsoCI.NumSpecializationConstants = _countof(SpecConsts);
18291832
PsoCI.pSpecializationConstants = SpecConsts;
1830-
TestCreatePSOFailure(PsoCI, "was not found in");
1833+
1834+
RefCntAutoPtr<IPipelineState> pPSO;
1835+
pDevice->CreateGraphicsPipelineState(PsoCI, &pPSO);
1836+
EXPECT_NE(pPSO, nullptr) << "Unmatched specialization constant name should be silently skipped";
18311837
}
18321838

1833-
TEST_F(PSOCreationFailureTest, SpecConst_SizeMismatch)
1839+
TEST_F(PSOCreationFailureTest, SpecConst_InsufficientData)
18341840
{
18351841
auto* const pEnv = GPUTestingEnvironment::GetInstance();
18361842
auto* const pDevice = pEnv->GetDevice();
@@ -1856,24 +1862,24 @@ TEST_F(PSOCreationFailureTest, SpecConst_SizeMismatch)
18561862

18571863
ShaderCreateInfo ShaderCI;
18581864
ShaderCI.SourceLanguage = SHADER_SOURCE_LANGUAGE_GLSL_VERBATIM;
1859-
ShaderCI.Desc = {"SpecConst SizeMismatch CS", SHADER_TYPE_COMPUTE, true};
1865+
ShaderCI.Desc = {"SpecConst InsufficientData CS", SHADER_TYPE_COMPUTE, true};
18601866
ShaderCI.Source = CSSource_GLSL;
18611867

18621868
RefCntAutoPtr<IShader> pCS;
18631869
pDevice->CreateShader(ShaderCI, &pCS);
18641870
ASSERT_TRUE(pCS);
18651871

1866-
// Provide 8 bytes for a 4-byte float constant.
1867-
const double WrongSizeData = 2.0;
1868-
SpecializationConstant SpecConsts[] = {
1869-
{"sc_Value", SHADER_TYPE_COMPUTE, sizeof(WrongSizeData), &WrongSizeData},
1872+
// Provide 2 bytes for a 4-byte float constant (insufficient).
1873+
const Uint16 SmallData = 0;
1874+
SpecializationConstant SpecConsts[] = {
1875+
{"sc_Value", SHADER_TYPE_COMPUTE, sizeof(SmallData), &SmallData},
18701876
};
18711877

1872-
auto PsoCI{GetComputePSOCreateInfo("PSO Create Failure - SpecConst SizeMismatch")};
1878+
auto PsoCI{GetComputePSOCreateInfo("PSO Create Failure - SpecConst InsufficientData")};
18731879
PsoCI.pCS = pCS;
18741880
PsoCI.NumSpecializationConstants = _countof(SpecConsts);
18751881
PsoCI.pSpecializationConstants = SpecConsts;
1876-
TestCreatePSOFailure(PsoCI, "has size mismatch");
1882+
TestCreatePSOFailure(PsoCI, "insufficient data");
18771883
}
18781884

18791885

0 commit comments

Comments
 (0)