Add new function to DynamicDrawInterface to support submiting cached DrawPacket (#7337)

New function:
void AddDrawPacket(Scene* scene, ConstPtr<RHI::DrawPacket> drawPacket)
Deprecated function (still supported) :
void AddDrawPacket(Scene* scene, AZStd::unique_ptr<const RHI::DrawPacket> drawPacket)

Signed-off-by: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com>
monroegm-disable-blank-issue-2
Qing Tao 4 years ago committed by GitHub
parent 059550a311
commit 584f9abf16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -162,6 +162,7 @@ namespace AZ
RHI::DrawListTag GetDrawListTag();
//! Create a draw srg
//! Note: the draw srg can only be used in the current frame. It can't be cached and used for following frames.
Data::Instance<ShaderResourceGroup> NewDrawSrg();
//! Get per context srg

@ -59,11 +59,16 @@ namespace AZ
//! Draw a geometry to a scene with a given material
virtual void DrawGeometry(Data::Instance<Material> material, const GeometryData& geometry, ScenePtr scene) = 0;
//! Deprecated. Please use AddDrawPacket(Scene* scene, ConstPtr<RHI::DrawPacket> drawPacket) instead
//! Submits a DrawPacket to the renderer.
//! Note that ownership of the DrawPacket pointer is passed to the dynamic draw system.
//! (it will be cleaned up correctly since the DrawPacket keeps track of the allocator that was used when it was built)
virtual void AddDrawPacket(Scene* scene, AZStd::unique_ptr<const RHI::DrawPacket> drawPacket) = 0;
//! Submits a DrawPacket to the scene.
//! The dynamic draw system will keep a reference for the DrawPacket until it's rendered.
virtual void AddDrawPacket(Scene* scene, ConstPtr<RHI::DrawPacket> drawPacket) = 0;
//! Get DrawLists from any DynamicDrawContext which output to the specified RasterPass.
virtual AZStd::vector<RHI::DrawListView> GetDrawListsForPass(const RasterPass* pass) = 0;
};

@ -35,6 +35,7 @@ namespace AZ
RHI::Ptr<DynamicBuffer> GetDynamicBuffer(uint32_t size, uint32_t alignment) override;
void DrawGeometry(Data::Instance<Material> material, const GeometryData& geometry, ScenePtr scene) override;
void AddDrawPacket(Scene* scene, AZStd::unique_ptr<const RHI::DrawPacket> drawPacket) override;
void AddDrawPacket(Scene* scene, ConstPtr<RHI::DrawPacket> drawPacket) override;
AZStd::vector<RHI::DrawListView> GetDrawListsForPass(const RasterPass* pass) override;
// Submit draw data for selected scene and pipeline
@ -52,7 +53,7 @@ namespace AZ
AZStd::list<RHI::Ptr<DynamicDrawContext>> m_dynamicDrawContexts;
AZStd::mutex m_mutexDrawPackets;
AZStd::map<Scene*, AZStd::vector<AZStd::unique_ptr<const RHI::DrawPacket>>> m_drawPackets;
AZStd::map<Scene*, AZStd::vector<ConstPtr<const RHI::DrawPacket>>> m_drawPackets;
};
}
}

@ -70,7 +70,13 @@ namespace AZ
void DynamicDrawSystem::AddDrawPacket(Scene* scene, AZStd::unique_ptr<const RHI::DrawPacket> drawPacket)
{
AZStd::lock_guard<AZStd::mutex> lock(m_mutexDrawPackets);
m_drawPackets[scene].emplace_back(AZStd::move(drawPacket));
m_drawPackets[scene].emplace_back(ConstPtr<RHI::DrawPacket>(AZStd::move(drawPacket.get())));
}
void DynamicDrawSystem::AddDrawPacket(Scene* scene, ConstPtr<RHI::DrawPacket> drawPacket)
{
AZStd::lock_guard<AZStd::mutex> lock(m_mutexDrawPackets);
m_drawPackets[scene].emplace_back(drawPacket);
}
void DynamicDrawSystem::SubmitDrawData(Scene* scene, AZStd::vector<ViewPtr> views)

Loading…
Cancel
Save