From ed9f97eb809de794375bfa215a02de26609742f9 Mon Sep 17 00:00:00 2001 From: Zhou Zhenglong Date: Fri, 5 Aug 2022 15:32:58 +0800 Subject: [PATCH] Revert "RenderData refactored" This reverts commit fd0eb5b5d6bbf9a5c6939b050e68cf2a9722882d. --- cocos/core/pipeline/custom/render-graph.ts | 8 +- .../custom/NativeRenderGraphSetup.cpp | 93 ++++--------------- .../pipeline/custom/RenderGraphTypes.h | 8 +- 3 files changed, 26 insertions(+), 83 deletions(-) diff --git a/cocos/core/pipeline/custom/render-graph.ts b/cocos/core/pipeline/custom/render-graph.ts index d9bdef2103b..1f7a4146f26 100644 --- a/cocos/core/pipeline/custom/render-graph.ts +++ b/cocos/core/pipeline/custom/render-graph.ts @@ -1056,10 +1056,10 @@ export class PresentPass { } export class RenderData { - readonly constants: Map = new Map(); - readonly buffers: Map = new Map(); - readonly textures: Map = new Map(); - readonly samplers: Map = new Map(); + readonly constants: Map = new Map(); + readonly buffers: Map = new Map(); + readonly textures: Map = new Map(); + readonly samplers: Map = new Map(); } //================================================================= diff --git a/native/cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp b/native/cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp index 329e60fcee5..65076d2116b 100644 --- a/native/cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp +++ b/native/cocos/renderer/pipeline/custom/NativeRenderGraphSetup.cpp @@ -143,134 +143,77 @@ render::NameLocalID getNameID( return iter->second; } -ccstd::pmr::vector& getConstantData(RenderData& data, boost::string_view name) { - auto iter = data.constants.find(name); - if (iter == data.constants.end()) { - bool added = false; - std::tie(iter, added) = data.constants.emplace( - std::piecewise_construct, - std::forward_as_tuple(name.data()), - std::forward_as_tuple()); - CC_ENSURES(added); - } - return iter->second; -} - void addMat4( const LayoutGraphData &lg, boost::string_view name, const cc::Mat4 &v, RenderData &data) { + auto nameID = getNameID(lg.constantIndex, name); static_assert(sizeof(Mat4) == 16 * 4, "sizeof(Mat4) is not 64 bytes"); - auto &buffer = getConstantData(data, name); - buffer.resize(sizeof(Mat4)); - memcpy(buffer.data(), v.m, sizeof(v)); + data.constants[nameID.value].resize(sizeof(Mat4)); + memcpy(data.constants[nameID.value].data(), v.m, sizeof(v)); } void addQuaternion(const LayoutGraphData &lg, const ccstd::string &name, const Quaternion &quat, RenderData &data) { auto nameID = getNameID(lg.constantIndex, name); static_assert(sizeof(Quaternion) == 4 * 4, "sizeof(Quaternion) is not 16 bytes"); static_assert(std::is_trivially_copyable::value, "Quaternion is not trivially copyable"); - auto &buffer = getConstantData(data, name); - buffer.resize(sizeof(Quaternion)); - memcpy(buffer.data(), &quat, sizeof(quat)); + data.constants[nameID.value].resize(sizeof(Quaternion)); + memcpy(data.constants[nameID.value].data(), &quat, sizeof(quat)); } void addColor(const LayoutGraphData &lg, const ccstd::string &name, const gfx::Color &color, RenderData &data) { auto nameID = getNameID(lg.constantIndex, name); static_assert(sizeof(gfx::Color) == 4 * 4, "sizeof(Color) is not 16 bytes"); static_assert(std::is_trivially_copyable::value, "Color is not trivially copyable"); - auto &buffer = getConstantData(data, name); - buffer.resize(sizeof(gfx::Color)); - memcpy(buffer.data(), &color, sizeof(color)); + data.constants[nameID.value].resize(sizeof(gfx::Color)); + memcpy(data.constants[nameID.value].data(), &color, sizeof(color)); } void addVec4(const LayoutGraphData &lg, const ccstd::string &name, const Vec4 &vec, RenderData &data) { auto nameID = getNameID(lg.constantIndex, name); static_assert(sizeof(Vec4) == 4 * 4, "sizeof(Vec4) is not 16 bytes"); // static_assert(std::is_trivially_copyable::value, "Vec4 is not trivially copyable"); - auto &buffer = getConstantData(data, name); - buffer.resize(sizeof(Vec4)); - memcpy(buffer.data(), &vec.x, sizeof(vec)); + data.constants[nameID.value].resize(sizeof(Vec4)); + memcpy(data.constants[nameID.value].data(), &vec.x, sizeof(vec)); } void addVec2(const LayoutGraphData &lg, const ccstd::string &name, const Vec2 &vec, RenderData &data) { auto nameID = getNameID(lg.constantIndex, name); static_assert(sizeof(Vec2) == 2 * 4, "sizeof(Vec2) is not 8 bytes"); // static_assert(std::is_trivially_copyable::value, "Vec2 is not trivially copyable"); - auto &buffer = getConstantData(data, name); - buffer.resize(sizeof(Vec2)); - memcpy(buffer.data(), &vec.x, sizeof(vec)); + data.constants[nameID.value].resize(sizeof(Vec2)); + memcpy(data.constants[nameID.value].data(), &vec.x, sizeof(vec)); } void addFloat(const LayoutGraphData &lg, const ccstd::string &name, float v, RenderData &data) { auto nameID = getNameID(lg.constantIndex, name); static_assert(sizeof(float) == 4, "sizeof(float) is not 4 bytes"); - auto &buffer = getConstantData(data, name); - buffer.resize(sizeof(float)); - memcpy(buffer.data(), &v, sizeof(v)); -} - -IntrusivePtr& getBuffer(RenderData& data, boost::string_view name) { - auto iter = data.buffers.find(name); - if (iter == data.buffers.end()) { - bool added = false; - std::tie(iter, added) = data.buffers.emplace( - std::piecewise_construct, - std::forward_as_tuple(name.data()), - std::forward_as_tuple()); - CC_ENSURES(added); - } - return iter->second; -} - -IntrusivePtr& getTexture(RenderData& data, boost::string_view name) { - auto iter = data.textures.find(name); - if (iter == data.textures.end()) { - bool added = false; - std::tie(iter, added) = data.textures.emplace( - std::piecewise_construct, - std::forward_as_tuple(name.data()), - std::forward_as_tuple()); - CC_ENSURES(added); - } - return iter->second; -} - -ObserverPtr& getSampler(RenderData& data, boost::string_view name) { - auto iter = data.samplers.find(name); - if (iter == data.samplers.end()) { - bool added = false; - std::tie(iter, added) = data.samplers.emplace( - std::piecewise_construct, - std::forward_as_tuple(name.data()), - std::forward_as_tuple()); - CC_ENSURES(added); - } - return iter->second; + data.constants[nameID.value].resize(sizeof(float)); + memcpy(data.constants[nameID.value].data(), &v, sizeof(v)); } void addBuffer(const LayoutGraphData &lg, const ccstd::string &name, gfx::Buffer *buffer, RenderData &data) { auto nameID = getNameID(lg.attributeIndex, name); - getBuffer(data, name) = IntrusivePtr(buffer); + data.buffers[nameID.value] = IntrusivePtr(buffer); } void addTexture(const LayoutGraphData &lg, const ccstd::string &name, gfx::Texture *texture, RenderData &data) { auto nameID = getNameID(lg.attributeIndex, name); - getTexture(data, name) = IntrusivePtr(texture); + data.textures[nameID.value] = IntrusivePtr(texture); } void addReadWriteBuffer(const LayoutGraphData &lg, const ccstd::string &name, gfx::Buffer *buffer, RenderData &data) { auto nameID = getNameID(lg.attributeIndex, name); - getBuffer(data, name) = IntrusivePtr(buffer); + data.buffers[nameID.value] = IntrusivePtr(buffer); } void addReadWriteTexture(const LayoutGraphData &lg, const ccstd::string &name, gfx::Texture *texture, RenderData &data) { auto nameID = getNameID(lg.attributeIndex, name); - getTexture(data, name) = IntrusivePtr(texture); + data.textures[nameID.value] = IntrusivePtr(texture); } void addSampler(const LayoutGraphData &lg, const ccstd::string &name, gfx::Sampler *sampler, RenderData &data) { auto nameID = getNameID(lg.attributeIndex, name); - getSampler(data, name).ptr = sampler; + data.samplers[nameID.value].ptr = sampler; } } // namespace diff --git a/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h b/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h index 5ac473e3ba8..db49fc9bc50 100644 --- a/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h +++ b/native/cocos/renderer/pipeline/custom/RenderGraphTypes.h @@ -679,10 +679,10 @@ struct RenderData { RenderData& operator=(RenderData&& rhs) = default; RenderData& operator=(RenderData const& rhs) = delete; - PmrTransparentMap> constants; - PmrTransparentMap> buffers; - PmrTransparentMap> textures; - PmrTransparentMap> samplers; + PmrUnorderedMap> constants; + PmrUnorderedMap> buffers; + PmrUnorderedMap> textures; + PmrUnorderedMap> samplers; }; struct RenderGraph {