ATOM-6088 Unified approach to send draws to a single viewport
- Created a template class TagRegistery which implements the previous DrawListTagRegistry. The template is used for both DrawListTagRegistry and DrawFilterTagRegistry - Added DrawFilterTag to DrawItemKeyPair - Added DrawFilterMask support in DrawPacket and DrawPacketBuilder - Added CreateDynamicContext for render pipeline which allows draw to selected render pipeline. - Updated RasterPass's BuildCommandListInternal function to filter draw items for its owner RenderPipeline. - Updated RHI unit tests.
This commit is contained in:
@@ -170,12 +170,10 @@ namespace UnitTest
|
||||
RHITestFixture::SetUp();
|
||||
|
||||
m_factory.reset(aznew Factory());
|
||||
m_drawListTagRegistry = RHI::DrawListTagRegistry::Create();
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{
|
||||
m_drawListTagRegistry = nullptr;
|
||||
m_factory.reset();
|
||||
|
||||
RHITestFixture::TearDown();
|
||||
@@ -184,7 +182,7 @@ namespace UnitTest
|
||||
protected:
|
||||
static const uint32_t s_randomSeed = 1234;
|
||||
|
||||
RHI::Ptr<RHI::DrawListTagRegistry> m_drawListTagRegistry;
|
||||
RHI::DrawListTagRegistry m_drawListTagRegistry;
|
||||
RHI::DrawListContext m_drawListContext;
|
||||
|
||||
AZStd::unique_ptr<Factory> m_factory;
|
||||
@@ -192,12 +190,12 @@ namespace UnitTest
|
||||
|
||||
TEST_F(DrawPacketTest, TestDrawListTagRegistryNullCase)
|
||||
{
|
||||
RHI::DrawListTag nullTag = m_drawListTagRegistry->AcquireTag(Name());
|
||||
RHI::DrawListTag nullTag = m_drawListTagRegistry.AcquireTag(Name());
|
||||
EXPECT_TRUE(nullTag.IsNull());
|
||||
EXPECT_EQ(m_drawListTagRegistry->GetAllocatedTagCount(), 0);
|
||||
EXPECT_EQ(m_drawListTagRegistry.GetAllocatedTagCount(), 0);
|
||||
|
||||
m_drawListTagRegistry->ReleaseTag(nullTag);
|
||||
EXPECT_EQ(m_drawListTagRegistry->GetAllocatedTagCount(), 0);
|
||||
m_drawListTagRegistry.ReleaseTag(nullTag);
|
||||
EXPECT_EQ(m_drawListTagRegistry.GetAllocatedTagCount(), 0);
|
||||
}
|
||||
|
||||
TEST_F(DrawPacketTest, TestDrawListTagRegistrySimple)
|
||||
@@ -205,39 +203,39 @@ namespace UnitTest
|
||||
const Name forwardName1("Forward");
|
||||
const Name forwardName2("forward");
|
||||
|
||||
RHI::DrawListTag forwardTag1 = m_drawListTagRegistry->AcquireTag(forwardName1);
|
||||
RHI::DrawListTag forwardTag2 = m_drawListTagRegistry->AcquireTag(forwardName2);
|
||||
RHI::DrawListTag forwardTag1 = m_drawListTagRegistry.AcquireTag(forwardName1);
|
||||
RHI::DrawListTag forwardTag2 = m_drawListTagRegistry.AcquireTag(forwardName2);
|
||||
|
||||
EXPECT_FALSE(forwardTag1.IsNull());
|
||||
EXPECT_FALSE(forwardTag2.IsNull());
|
||||
EXPECT_NE(forwardTag1, forwardTag2);
|
||||
|
||||
RHI::DrawListTag forwardTag3 = m_drawListTagRegistry->AcquireTag(forwardName1);
|
||||
RHI::DrawListTag forwardTag3 = m_drawListTagRegistry.AcquireTag(forwardName1);
|
||||
EXPECT_EQ(forwardTag1, forwardTag3);
|
||||
|
||||
m_drawListTagRegistry->ReleaseTag(forwardTag1);
|
||||
m_drawListTagRegistry->ReleaseTag(forwardTag2);
|
||||
m_drawListTagRegistry->ReleaseTag(forwardTag3);
|
||||
m_drawListTagRegistry.ReleaseTag(forwardTag1);
|
||||
m_drawListTagRegistry.ReleaseTag(forwardTag2);
|
||||
m_drawListTagRegistry.ReleaseTag(forwardTag3);
|
||||
|
||||
EXPECT_EQ(m_drawListTagRegistry->GetAllocatedTagCount(), 0);
|
||||
EXPECT_EQ(m_drawListTagRegistry.GetAllocatedTagCount(), 0);
|
||||
}
|
||||
|
||||
TEST_F(DrawPacketTest, TestDrawListTagRegistryDeAllocateAssert)
|
||||
{
|
||||
AZ_TEST_START_ASSERTTEST;
|
||||
EXPECT_EQ(m_drawListTagRegistry->GetAllocatedTagCount(), 0);
|
||||
EXPECT_EQ(m_drawListTagRegistry.GetAllocatedTagCount(), 0);
|
||||
|
||||
const Name tagName{"Test"};
|
||||
|
||||
RHI::DrawListTag tag = m_drawListTagRegistry->AcquireTag(tagName);
|
||||
m_drawListTagRegistry->AcquireTag(tagName);
|
||||
m_drawListTagRegistry->AcquireTag(tagName);
|
||||
m_drawListTagRegistry->ReleaseTag(tag);
|
||||
m_drawListTagRegistry->ReleaseTag(tag);
|
||||
m_drawListTagRegistry->ReleaseTag(tag);
|
||||
RHI::DrawListTag tag = m_drawListTagRegistry.AcquireTag(tagName);
|
||||
m_drawListTagRegistry.AcquireTag(tagName);
|
||||
m_drawListTagRegistry.AcquireTag(tagName);
|
||||
m_drawListTagRegistry.ReleaseTag(tag);
|
||||
m_drawListTagRegistry.ReleaseTag(tag);
|
||||
m_drawListTagRegistry.ReleaseTag(tag);
|
||||
|
||||
// One additional forfeit should assert.
|
||||
m_drawListTagRegistry->ReleaseTag(tag);
|
||||
m_drawListTagRegistry.ReleaseTag(tag);
|
||||
AZ_TEST_STOP_ASSERTTEST(1);
|
||||
}
|
||||
|
||||
@@ -256,15 +254,15 @@ namespace UnitTest
|
||||
// Acquire
|
||||
if (random.GetRandom() % 2)
|
||||
{
|
||||
RHI::DrawListTag tag = m_drawListTagRegistry->AcquireTag(tagNameUnique);
|
||||
RHI::DrawListTag tag = m_drawListTagRegistry.AcquireTag(tagNameUnique);
|
||||
|
||||
if (tag.IsNull())
|
||||
{
|
||||
EXPECT_EQ(m_drawListTagRegistry->GetAllocatedTagCount(), RHI::Limits::Pipeline::DrawListTagCountMax);
|
||||
EXPECT_EQ(m_drawListTagRegistry.GetAllocatedTagCount(), RHI::Limits::Pipeline::DrawListTagCountMax);
|
||||
}
|
||||
else
|
||||
{
|
||||
EXPECT_LT(m_drawListTagRegistry->GetAllocatedTagCount(), RHI::Limits::Pipeline::DrawListTagCountMax);
|
||||
EXPECT_LT(m_drawListTagRegistry.GetAllocatedTagCount(), RHI::Limits::Pipeline::DrawListTagCountMax);
|
||||
acquiredTags.emplace_back(tag);
|
||||
}
|
||||
}
|
||||
@@ -276,26 +274,26 @@ namespace UnitTest
|
||||
|
||||
RHI::DrawListTag tag = acquiredTags[tagIndex];
|
||||
|
||||
size_t allocationCountBefore = m_drawListTagRegistry->GetAllocatedTagCount();
|
||||
m_drawListTagRegistry->ReleaseTag(tag);
|
||||
size_t allocationCountAfter = m_drawListTagRegistry->GetAllocatedTagCount();
|
||||
size_t allocationCountBefore = m_drawListTagRegistry.GetAllocatedTagCount();
|
||||
m_drawListTagRegistry.ReleaseTag(tag);
|
||||
size_t allocationCountAfter = m_drawListTagRegistry.GetAllocatedTagCount();
|
||||
|
||||
EXPECT_EQ(allocationCountBefore - allocationCountAfter, 1);
|
||||
|
||||
acquiredTags.erase(acquiredTags.begin() + tagIndex);
|
||||
}
|
||||
|
||||
EXPECT_EQ(acquiredTags.size(), m_drawListTagRegistry->GetAllocatedTagCount());
|
||||
EXPECT_EQ(acquiredTags.size(), m_drawListTagRegistry.GetAllocatedTagCount());
|
||||
}
|
||||
|
||||
// Erase all references, make sure the registry is empty again.
|
||||
for (RHI::DrawListTag tag : acquiredTags)
|
||||
{
|
||||
m_drawListTagRegistry->ReleaseTag(tag);
|
||||
m_drawListTagRegistry.ReleaseTag(tag);
|
||||
}
|
||||
acquiredTags.clear();
|
||||
|
||||
EXPECT_EQ(m_drawListTagRegistry->GetAllocatedTagCount(), 0);
|
||||
EXPECT_EQ(m_drawListTagRegistry.GetAllocatedTagCount(), 0);
|
||||
}
|
||||
|
||||
TEST_F(DrawPacketTest, DrawPacketEmpty)
|
||||
|
||||
Reference in New Issue
Block a user