@@ -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