@@ -137,6 +137,8 @@ class InlineConstants : public ::testing::Test
137137 pEnv->Reset ();
138138 }
139139
140+ static void TestSignatures (Uint32 NumSignatures);
141+
140142 static void Present ()
141143 {
142144 GPUTestingEnvironment* pEnv = GPUTestingEnvironment::GetInstance ();
@@ -163,7 +165,7 @@ InlineConstants::Resources InlineConstants::sm_Res;
163165FastRandFloat InlineConstants::sm_Rnd{0 , 0 .f , 1 .f };
164166
165167
166- TEST_F ( InlineConstants, ResourceSignature )
168+ void InlineConstants::TestSignatures (Uint32 NumSignatures )
167169{
168170 GPUTestingEnvironment* pEnv = GPUTestingEnvironment::GetInstance ();
169171 IRenderDevice* pDevice = pEnv->GetDevice ();
@@ -191,6 +193,9 @@ TEST_F(InlineConstants, ResourceSignature)
191193 SHADER_RESOURCE_VARIABLE_TYPE PosType = static_cast <SHADER_RESOURCE_VARIABLE_TYPE>(pos_type);
192194 SHADER_RESOURCE_VARIABLE_TYPE ColType = static_cast <SHADER_RESOURCE_VARIABLE_TYPE>(col_type);
193195
196+ RefCntAutoPtr<IPipelineResourceSignature> pPosSign;
197+ RefCntAutoPtr<IPipelineResourceSignature> pColSign;
198+
194199 PipelineResourceSignatureDescX SignDesc{" Inline constants test" };
195200 SignDesc
196201 .AddResource (SHADER_TYPE_VERTEX, " cb0_stat" , 1u , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
@@ -200,9 +205,19 @@ TEST_F(InlineConstants, ResourceSignature)
200205 .AddResource (SHADER_TYPE_VERTEX, " tex0_mut" , SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
201206 .AddResource (SHADER_TYPE_VERTEX, " tex0_dyn" , SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
202207
203- .AddResource (SHADER_TYPE_VERTEX, " cbInlinePositions" , kNumPosConstants , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, PosType, PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS)
208+ .AddResource (SHADER_TYPE_VERTEX, " cbInlinePositions" , kNumPosConstants , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, PosType, PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS);
209+
210+ if (NumSignatures == 2 )
211+ {
212+ pDevice->CreatePipelineResourceSignature (SignDesc, &pPosSign);
213+ ASSERT_TRUE (pPosSign);
204214
205- .AddResource (SHADER_TYPE_VERTEX, " cb1_stat" , 1u , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
215+ SignDesc.Clear ();
216+ SignDesc.Name = " Inline constants test 2" ;
217+ SignDesc.BindingIndex = 1 ;
218+ }
219+
220+ SignDesc.AddResource (SHADER_TYPE_VERTEX, " cb1_stat" , 1u , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
206221 .AddResource (SHADER_TYPE_VERTEX, " cb1_mut" , 1u , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
207222 .AddResource (SHADER_TYPE_VERTEX, " cb1_dyn" , 1u , SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
208223 .AddResource (SHADER_TYPE_VERTEX, " tex1_stat" , SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
@@ -217,24 +232,41 @@ TEST_F(InlineConstants, ResourceSignature)
217232 .AddResource (SHADER_TYPE_VERTEX, " tex2_stat" , SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
218233 .AddResource (SHADER_TYPE_VERTEX, " tex2_mut" , SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
219234 .AddResource (SHADER_TYPE_VERTEX, " tex2_dyn" , SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC);
220- RefCntAutoPtr<IPipelineResourceSignature> pSign;
221- pDevice->CreatePipelineResourceSignature (SignDesc, &pSign);
222- ASSERT_TRUE (pSign);
223235
224- pSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cb0_stat" )->Set (pConstBuffer);
225- pSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " tex0_stat" )->Set (pTexSRV);
226- pSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cb1_stat" )->Set (pConstBuffer);
227- pSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " tex1_stat" )->Set (pTexSRV);
228- pSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cb2_stat" )->Set (pConstBuffer);
229- pSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " tex2_stat" )->Set (pTexSRV);
236+ if (NumSignatures == 1 )
237+ {
238+ pDevice->CreatePipelineResourceSignature (SignDesc, &pPosSign);
239+ ASSERT_TRUE (pPosSign);
240+ pColSign = pPosSign;
241+ }
242+ else if (NumSignatures == 2 )
243+ {
244+ pDevice->CreatePipelineResourceSignature (SignDesc, &pColSign);
245+ ASSERT_TRUE (pColSign);
246+ }
247+ else
248+ {
249+ GTEST_FAIL () << " Invalid number of signatures: " << NumSignatures;
250+ }
251+
252+ pPosSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cb0_stat" )->Set (pConstBuffer);
253+ pPosSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " tex0_stat" )->Set (pTexSRV);
254+ pColSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cb1_stat" )->Set (pConstBuffer);
255+ pColSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " tex1_stat" )->Set (pTexSRV);
256+ pColSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cb2_stat" )->Set (pConstBuffer);
257+ pColSign->GetStaticVariableByName (SHADER_TYPE_VERTEX, " tex2_stat" )->Set (pTexSRV);
230258
231259 GraphicsPipelineStateCreateInfoX PsoCI{" Inline constants test" };
232260 PsoCI
233261 .AddRenderTarget (pSwapChain->GetDesc ().ColorBufferFormat )
234262 .SetPrimitiveTopology (PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
235263 .AddShader (sm_Res.pVS )
236264 .AddShader (sm_Res.pPS )
237- .AddSignature (pSign);
265+ .AddSignature (pPosSign);
266+ if (NumSignatures == 2 )
267+ {
268+ PsoCI.AddSignature (pColSign);
269+ }
238270 PsoCI.GraphicsPipeline .DepthStencilDesc .DepthEnable = False;
239271
240272 RefCntAutoPtr<IPipelineState> pPSO;
@@ -243,46 +275,57 @@ TEST_F(InlineConstants, ResourceSignature)
243275
244276 if (PosType == SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
245277 {
246- IShaderResourceVariable* pVar = pSign ->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cbInlinePositions" );
278+ IShaderResourceVariable* pVar = pPosSign ->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cbInlinePositions" );
247279 ASSERT_TRUE (pVar);
248280 pVar->SetInlineConstants (g_Positions, 0 , kNumPosConstants );
249281 }
250282
251283 if (ColType == SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
252284 {
253- IShaderResourceVariable* pVar = pSign ->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cbInlineColors" );
285+ IShaderResourceVariable* pVar = pColSign ->GetStaticVariableByName (SHADER_TYPE_VERTEX, " cbInlineColors" );
254286 ASSERT_TRUE (pVar);
255287 pVar->SetInlineConstants (g_Colors, 0 , kNumColConstants );
256288 }
257289
258- RefCntAutoPtr<IShaderResourceBinding> pSRB;
259- pSign->CreateShaderResourceBinding (&pSRB, true );
260- ASSERT_TRUE (pSRB);
261-
262- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb0_mut" )->Set (pConstBuffer);
263- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex0_mut" )->Set (pTexSRV);
264- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb1_mut" )->Set (pConstBuffer);
265- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex1_mut" )->Set (pTexSRV);
266- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb2_mut" )->Set (pConstBuffer);
267- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex2_mut" )->Set (pTexSRV);
268- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb0_dyn" )->Set (pConstBuffer);
269- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex0_dyn" )->Set (pTexSRV);
270- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb1_dyn" )->Set (pConstBuffer);
271- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex1_dyn" )->Set (pTexSRV);
272- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb2_dyn" )->Set (pConstBuffer);
273- pSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex2_dyn" )->Set (pTexSRV);
290+ RefCntAutoPtr<IShaderResourceBinding> pPosSRB;
291+ pPosSign->CreateShaderResourceBinding (&pPosSRB, true );
292+ ASSERT_TRUE (pPosSRB);
293+
294+ RefCntAutoPtr<IShaderResourceBinding> pColSRB;
295+ if (NumSignatures == 1 )
296+ {
297+ pColSRB = pPosSRB;
298+ }
299+ else if (NumSignatures == 2 )
300+ {
301+ pColSign->CreateShaderResourceBinding (&pColSRB, true );
302+ ASSERT_TRUE (pColSRB);
303+ }
304+
305+ pPosSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb0_mut" )->Set (pConstBuffer);
306+ pPosSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex0_mut" )->Set (pTexSRV);
307+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb1_mut" )->Set (pConstBuffer);
308+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex1_mut" )->Set (pTexSRV);
309+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb2_mut" )->Set (pConstBuffer);
310+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex2_mut" )->Set (pTexSRV);
311+ pPosSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb0_dyn" )->Set (pConstBuffer);
312+ pPosSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex0_dyn" )->Set (pTexSRV);
313+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb1_dyn" )->Set (pConstBuffer);
314+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex1_dyn" )->Set (pTexSRV);
315+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " cb2_dyn" )->Set (pConstBuffer);
316+ pColSRB->GetVariableByName (SHADER_TYPE_VERTEX, " tex2_dyn" )->Set (pTexSRV);
274317
275318 IShaderResourceVariable* pPosVar = nullptr ;
276319 if (PosType != SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
277320 {
278- pPosVar = pSRB ->GetVariableByName (SHADER_TYPE_VERTEX, " cbInlinePositions" );
321+ pPosVar = pPosSRB ->GetVariableByName (SHADER_TYPE_VERTEX, " cbInlinePositions" );
279322 ASSERT_TRUE (pPosVar);
280323 }
281324
282325 IShaderResourceVariable* pColVar = nullptr ;
283326 if (ColType != SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
284327 {
285- pColVar = pSRB ->GetVariableByName (SHADER_TYPE_VERTEX, " cbInlineColors" );
328+ pColVar = pColSRB ->GetVariableByName (SHADER_TYPE_VERTEX, " cbInlineColors" );
286329 ASSERT_TRUE (pColVar);
287330 }
288331
@@ -297,8 +340,13 @@ TEST_F(InlineConstants, ResourceSignature)
297340 pColVar->SetInlineConstants (g_Colors, 0 , kNumColConstants / 2 );
298341 }
299342
300- pContext->CommitShaderResources (pSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
301- pContext->CommitShaderResources (pSRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
343+ pContext->CommitShaderResources (pPosSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
344+
345+ if (NumSignatures == 2 )
346+ {
347+ pContext->TransitionShaderResources (pColSRB);
348+ pContext->CommitShaderResources (pColSRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
349+ }
302350
303351 if (pColVar != nullptr )
304352 {
@@ -333,4 +381,14 @@ TEST_F(InlineConstants, ResourceSignature)
333381 }
334382}
335383
384+ TEST_F (InlineConstants, ResourceSignature)
385+ {
386+ TestSignatures (1 );
387+ }
388+
389+ TEST_F (InlineConstants, TwoResourceSignatures)
390+ {
391+ TestSignatures (2 );
392+ }
393+
336394} // namespace
0 commit comments