Skip to content

Commit 2dacc9d

Browse files
Improve inline constants test
1 parent 36006c1 commit 2dacc9d

File tree

1 file changed

+96
-11
lines changed

1 file changed

+96
-11
lines changed

Tests/DiligentCoreAPITest/src/InlineConstantsTest.cpp

Lines changed: 96 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ float4 g_Colors[] = {
9797
float4{0.f, 0.f, 1.f, 1.f},
9898
};
9999

100+
constexpr Uint32 kNumPosConstants = sizeof(g_Positions) / 4;
101+
constexpr Uint32 kNumColConstants = sizeof(g_Colors) / 4;
102+
100103
class InlineConstants : public ::testing::Test
101104
{
102105
protected:
@@ -171,6 +174,13 @@ TEST_F(InlineConstants, ResourceSignature)
171174
GTEST_SKIP();
172175
}
173176

177+
RefCntAutoPtr<IBuffer> pConstBuffer = pEnv->CreateBuffer({"InlineConstants - dummy const buffer", 256, BIND_UNIFORM_BUFFER});
178+
ASSERT_TRUE(pConstBuffer);
179+
RefCntAutoPtr<ITexture> pTexture = pEnv->CreateTexture("InlineConstants - dummy texture", TEX_FORMAT_RGBA8_UNORM, BIND_SHADER_RESOURCE, 64, 64);
180+
ASSERT_TRUE(pTexture);
181+
ITextureView* pTexSRV = pTexture->GetDefaultView(TEXTURE_VIEW_SHADER_RESOURCE);
182+
ASSERT_TRUE(pTexSRV);
183+
174184
for (Uint32 pos_type = 0; pos_type < SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES; ++pos_type)
175185
{
176186
for (Uint32 col_type = 0; col_type < SHADER_RESOURCE_VARIABLE_TYPE_NUM_TYPES; ++col_type)
@@ -183,12 +193,41 @@ TEST_F(InlineConstants, ResourceSignature)
183193

184194
PipelineResourceSignatureDescX SignDesc;
185195
SignDesc
186-
.AddResource(SHADER_TYPE_VERTEX, "cbInlinePositions", Uint32{sizeof(g_Positions) / 4}, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, PosType, PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS)
187-
.AddResource(SHADER_TYPE_VERTEX, "cbInlineColors", Uint32{sizeof(g_Colors) / 4}, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, ColType, PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS);
196+
.AddResource(SHADER_TYPE_VERTEX, "cb0_stat", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
197+
.AddResource(SHADER_TYPE_VERTEX, "cb0_mut", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
198+
.AddResource(SHADER_TYPE_VERTEX, "cb0_dyn", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
199+
.AddResource(SHADER_TYPE_VERTEX, "tex0_stat", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
200+
.AddResource(SHADER_TYPE_VERTEX, "tex0_mut", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
201+
.AddResource(SHADER_TYPE_VERTEX, "tex0_dyn", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
202+
203+
.AddResource(SHADER_TYPE_VERTEX, "cbInlinePositions", kNumPosConstants, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, PosType, PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS)
204+
205+
.AddResource(SHADER_TYPE_VERTEX, "cb1_stat", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
206+
.AddResource(SHADER_TYPE_VERTEX, "cb1_mut", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
207+
.AddResource(SHADER_TYPE_VERTEX, "cb1_dyn", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
208+
.AddResource(SHADER_TYPE_VERTEX, "tex1_stat", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
209+
.AddResource(SHADER_TYPE_VERTEX, "tex1_mut", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
210+
.AddResource(SHADER_TYPE_VERTEX, "tex1_dyn", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
211+
212+
.AddResource(SHADER_TYPE_VERTEX, "cbInlineColors", kNumColConstants, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, ColType, PIPELINE_RESOURCE_FLAG_INLINE_CONSTANTS)
213+
214+
.AddResource(SHADER_TYPE_VERTEX, "cb2_stat", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
215+
.AddResource(SHADER_TYPE_VERTEX, "cb2_mut", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
216+
.AddResource(SHADER_TYPE_VERTEX, "cb2_dyn", 1u, SHADER_RESOURCE_TYPE_CONSTANT_BUFFER, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC)
217+
.AddResource(SHADER_TYPE_VERTEX, "tex2_stat", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
218+
.AddResource(SHADER_TYPE_VERTEX, "tex2_mut", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_MUTABLE)
219+
.AddResource(SHADER_TYPE_VERTEX, "tex2_dyn", SHADER_RESOURCE_TYPE_TEXTURE_SRV, SHADER_RESOURCE_VARIABLE_TYPE_DYNAMIC);
188220
RefCntAutoPtr<IPipelineResourceSignature> pSign;
189221
pDevice->CreatePipelineResourceSignature(SignDesc, &pSign);
190222
ASSERT_TRUE(pSign);
191223

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);
230+
192231
GraphicsPipelineStateCreateInfoX PsoCI{"Inline constants test"};
193232
PsoCI
194233
.AddRenderTarget(pSwapChain->GetDesc().ColorBufferFormat)
@@ -206,44 +245,90 @@ TEST_F(InlineConstants, ResourceSignature)
206245
{
207246
IShaderResourceVariable* pVar = pSign->GetStaticVariableByName(SHADER_TYPE_VERTEX, "cbInlinePositions");
208247
ASSERT_TRUE(pVar);
209-
pVar->SetInlineConstants(g_Positions, 0, sizeof(g_Positions) / 4);
248+
pVar->SetInlineConstants(g_Positions, 0, kNumPosConstants);
210249
}
211250

212251
if (ColType == SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
213252
{
214253
IShaderResourceVariable* pVar = pSign->GetStaticVariableByName(SHADER_TYPE_VERTEX, "cbInlineColors");
215254
ASSERT_TRUE(pVar);
216-
pVar->SetInlineConstants(g_Colors, 0, sizeof(g_Colors) / 4);
255+
pVar->SetInlineConstants(g_Colors, 0, kNumColConstants);
217256
}
218257

219258
RefCntAutoPtr<IShaderResourceBinding> pSRB;
220259
pSign->CreateShaderResourceBinding(&pSRB, true);
221260
ASSERT_TRUE(pSRB);
222261

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);
274+
275+
IShaderResourceVariable* pPosVar = nullptr;
223276
if (PosType != SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
224277
{
225-
IShaderResourceVariable* pVar = pSRB->GetVariableByName(SHADER_TYPE_VERTEX, "cbInlinePositions");
226-
ASSERT_TRUE(pVar);
227-
pVar->SetInlineConstants(g_Positions, 0, sizeof(g_Positions) / 4);
278+
pPosVar = pSRB->GetVariableByName(SHADER_TYPE_VERTEX, "cbInlinePositions");
279+
ASSERT_TRUE(pPosVar);
228280
}
229281

282+
IShaderResourceVariable* pColVar = nullptr;
230283
if (ColType != SHADER_RESOURCE_VARIABLE_TYPE_STATIC)
231284
{
232-
IShaderResourceVariable* pVar = pSRB->GetVariableByName(SHADER_TYPE_VERTEX, "cbInlineColors");
233-
ASSERT_TRUE(pVar);
234-
pVar->SetInlineConstants(g_Colors, 0, sizeof(g_Colors) / 4);
285+
pColVar = pSRB->GetVariableByName(SHADER_TYPE_VERTEX, "cbInlineColors");
286+
ASSERT_TRUE(pColVar);
235287
}
236288

237289
ITextureView* pRTVs[] = {pSwapChain->GetCurrentBackBufferRTV()};
238290
pContext->SetRenderTargets(1, pRTVs, nullptr, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
239291
pContext->ClearRenderTarget(pRTVs[0], ClearColor, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
240292

293+
294+
if (pColVar != nullptr)
295+
{
296+
// Set first half of color constants before committing SRB
297+
pColVar->SetInlineConstants(g_Colors, 0, kNumColConstants / 2);
298+
}
299+
241300
pContext->CommitShaderResources(pSRB, RESOURCE_STATE_TRANSITION_MODE_TRANSITION);
242301
pContext->CommitShaderResources(pSRB, RESOURCE_STATE_TRANSITION_MODE_VERIFY);
302+
303+
if (pColVar != nullptr)
304+
{
305+
// Set second half of color constants after committing SRB
306+
pColVar->SetInlineConstants(g_Colors[0].Data() + kNumColConstants / 2, kNumColConstants / 2, kNumColConstants / 2);
307+
}
308+
243309
pContext->SetPipelineState(pPSO);
244-
pContext->Draw({6, DRAW_FLAG_VERIFY_ALL});
310+
311+
if (pPosVar == nullptr)
312+
{
313+
// Draw both triangles as positions are static
314+
pContext->Draw({6, DRAW_FLAG_VERIFY_ALL});
315+
}
316+
else
317+
{
318+
// Draw first triangle
319+
pPosVar->SetInlineConstants(g_Positions, 0, kNumPosConstants / 2);
320+
pContext->Draw({3, DRAW_FLAG_VERIFY_ALL});
321+
322+
// Draw second triangle
323+
pPosVar->SetInlineConstants(g_Positions[0].Data() + kNumPosConstants / 2, 0, kNumPosConstants / 2);
324+
pContext->Draw({3, DRAW_FLAG_VERIFY_ALL});
325+
}
245326

246327
Present();
328+
329+
std::cout << TestingEnvironment::GetCurrentTestStatusString() << ' '
330+
<< " Pos " << GetShaderVariableTypeLiteralName(PosType) << ','
331+
<< " Col " << GetShaderVariableTypeLiteralName(ColType) << std::endl;
247332
}
248333
}
249334
}

0 commit comments

Comments
 (0)