Skip to content

Commit 7c756c7

Browse files
Add inline constants test with two resource signatures (#672)
1 parent 72bb177 commit 7c756c7

File tree

1 file changed

+93
-35
lines changed

1 file changed

+93
-35
lines changed

Tests/DiligentCoreAPITest/src/InlineConstantsTest.cpp

Lines changed: 93 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
163165
FastRandFloat 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,7 @@ 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);
302344

303345
if (pColVar != nullptr)
304346
{
@@ -308,6 +350,12 @@ TEST_F(InlineConstants, ResourceSignature)
308350

309351
pContext->SetPipelineState(pPSO);
310352

353+
if (NumSignatures == 2)
354+
{
355+
pContext->TransitionShaderResources(pColSRB);
356+
pContext->CommitShaderResources(pColSRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
357+
}
358+
311359
if (pPosVar == nullptr)
312360
{
313361
// Draw both triangles as positions are static
@@ -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

Comments
 (0)