From 0a5befb6fcaa7453d3d7977c1656a34c23952d19 Mon Sep 17 00:00:00 2001 From: Yiwen <15225434259xue@gmail.com> Date: Wed, 20 Sep 2023 21:31:53 +0800 Subject: [PATCH 01/11] physics removes useless cone twist joint (#16285) --- cocos/physics/framework/deprecated.ts | 6 ------ cocos/physics/framework/physics-enum.ts | 8 -------- cocos/physics/framework/physics-selector.ts | 17 ++--------------- cocos/physics/spec/i-physics-constraint.ts | 5 ----- 4 files changed, 2 insertions(+), 34 deletions(-) diff --git a/cocos/physics/framework/deprecated.ts b/cocos/physics/framework/deprecated.ts index 6a9d9519d11..fdb15eec610 100644 --- a/cocos/physics/framework/deprecated.ts +++ b/cocos/physics/framework/deprecated.ts @@ -148,12 +148,6 @@ removeProperty(RigidBody.prototype, 'RigidBody.prototype', [ }, ]); -removeProperty(EConstraintType, 'EConstraintType.prototype', [ - { - name: 'CONE_TWIST', - }, -]); - /** * Alias of [[RigidBody]] * @deprecated Since v1.2 diff --git a/cocos/physics/framework/physics-enum.ts b/cocos/physics/framework/physics-enum.ts index a84d210aa48..de4bcbc3de8 100644 --- a/cocos/physics/framework/physics-enum.ts +++ b/cocos/physics/framework/physics-enum.ts @@ -270,14 +270,6 @@ export enum EConstraintType { * 铰链约束。 */ HINGE, - /** - * @en - * Cone twist constraint. - * @zh - * 锥形扭转约束。 - * @deprecated coneTwist is deprecated, please use configurable instead - */ - CONE_TWIST, /** * @en * Fixed constraint. diff --git a/cocos/physics/framework/physics-selector.ts b/cocos/physics/framework/physics-selector.ts index 9be81501389..7bb003d67e0 100644 --- a/cocos/physics/framework/physics-selector.ts +++ b/cocos/physics/framework/physics-selector.ts @@ -26,7 +26,7 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { EDITOR, TEST } from 'internal:constants'; -import { IBaseConstraint, IPointToPointConstraint, IHingeConstraint, IConeTwistConstraint, IFixedConstraint, +import { IBaseConstraint, IPointToPointConstraint, IHingeConstraint, IFixedConstraint, IConfigurableConstraint } from '../spec/i-physics-constraint'; import { IBoxShape, ISphereShape, ICapsuleShape, ITrimeshShape, ICylinderShape, @@ -58,10 +58,6 @@ interface IPhysicsWrapperObject { PlaneShape?: Constructor, PointToPointConstraint?: Constructor, HingeConstraint?: Constructor, - /** - * @deprecated cone twist constraint is deprecated, please use configurable instead - */ - ConeTwistConstraint?: Constructor, FixedConstraint?: Constructor, ConfigurableConstraint?: Constructor, } @@ -236,10 +232,6 @@ enum ECheckType { // JOINT // PointToPointConstraint, HingeConstraint, - /** - * @deprecated cone twist constraint is deprecated, please use configurable instead - */ - ConeTwistConstraint, FixedConstraint, ConfigurableConstraint, // CHARACTER CONTROLLER // @@ -422,7 +414,7 @@ function initColliderProxy (): void { const CREATE_CONSTRAINT_PROXY = { INITED: false }; -interface IEntireConstraint extends IPointToPointConstraint, IHingeConstraint, IConeTwistConstraint, IFixedConstraint, IConfigurableConstraint { } +interface IEntireConstraint extends IPointToPointConstraint, IHingeConstraint, IFixedConstraint, IConfigurableConstraint { } const ENTIRE_CONSTRAINT: IEntireConstraint = { impl: null, initialize: FUNC, @@ -488,11 +480,6 @@ function initConstraintProxy (): void { return new selector.wrapper.HingeConstraint!(); }; - CREATE_CONSTRAINT_PROXY[EConstraintType.CONE_TWIST] = function createConeTwistConstraint (): IConeTwistConstraint { - if (check(selector.wrapper.ConeTwistConstraint, ECheckType.ConeTwistConstraint)) { return ENTIRE_CONSTRAINT; } - return new selector.wrapper.ConeTwistConstraint!(); - }; - CREATE_CONSTRAINT_PROXY[EConstraintType.FIXED] = function createFixedConstraint (): IFixedConstraint { if (check(selector.wrapper.FixedConstraint, ECheckType.FixedConstraint)) { return ENTIRE_CONSTRAINT; } return new selector.wrapper.FixedConstraint!(); diff --git a/cocos/physics/spec/i-physics-constraint.ts b/cocos/physics/spec/i-physics-constraint.ts index 91664b25717..ad6692b20e5 100644 --- a/cocos/physics/spec/i-physics-constraint.ts +++ b/cocos/physics/spec/i-physics-constraint.ts @@ -96,8 +96,3 @@ export interface IConfigurableConstraint extends IBaseConstraint { setBreakForce(v: number): void; setBreakTorque(v: number): void; } - -/** - * @deprecated ConeTwistConstraint is deprecated, please use ConfigurableConstraint instead - */ -export type IConeTwistConstraint = IBaseConstraint From 2039c33462bf299d2bd5e05e456ecceb6e01e4b0 Mon Sep 17 00:00:00 2001 From: Zeqiang Li Date: Thu, 21 Sep 2023 17:31:07 +0800 Subject: [PATCH 02/11] correct renderpass reorder logic (#16294) --- .../pipeline/custom/FrameGraphDispatcher.cpp | 188 ++++++++++-------- 1 file changed, 109 insertions(+), 79 deletions(-) diff --git a/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp b/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp index 4d0f5afe176..0324502effa 100644 --- a/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp +++ b/native/cocos/renderer/pipeline/custom/FrameGraphDispatcher.cpp @@ -791,15 +791,22 @@ struct AttachmentSortKey { gfx::SampleCount samples; AccessType accessType; uint32_t attachmentWeight; + uint32_t slotID; const ccstd::pmr::string name; }; -struct AttachmentComparator { +struct SubpassComparator { bool operator()(const AttachmentSortKey &lhs, const AttachmentSortKey &rhs) const { return std::tie(rhs.samples, lhs.accessType, lhs.attachmentWeight, lhs.name) < std::tie(lhs.samples, rhs.accessType, rhs.attachmentWeight, rhs.name); } }; +struct PassComparator { + bool operator()(const AttachmentSortKey &lhs, const AttachmentSortKey &rhs) const { + return lhs.slotID < rhs.slotID; + } +}; + struct ViewInfo { gfx::Format format{gfx::Format::UNKNOWN}; LayoutAccess access; @@ -808,10 +815,12 @@ struct ViewInfo { AttachmentType attachmentType; }; -using AttachmentMap = ccstd::pmr::map; +template +using AttachmentMap = ccstd::pmr::map; } // namespace -void fillRenderPassInfo(const AttachmentMap &colorMap, +template +void fillRenderPassInfo(const AttachmentMap &colorMap, FGRenderPassInfo &fgRenderpassInfo, const ResourceGraph &resg) { for (const auto &pair : colorMap) { @@ -920,11 +929,12 @@ void extractNames(const ccstd::pmr::string &resName, } } +template auto checkRasterViews(const Graphs &graphs, ResourceAccessGraph::vertex_descriptor ragVertID, ResourceAccessNode &node, const RasterViewsMap &rasterViews, - AttachmentMap &colorMap) { + AttachmentMap &colorMap) { const auto &[renderGraph, layoutGraphData, resourceGraph, resourceAccessGraph, relationGraph] = graphs; const auto passID = get(ResourceAccessGraph::PassIDTag{}, resourceAccessGraph, ragVertID); bool dependent = false; @@ -956,6 +966,7 @@ auto checkRasterViews(const Graphs &graphs, colorMap.emplace(AttachmentSortKey{desc.sampleCount, rasterView.accessType, ATTACHMENT_TYPE_WEIGHT[static_cast(rasterView.attachmentType)], + rasterView.slotID, resName}, ViewInfo{desc.format, LayoutAccess{lastAccess, accessFlag}, @@ -1018,11 +1029,12 @@ bool checkComputeViews(const Graphs &graphs, ResourceAccessGraph::vertex_descrip return dependent; } +template bool checkResolveResource(const Graphs &graphs, uint32_t ragVertID, ResourceAccessNode &node, const ccstd::pmr::vector &resolves, - AttachmentMap &colorMap) { + AttachmentMap &colorMap) { const auto &[renderGraph, layoutGraphData, resourceGraph, resourceAccessGraph, relationGraph] = graphs; const auto passID = get(ResourceAccessGraph::PassIDTag{}, resourceAccessGraph, ragVertID); bool dependent = false; @@ -1051,6 +1063,7 @@ bool checkResolveResource(const Graphs &graphs, colorMap.emplace(AttachmentSortKey{desc.sampleCount, AccessType::WRITE, ATTACHMENT_TYPE_WEIGHT[static_cast(attachmentType)], + static_cast(colorMap.size()), resolveTargetName}, ViewInfo{desc.format, LayoutAccess{lastAccess, accessFlag}, @@ -1132,7 +1145,7 @@ void startRenderPass(const Graphs &graphs, uint32_t passID, const RasterPass &pa auto &fgRenderPassInfo = get(ResourceAccessGraph::RenderPassInfoTag{}, resourceAccessGraph, vertID); if (pass.subpassGraph.subpasses.empty()) { - AttachmentMap colorMap(resourceAccessGraph.get_allocator()); + AttachmentMap colorMap(resourceAccessGraph.get_allocator()); auto &accessNode = get(ResourceAccessGraph::PassNodeTag{}, resourceAccessGraph, vertID); std::ignore = checkRasterViews(graphs, rlgVertID, accessNode, pass.rasterViews, colorMap); std::ignore = checkComputeViews(graphs, rlgVertID, accessNode, pass.computeViews); @@ -1214,90 +1227,107 @@ void startRenderSubpass(const Graphs &graphs, uint32_t passID, const RasterSubpa auto parentID = parent(passID, renderGraph); auto parentRagVertID = resourceAccessGraph.passIndex.at(parentID); auto &fgRenderpassInfo = get(ResourceAccessGraph::RenderPassInfoTag{}, resourceAccessGraph, parentRagVertID); - AttachmentMap colorMap(resourceAccessGraph.get_allocator()); - - auto [hasDep, hasDS] = checkRasterViews(graphs, rlgVertID, accessNode, pass.rasterViews, colorMap); - hasDep |= checkComputeViews(graphs, rlgVertID, accessNode, pass.computeViews); - hasDep |= checkResolveResource(graphs, rlgVertID, accessNode, pass.resolvePairs, colorMap); - fillRenderPassInfo(colorMap, fgRenderpassInfo, resourceGraph); - auto &subpassInfo = fgRenderpassInfo.rpInfo.subpasses.emplace_back(); - auto &dependencies = fgRenderpassInfo.rpInfo.dependencies; + const auto &rg = renderGraph; + auto &rag = resourceAccessGraph; + auto &resg = resourceGraph; - // subpass info & subpass dependencies - for (const auto &pair : colorMap) { - const auto &sortKey = pair.first; - const std::string_view name = sortKey.name; - auto resID = vertex(sortKey.name, resourceGraph); - const auto &desc = get(ResourceGraph::DescTag{}, resourceGraph, resID); - const auto &[ignored, cIndex, isResolveView] = fgRenderpassInfo.viewIndex.at(name.data()); - if (isResolveView) { - auto resolveIter = std::find_if(pass.resolvePairs.begin(), pass.resolvePairs.end(), [&name](const ResolvePair &resolve) { - return strcmp(resolve.target.c_str(), name.data()) == 0; - }); - if (desc.format == gfx::Format::DEPTH_STENCIL) { - subpassInfo.depthStencilResolve = getDepthStencilSlot(fgRenderpassInfo.uniqueRasterViewCount, fgRenderpassInfo.resolveCount, hasDS) + 1; - if (resolveIter->mode != gfx::ResolveMode::NONE) { - subpassInfo.depthResolveMode = resolveIter->mode; - } - if (resolveIter->mode1 != gfx::ResolveMode::NONE) { - subpassInfo.stencilResolveMode = resolveIter->mode1; + auto process = [&](auto &colorMap) { + auto [hasDep, hasDS] = checkRasterViews(graphs, rlgVertID, accessNode, pass.rasterViews, colorMap); + hasDep |= checkComputeViews(graphs, rlgVertID, accessNode, pass.computeViews); + hasDep |= checkResolveResource(graphs, rlgVertID, accessNode, pass.resolvePairs, colorMap); + fillRenderPassInfo(colorMap, fgRenderpassInfo, resg); + + auto &subpassInfo = fgRenderpassInfo.rpInfo.subpasses.emplace_back(); + auto &dependencies = fgRenderpassInfo.rpInfo.dependencies; + + // subpass info & subpass dependencies + for (const auto &pair : colorMap) { + const auto &sortKey = pair.first; + const std::string_view name = sortKey.name; + auto resID = vertex(sortKey.name, resg); + const auto &desc = get(ResourceGraph::DescTag{}, resg, resID); + const auto &[ignored, cIndex, isResolveView] = fgRenderpassInfo.viewIndex.at(name.data()); + if (isResolveView) { + auto resolveIter = std::find_if(pass.resolvePairs.begin(), pass.resolvePairs.end(), [&name](const ResolvePair &resolve) { + return strcmp(resolve.target.c_str(), name.data()) == 0; + }); + if (desc.format == gfx::Format::DEPTH_STENCIL) { + subpassInfo.depthStencilResolve = getDepthStencilSlot(fgRenderpassInfo.uniqueRasterViewCount, fgRenderpassInfo.resolveCount, hasDS) + 1; + if (resolveIter->mode != gfx::ResolveMode::NONE) { + subpassInfo.depthResolveMode = resolveIter->mode; + } + if (resolveIter->mode1 != gfx::ResolveMode::NONE) { + subpassInfo.stencilResolveMode = resolveIter->mode1; + } + } else { + if (subpassInfo.resolves.empty()) { + subpassInfo.resolves.resize(pass.rasterViews.size() - hasDS, gfx::INVALID_BINDING); + } + const auto &resolveSrc = resolveIter->source; + const auto &resourceSrcInfo = fgRenderpassInfo.viewIndex.at(resolveSrc); + subpassInfo.resolves[resourceSrcInfo.attachmentIndex] = cIndex; } } else { - if (subpassInfo.resolves.empty()) { - subpassInfo.resolves.resize(pass.rasterViews.size() - hasDS, gfx::INVALID_BINDING); + if (desc.format == gfx::Format::DEPTH_STENCIL) { + auto dsSlot = getDepthStencilSlot(fgRenderpassInfo.uniqueRasterViewCount, fgRenderpassInfo.resolveCount, hasDS); + if (sortKey.accessType != AccessType::WRITE) { + subpassInfo.inputs.emplace_back(dsSlot); + } + if (sortKey.accessType != AccessType::READ) { + subpassInfo.depthStencil = dsSlot; + } + } else { + if (sortKey.accessType != AccessType::WRITE) { + subpassInfo.inputs.emplace_back(cIndex); + } + if (sortKey.accessType != AccessType::READ) { + subpassInfo.colors.emplace_back(cIndex); + } + + if (sortKey.accessType == AccessType::READ_WRITE) { + auto &selfDependency = dependencies.emplace_back(); + selfDependency.srcSubpass = pass.subpassID; + selfDependency.dstSubpass = pass.subpassID; + selfDependency.prevAccesses = pair.second.access.nextAccess; + selfDependency.nextAccesses = pair.second.access.nextAccess; + } } - const auto &resolveSrc = resolveIter->source; - const auto &resourceSrcInfo = fgRenderpassInfo.viewIndex.at(resolveSrc); - subpassInfo.resolves[resourceSrcInfo.attachmentIndex] = cIndex; } - } else { - if (desc.format == gfx::Format::DEPTH_STENCIL) { - auto dsSlot = getDepthStencilSlot(fgRenderpassInfo.uniqueRasterViewCount, fgRenderpassInfo.resolveCount, hasDS); - if (sortKey.accessType != AccessType::WRITE) { - subpassInfo.inputs.emplace_back(dsSlot); - } - if (sortKey.accessType != AccessType::READ) { - subpassInfo.depthStencil = dsSlot; - } - } else { - if (sortKey.accessType != AccessType::WRITE) { - subpassInfo.inputs.emplace_back(cIndex); - } - if (sortKey.accessType != AccessType::READ) { - subpassInfo.colors.emplace_back(cIndex); - } - if (sortKey.accessType == AccessType::READ_WRITE) { - auto &selfDependency = dependencies.emplace_back(); - selfDependency.srcSubpass = pass.subpassID; - selfDependency.dstSubpass = pass.subpassID; - selfDependency.prevAccesses = pair.second.access.nextAccess; - selfDependency.nextAccesses = pair.second.access.nextAccess; + if (hasDep) { + auto &dependency = dependencies.emplace_back(); + auto lastIter = ++rag.resourceAccess[name.data()].rbegin(); + bool isBuffer = desc.dimension == ResourceDimension::BUFFER; + if (accessDependent(lastIter->second.accessFlag, accessNode.resourceStatus.at(name.data()).accessFlag, isBuffer) && lastIter->second.accessFlag != gfx::AccessFlagBit::NONE) { + auto lastVert = lastIter->first; + auto lastPassID = get(ResourceAccessGraph::PassIDTag{}, rag, lastVert); + auto lastPassIndex = INVALID_ID; + if (holds(lastPassID, rg) && (parent(lastPassID, rg) == parentID)) { + const auto *lastPass = get_if(lastPassID, &rg); + lastPassIndex = lastPass->subpassID; + } + + auto &dependency = dependencies.emplace_back(); + dependency.srcSubpass = lastPassIndex; + dependency.dstSubpass = pass.subpassID; + dependency.prevAccesses = lastIter->second.accessFlag; + dependency.nextAccesses = pair.second.access.nextAccess; } } } + }; - if (hasDep) { - auto &dependency = dependencies.emplace_back(); - auto lastIter = ++resourceAccessGraph.resourceAccess[name.data()].rbegin(); - bool isBuffer = desc.dimension == ResourceDimension::BUFFER; - if (accessDependent(lastIter->second.accessFlag, accessNode.resourceStatus.at(name.data()).accessFlag, isBuffer) && lastIter->second.accessFlag != gfx::AccessFlagBit::NONE) { - auto lastVert = lastIter->first; - auto lastPassID = get(ResourceAccessGraph::PassIDTag{}, resourceAccessGraph, lastVert); - auto lastPassIndex = INVALID_ID; - if (holds(lastPassID, renderGraph) && (parent(lastPassID, renderGraph) == parentID)) { - const auto *lastPass = get_if(lastPassID, &renderGraph); - lastPassIndex = lastPass->subpassID; - } + const auto *parentPass = get_if(parentID, &renderGraph); + CC_ASSERT(parentPass); - auto &dependency = dependencies.emplace_back(); - dependency.srcSubpass = lastPassIndex; - dependency.dstSubpass = pass.subpassID; - dependency.prevAccesses = lastIter->second.accessFlag; - dependency.nextAccesses = pair.second.access.nextAccess; - } - } + if (parentPass->subpassGraph.subpasses.size() == 1) { + // for those renderpass which consist of only 1 subpass + AttachmentMap colorMap(resourceAccessGraph.get_allocator()); + process(colorMap); + } else { + AttachmentMap colorMap(resourceAccessGraph.get_allocator()); + process(colorMap); } } @@ -1309,7 +1339,7 @@ void startComputeSubpass(const Graphs &graphs, uint32_t passID, const ComputeSub CC_EXPECTS(static_cast(rlgVertID) == static_cast(vertID)); auto &accessNode = get(ResourceAccessGraph::PassNodeTag{}, resourceAccessGraph, rlgVertID); - AttachmentMap colorMap(resourceAccessGraph.get_allocator()); + AttachmentMap colorMap(resourceAccessGraph.get_allocator()); auto parentID = parent(passID, renderGraph); auto parentRagVertID = resourceAccessGraph.passIndex.at(parentID); From 8c3e160846a38da8027ccc2a0abf7e9dbe28e311 Mon Sep 17 00:00:00 2001 From: James Chen Date: Thu, 21 Sep 2023 18:59:07 +0800 Subject: [PATCH 03/11] Fix a compilation issue and a crash issue if using Xcode 15 (#16306) * Fix crash in __cxx_global_var_init if using Xcode 15 and targeting <= iOS 14 * fixed #16190: Compilation errors if using Clang 15 with c++17 since std::unary_function has been removed (#16191) * fixed #16190: Compilation errors if using Clang 15 with c++17 since std::unary_function has been removed * Windows doesn't need to define BOOST_NO_CXX98_FUNCTION_BASE since it has already been defined. --- native/CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 3935dbbc443..0ef166479f2 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -82,6 +82,13 @@ if(USE_SERVER_MODE) add_definitions(-DCC_SERVER_MODE) endif() +# Fix the issue: https://github.com/cocos/cocos-engine/issues/16190 +# std::unary_function was removed since clang 15 +# The macro has already been defined in boost/config/stdlib/dinkumware.hpp(258,1), +# so no need to define it again to avoid 'macro redefinition' error. +if(NOT WINDOWS) + add_definitions(-DBOOST_NO_CXX98_FUNCTION_BASE) +endif() add_definitions(-DCC_NETMODE_CLIENT=0) add_definitions(-DCC_NETMODE_LISTEN_SERVER=1) @@ -3292,6 +3299,13 @@ if(APPLE) CC_KEYBOARD_SUPPORT ) elseif(IOS) + + if("${XCODE_VERSION}" VERSION_GREATER_EQUAL "15.0") + # For Xcode 15 and newer, add extra link flags to fix crash in __cxx_global_var_init. + message(STATUS "Using Xcode 15 or newer, adding extra link flags: -Wl,-ld_classic.") + target_link_options(${ENGINE_NAME} PUBLIC -Wl,-ld_classic) + endif() + target_link_libraries(${ENGINE_NAME} PUBLIC "-framework QuartzCore" "-framework MetalPerformanceShaders" From e2614859a763be46160d066dcbd90a8da0bb78e7 Mon Sep 17 00:00:00 2001 From: GengineJS <476393671@qq.com> Date: Fri, 22 Sep 2023 17:02:19 +0800 Subject: [PATCH 04/11] [Fixed] sampler synchronization issues with compute view texture (#16318) --- cocos/rendering/custom/executor.ts | 65 ++++++++++++++---------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index 2ba97a70061..bc3f28ba261 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -584,48 +584,44 @@ class SubmitInfo { class RenderPassLayoutInfo { protected _layoutID = 0; + protected _vertID = -1; protected _stage: RenderStageData | null = null; protected _layout: PipelineLayoutData; protected _inputName: string; protected _descriptorSet: DescriptorSet | null = null; - constructor (layoutId: number, input: [string, ComputeView[]]) { + constructor (layoutId: number, vertId: number, input: [string, ComputeView[]]) { this._inputName = input[0]; this._layoutID = layoutId; + this._vertID = vertId; const lg = context.layoutGraph; this._stage = lg.getRenderStage(layoutId); this._layout = lg.getLayout(layoutId); - const layoutData = this._layout.descriptorSets.get(UpdateFrequency.PER_PASS); - const globalDesc = context.pipeline.descriptorSet; - if (layoutData) { - // find resource - const deviceTex = context.deviceTextures.get(this._inputName); - const gfxTex = deviceTex?.texture; - const layoutDesc = layoutData.descriptorSet!; - if (!gfxTex) { - throw Error(`Could not find texture with resource name ${this._inputName}`); - } - const resId = context.resourceGraph.vertex(this._inputName); - const samplerInfo = context.resourceGraph.getSampler(resId); - // bind descriptors - for (const descriptor of input[1]) { - const descriptorName = descriptor.name; - const descriptorID = lg.attributeIndex.get(descriptorName); - // find descriptor binding - for (const block of layoutData.descriptorSetLayoutData.descriptorBlocks) { - for (let i = 0; i !== block.descriptors.length; ++i) { - // const buffer = layoutDesc.getBuffer(block.offset + i); - // const texture = layoutDesc.getTexture(block.offset + i); - if (descriptorID === block.descriptors[i].descriptorID) { - layoutDesc.bindTexture(block.offset + i, gfxTex); - layoutDesc.bindSampler(block.offset + i, context.device.getSampler(samplerInfo)); - if (!this._descriptorSet) this._descriptorSet = layoutDesc; - continue; - } - // if (!buffer && !texture) { - // layoutDesc.bindBuffer(block.offset + i, globalDesc.getBuffer(block.offset + i)); - // layoutDesc.bindTexture(block.offset + i, globalDesc.getTexture(block.offset + i)); - // layoutDesc.bindSampler(block.offset + i, globalDesc.getSampler(block.offset + i)); - // } + const layoutData = this._layout.descriptorSets.get(UpdateFrequency.PER_PASS); + if (!layoutData) { + return; + } + const layoutDesc = layoutData.descriptorSet!; + // find resource + const deviceTex = context.deviceTextures.get(this._inputName); + const gfxTex = deviceTex?.texture; + if (!gfxTex) { + throw Error(`Could not find texture with resource name ${this._inputName}`); + } + const resId = context.resourceGraph.vertex(this._inputName); + const samplerInfo = context.resourceGraph.getSampler(resId); + // bind descriptors + for (const descriptor of input[1]) { + const descriptorName = descriptor.name; + const descriptorID = lg.attributeIndex.get(descriptorName); + // find descriptor binding + for (const block of layoutData.descriptorSetLayoutData.descriptorBlocks) { + for (let i = 0; i !== block.descriptors.length; ++i) { + if (descriptorID === block.descriptors[i].descriptorID) { + layoutDesc.bindTexture(block.offset + i, gfxTex); + const renderData = context.renderGraph.getData(this._vertID); + layoutDesc.bindSampler(block.offset + i, renderData.samplers.get(descriptorID) || context.device.getSampler(samplerInfo)); + if (!this._descriptorSet) this._descriptorSet = layoutDesc; + continue; } } } @@ -633,6 +629,7 @@ class RenderPassLayoutInfo { } get descriptorSet (): DescriptorSet | null { return this._descriptorSet; } get layoutID (): number { return this._layoutID; } + get vertID (): number { return this._vertID; } get stage (): RenderStageData | null { return this._stage; } get layout (): PipelineLayoutData { return this._layout; } } @@ -842,7 +839,7 @@ class DeviceRenderPass { const layoutGraph = context.layoutGraph; const stageId = layoutGraph.locateChild(layoutGraph.nullVertex(), stageName); if (stageId !== 0xFFFFFFFF) { - this._layout = new RenderPassLayoutInfo(stageId, input); + this._layout = new RenderPassLayoutInfo(stageId, this.rasterPassInfo.id, input); } } } From d75fb4e1b542efdd4a593f7d05c915aa66e48237 Mon Sep 17 00:00:00 2001 From: qiuguohua Date: Mon, 25 Sep 2023 09:59:59 +0800 Subject: [PATCH 05/11] OpenHarmony platform modification configuration update rules (#16320) * 1.Rules for modifying configuration changes 2.Update app name * Modify variable name --- scripts/native-pack-tool/source/platforms/openharmony.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/native-pack-tool/source/platforms/openharmony.ts b/scripts/native-pack-tool/source/platforms/openharmony.ts index 45af3334f3a..6dbbad129db 100644 --- a/scripts/native-pack-tool/source/platforms/openharmony.ts +++ b/scripts/native-pack-tool/source/platforms/openharmony.ts @@ -47,8 +47,8 @@ export class OpenHarmonyPackTool extends NativePackTool { // entry/build-profile.json5 const buildCfgFile = ps.join(ohosProjDir, 'entry/build-profile.json5'); await cchelper.replaceInFile([ - { reg: '={DRES_DIR}', text: `=${cchelper.fixPath(this.paths.buildDir!)}` }, - { reg: '={DCOMMON_DIR}', text: `=${cchelper.fixPath(process.env.COMMON_DIR || '')}` }, + { reg: 'DRES_DIR=[^ ]*', text: `DRES_DIR=${cchelper.fixPath(this.paths.buildDir!)}` }, + { reg: 'DCOMMON_DIR=[^ ]*', text: `DCOMMON_DIR=${cchelper.fixPath(process.env.COMMON_DIR || '')}` }, { reg: /"compileSdkVersion": *,/, text: `"compileSdkVersion": ${platformParams.apiLevel},}` }, ], buildCfgFile); @@ -94,6 +94,11 @@ export class OpenHarmonyPackTool extends NativePackTool { configJSON.app.bundleName = platformParams.packageName; outputJSONSync(cfgFile, configJSON, { spaces: 2 }); + const appScopeStringJSONPath = ps.join(ohosProjDir, 'AppScope/resources/base/element/string.json'); + const appScopeStringJSON = fs.readJSONSync(appScopeStringJSONPath); + appScopeStringJSON.string.find((item: any) => item.name === 'app_name').value = this.params.projectName; + outputJSONSync(appScopeStringJSONPath, appScopeStringJSON, { spaces: 2 }); + const stringJSONPath = ps.join(ohosProjDir, 'entry/src/main/resources/base/element/string.json'); const stringJSON = fs.readJSONSync(stringJSONPath); stringJSON.string.find((item: any) => item.name === 'MainAbility_label').value = this.params.projectName; From 312a4b294bbe760dd1972a4f7cc14ac303fe7e5b Mon Sep 17 00:00:00 2001 From: jk20012001 Date: Tue, 26 Sep 2023 14:30:35 +0800 Subject: [PATCH 06/11] better tips for float output macro (#16335) --- cocos/core/platform/macro.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cocos/core/platform/macro.ts b/cocos/core/platform/macro.ts index c27506d7dd4..612e15e4a0e 100644 --- a/cocos/core/platform/macro.ts +++ b/cocos/core/platform/macro.ts @@ -987,9 +987,9 @@ interface Macro { /** * @en - * Used to set float output, the default value is false. + * Used to set float output render target, more accurate multiple light sources, fog, and translucent effects, custom pipeline only, the default value is false. * @zh - * 用于开启浮点格式的输出, 默认值为 false。 + * 用于开启浮点格式的RT输出, 更精确的多光源、雾化和半透明效果, 仅用于自定义管线, 默认值为 false。 * @default false */ ENABLE_FLOAT_OUTPUT: boolean; From 461c4fe5ee7b3bfdf2524ede540ad64ede163b17 Mon Sep 17 00:00:00 2001 From: dogeFu <609075410@qq.com> Date: Sat, 7 Oct 2023 16:50:33 +0800 Subject: [PATCH 07/11] fix : terrain paint error after save file in editor (#16343) --- cocos/terrain/terrain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cocos/terrain/terrain.ts b/cocos/terrain/terrain.ts index e973a6b2e71..6711c4af64e 100644 --- a/cocos/terrain/terrain.ts +++ b/cocos/terrain/terrain.ts @@ -1997,7 +1997,7 @@ export class Terrain extends Component { if (EDITOR && this._asset) { this._asset.weights[index * 4 + 0] = w.x * 255; this._asset.weights[index * 4 + 1] = w.y * 255; - this._asset.weights[index * 4 + 2] = w.x * 255; + this._asset.weights[index * 4 + 2] = w.z * 255; this._asset.weights[index * 4 + 3] = w.w * 255; } } From 3d65154e617365171897315af79fae0b27110081 Mon Sep 17 00:00:00 2001 From: James Chen Date: Sat, 7 Oct 2023 16:54:41 +0800 Subject: [PATCH 08/11] Fix ndk version in ci script (#16356) * Fix ndk version in ci script * Fix typo of ANDROID_NDK in ci script * Update ci script, free space for android build * Don't clear android tools --- .github/workflows/native-bindings.yml | 2 ++ .../workflows/native-compile-platforms.yml | 31 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/.github/workflows/native-bindings.yml b/.github/workflows/native-bindings.yml index faa4fede9c1..2a896a8a9db 100644 --- a/.github/workflows/native-bindings.yml +++ b/.github/workflows/native-bindings.yml @@ -27,6 +27,8 @@ jobs: ndk-version: r21e add-to-path: false - name: Generate decorators + env: + ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} run: | cd native echo "Generate compile_commands.json & ninja target" diff --git a/.github/workflows/native-compile-platforms.yml b/.github/workflows/native-compile-platforms.yml index 953f4c0bcb1..f3d63c303c1 100644 --- a/.github/workflows/native-compile-platforms.yml +++ b/.github/workflows/native-compile-platforms.yml @@ -84,7 +84,7 @@ jobs: COCOS_ENGINE_DEV: 1 run: | NATIVE_ROOT=$GITHUB_WORKSPACE/native - ANDORID_NDK=$ANDROID_NDK_LATEST_HOME + ANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} NATIVE_DIR=$GITHUB_WORKSPACE/templates/android-template echo "Compiling Android ... " cd $GITHUB_WORKSPACE/templates/ @@ -111,7 +111,7 @@ jobs: ASSET_DIR=$GITHUB_WORKSPACE/templates/android/build/build-android/ - sed -i "s@^PROP_NDK_PATH.*@PROP_NDK_PATH=$ANDORID_NDK@g" gradle.properties + sed -i "s@^PROP_NDK_PATH.*@PROP_NDK_PATH=$ANDROID_NDK@g" gradle.properties sed -i "s@^APPLICATION_ID.*@APPLICATION_ID=com.cocos.android@g" gradle.properties sed -i "s@^RES_PATH.*@RES_PATH=$ASSET_DIR@g" gradle.properties sed -i "s@^COCOS_ENGINE_PATH.*@COCOS_ENGINE_PATH=$NATIVE_ROOT@g" gradle.properties @@ -122,7 +122,7 @@ jobs: sed -i "s@^PROP_APP_ABI.*@PROP_APP_ABI=arm64-v8a@g" gradle.properties echo "Compile Android - cmake ..." - echo "ANDORID_NDK ${ANDROID_NDK} or ${ANDROID_NDK_HOME}" + echo "ANDROID_NDK ${ANDROID_NDK} or ${ANDROID_NDK_HOME}" # ./gradlew :CocosGame:assembleDebug --quiet ./gradlew :CocosGame:assembleRelease --quiet echo "Compile Android Debug Done!" @@ -133,6 +133,25 @@ jobs: (! contains(github.event.pull_request.body, '[X] does not change any runtime related code or build configuration')) runs-on: ubuntu-latest steps: + - name: Before free space + run: | + df -h + + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@d5af243ce7bacb67384aa6c5b1fc5f169e30903e + with: + tool-cache: true + android: false + dotnet: true + haskell: true + large-packages: true + docker-images: true + swap-storage: true + + - name: After free space + run: | + df -h + - uses: actions/checkout@v2 - name: Download external libraries shell: bash @@ -154,7 +173,7 @@ jobs: COCOS_ENGINE_DEV: 1 run: | NATIVE_ROOT=$GITHUB_WORKSPACE/native - ANDORID_NDK=$ANDROID_NDK_LATEST_HOME + ANDROID_NDK=${{ steps.setup-ndk.outputs.ndk-path }} NATIVE_DIR=$GITHUB_WORKSPACE/templates/android-template echo "Compiling Android ... " cd $GITHUB_WORKSPACE/templates/ @@ -185,7 +204,7 @@ jobs: ASSET_DIR=$GITHUB_WORKSPACE/templates/android/build/build-android/ - sed -i "s@^PROP_NDK_PATH.*@PROP_NDK_PATH=$ANDORID_NDK@g" gradle.properties + sed -i "s@^PROP_NDK_PATH.*@PROP_NDK_PATH=$ANDROID_NDK@g" gradle.properties sed -i "s@^APPLICATION_ID.*@APPLICATION_ID=com.cocos.android@g" gradle.properties sed -i "s@^RES_PATH.*@RES_PATH=$ASSET_DIR@g" gradle.properties sed -i "s@^COCOS_ENGINE_PATH.*@COCOS_ENGINE_PATH=$NATIVE_ROOT@g" gradle.properties @@ -196,7 +215,7 @@ jobs: sed -i "s@^PROP_APP_ABI.*@PROP_APP_ABI=armeabi-v7a:arm64-v8a@g" gradle.properties echo "Compile Android - cmake ..." - echo "ANDORID_NDK ${ANDROID_NDK} or ${ANDROID_NDK_HOME}" + echo "ANDROID_NDK ${ANDROID_NDK} or ${ANDROID_NDK_HOME}" ./gradlew :CocosGame:assembleDebug --quiet echo "Compile Android Debug Done!" From 7a8bde3ace9f145ab255df6e06386a3a4ee19ee0 Mon Sep 17 00:00:00 2001 From: PP Date: Sun, 8 Oct 2023 10:47:56 +0800 Subject: [PATCH 09/11] fix: load script packages before loading builtin assets (#16339) * fix: load script packages before loading builtin assets * fix eslint * fix ci * Revert "fix ci" This reverts commit 38584722e93c5823684be31dbb796bb3908b4703. * add errorID logID --- EngineErrorMap.md | 8 ++++++++ cocos/game/game.ts | 36 ++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/EngineErrorMap.md b/EngineErrorMap.md index 2302385d19e..0b373c2aa2c 100644 --- a/EngineErrorMap.md +++ b/EngineErrorMap.md @@ -168,6 +168,14 @@ Expected 'data' dict, but not found. Config file: %s Please load the resource first : %s +### 1102 + +Effect settings not found, effects will not be imported. + +### 1103 + +Success to load scene: %s + ### 1200 cocos2d: Director: Error in gettimeofday diff --git a/cocos/game/game.ts b/cocos/game/game.ts index 14086b18be7..954f9a6459e 100644 --- a/cocos/game/game.ts +++ b/cocos/game/game.ts @@ -29,7 +29,7 @@ import { findCanvas, loadJsFile } from 'pal/env'; import { Pacer } from 'pal/pacer'; import { ConfigOrientation } from 'pal/screen-adapter'; import assetManager, { IAssetManagerOptions } from '../asset/asset-manager/asset-manager'; -import { EventTarget, AsyncDelegate, sys, macro, VERSION, cclegacy, screen, Settings, settings, assert, garbageCollectionManager, DebugMode, warn, log, _resetDebugSetting } from '../core'; +import { EventTarget, AsyncDelegate, sys, macro, VERSION, cclegacy, screen, Settings, settings, assert, garbageCollectionManager, DebugMode, warn, log, _resetDebugSetting, errorID, logID } from '../core'; import { input } from '../input'; import { deviceManager, LegacyRenderMode } from '../gfx'; import { SplashScreen } from './splash-screen'; @@ -723,6 +723,7 @@ export class Game extends EventTarget { }) .then((): void => { if (DEBUG) { + // eslint-disable-next-line no-console console.time('Init Base'); } const debugMode = config.debugMode || DebugMode.NONE; @@ -735,6 +736,7 @@ export class Game extends EventTarget { .then((): Promise => settings.init(config.settingsPath, config.overrideSettings)) .then((): Promise => { if (DEBUG) { + // eslint-disable-next-line no-console console.timeEnd('Init Base'); } this.emit(Game.EVENT_POST_BASE_INIT); @@ -748,6 +750,7 @@ export class Game extends EventTarget { }) .then((): void => { if (DEBUG) { + // eslint-disable-next-line no-console console.time('Init Infrastructure'); } macro.init(); @@ -769,6 +772,7 @@ export class Game extends EventTarget { Layers.init(); this.initPacer(); if (DEBUG) { + // eslint-disable-next-line no-console console.timeEnd('Init Infrastructure'); } }) @@ -795,13 +799,21 @@ export class Game extends EventTarget { } const data = effectSettings.data; if (data === null) { - console.error('Effect settings not found, effects will not be imported.'); + errorID(1102); return; } cclegacy.rendering.init(deviceManager.gfxDevice, data); }) + .then((): Promise => { + const scriptPackages = settings.querySettings(Settings.Category.SCRIPTING, 'scriptPackages'); + if (scriptPackages) { + return Promise.all(scriptPackages.map((pack): Promise => import(pack))); + } + return Promise.resolve([]); + }) .then((): Promise => { if (DEBUG) { + // eslint-disable-next-line no-console console.time('Init SubSystem'); } director.init(); @@ -809,13 +821,14 @@ export class Game extends EventTarget { }) .then((): Promise => { if (DEBUG) { + // eslint-disable-next-line no-console console.timeEnd('Init SubSystem'); } this.emit(Game.EVENT_POST_SUBSYSTEM_INIT); return this.onPostSubsystemInitDelegate.dispatch(); }) .then((): void => { - console.log(`Cocos Creator v${VERSION}`); + log(`Cocos Creator v${VERSION}`); this.emit(Game.EVENT_ENGINE_INITED); this._engineInited = true; }) @@ -827,6 +840,7 @@ export class Game extends EventTarget { }) .then((): Promise => { if (DEBUG) { + // eslint-disable-next-line no-console console.time('Init Project'); } const jsList = settings.querySettings(Settings.Category.PLUGINS, 'jsList'); @@ -838,13 +852,6 @@ export class Game extends EventTarget { } return promise; }) - .then((): Promise => { - const scriptPackages = settings.querySettings(Settings.Category.SCRIPTING, 'scriptPackages'); - if (scriptPackages) { - return Promise.all(scriptPackages.map((pack): Promise => import(pack))); - } - return Promise.resolve([]); - }) .then((): Promise => this._loadProjectBundles()) .then((): Promise => this._loadCCEScripts()) .then((): void | Promise => this._setupRenderPipeline()) @@ -855,6 +862,7 @@ export class Game extends EventTarget { }) .then((): Promise => { if (DEBUG) { + // eslint-disable-next-line no-console console.timeEnd('Init Project'); } this.emit(Game.EVENT_POST_PROJECT_INIT); @@ -1013,11 +1021,11 @@ export class Game extends EventTarget { SplashScreen.instance.update(this._calculateDT(false)); } else if (this._shouldLoadLaunchScene) { this._shouldLoadLaunchScene = false; - const launchScene = settings.querySettings(Settings.Category.LAUNCH, 'launchScene'); + const launchScene = settings.querySettings(Settings.Category.LAUNCH, 'launchScene') as string; if (launchScene) { // load scene director.loadScene(launchScene, (): void => { - console.log(`Success to load scene: ${launchScene}`); + logID(1103, launchScene); this._initTime = performance.now(); director.startAnimation(); this.onStart?.(); @@ -1098,7 +1106,7 @@ export class Game extends EventTarget { } private _setupRenderPipeline (): void | Promise { - const renderPipeline = settings.querySettings(Settings.Category.RENDERING, 'renderPipeline'); + const renderPipeline = settings.querySettings(Settings.Category.RENDERING, 'renderPipeline') as string; if (!renderPipeline) { return this._setRenderPipeline(); } @@ -1124,7 +1132,7 @@ export class Game extends EventTarget { this._safeEmit(Game.EVENT_RENDERER_INITED); } - private _safeEmit (event): void { + private _safeEmit (event: string | number): void { if (EDITOR) { try { this.emit(event); From 956d71343efeb031d709731e20fa16f6d6767fcf Mon Sep 17 00:00:00 2001 From: GengineJS <476393671@qq.com> Date: Sun, 8 Oct 2023 11:12:50 +0800 Subject: [PATCH 10/11] [Fixed] web pipeline framebuffer resize issue. (#16321) --- cocos/gfx/base/framebuffer.ts | 10 ++++++++++ cocos/gfx/webgl/webgl-framebuffer.ts | 2 ++ cocos/gfx/webgl2/webgl2-framebuffer.ts | 2 ++ cocos/rendering/custom/executor.ts | 22 ++++++++++++++++++++-- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/cocos/gfx/base/framebuffer.ts b/cocos/gfx/base/framebuffer.ts index 71c04e1f54b..d609db6bd67 100644 --- a/cocos/gfx/base/framebuffer.ts +++ b/cocos/gfx/base/framebuffer.ts @@ -55,9 +55,19 @@ export abstract class Framebuffer extends GFXObject { return this._depthStencilTexture; } + public get width (): number { + return this._width; + } + + public get height (): number { + return this._height; + } + protected _renderPass: RenderPass | null = null; protected _colorTextures: (Texture | null)[] = []; protected _depthStencilTexture: Texture | null = null; + protected _width: number = 0; + protected _height: number = 0; constructor () { super(ObjectType.FRAMEBUFFER); diff --git a/cocos/gfx/webgl/webgl-framebuffer.ts b/cocos/gfx/webgl/webgl-framebuffer.ts index aeab6338e91..448239c19c6 100644 --- a/cocos/gfx/webgl/webgl-framebuffer.ts +++ b/cocos/gfx/webgl/webgl-framebuffer.ts @@ -96,6 +96,8 @@ export class WebGLFramebuffer extends Framebuffer { }; WebGLCmdFuncCreateFramebuffer(WebGLDeviceManager.instance, this._gpuFramebuffer); + this._width = this._gpuFramebuffer.width; + this._height = this._gpuFramebuffer.height; } public destroy (): void { diff --git a/cocos/gfx/webgl2/webgl2-framebuffer.ts b/cocos/gfx/webgl2/webgl2-framebuffer.ts index 255c7a9a6b3..539857308ce 100644 --- a/cocos/gfx/webgl2/webgl2-framebuffer.ts +++ b/cocos/gfx/webgl2/webgl2-framebuffer.ts @@ -90,6 +90,8 @@ export class WebGL2Framebuffer extends Framebuffer { }; WebGL2CmdFuncCreateFramebuffer(WebGL2DeviceManager.instance, this._gpuFramebuffer); + this._width = this._gpuFramebuffer.width; + this._height = this._gpuFramebuffer.height; } public destroy (): void { diff --git a/cocos/rendering/custom/executor.ts b/cocos/rendering/custom/executor.ts index bc3f28ba261..e855f90ce53 100644 --- a/cocos/rendering/custom/executor.ts +++ b/cocos/rendering/custom/executor.ts @@ -950,6 +950,25 @@ class DeviceRenderPass { if (this.renderLayout && this.renderLayout.descriptorSet) { this.renderLayout.descriptorSet.update(); } + + const resGraph = context.resourceGraph; + const currentWidth = this._framebuffer ? this._framebuffer.width : 0; + const currentHeight = this._framebuffer ? this._framebuffer.height : 0; + + let width = 0; + let height = 0; + for (const [resName, rasterV] of this._rasterInfo.pass.rasterViews) { + if (rasterV.attachmentType === AttachmentType.SHADING_RATE) { + continue; + } + const resId = resGraph.vertex(resName); + const resDesc = resGraph.getDesc(resId); + width = resDesc.width; + height = resDesc.height; + break; + } + const needRebuild = (width !== currentWidth) || (height !== currentHeight); + for (const [resName, rasterV] of this._rasterInfo.pass.rasterViews) { let deviceTex = context.deviceTextures.get(resName)!; const currTex = deviceTex; @@ -963,8 +982,7 @@ class DeviceRenderPass { const resDesc = resGraph.getDesc(resId); if (deviceTex.framebuffer && resFbo instanceof Framebuffer && deviceTex.framebuffer !== resFbo) { framebuffer = this._framebuffer = deviceTex.framebuffer = resFbo; - } else if (!currTex || (deviceTex.texture - && (deviceTex.texture.width !== resDesc.width || deviceTex.texture.height !== resDesc.height))) { + } else if (!currTex || (deviceTex.texture && needRebuild)) { const gfxTex = deviceTex.texture!; if (currTex) gfxTex.resize(resDesc.width, resDesc.height); switch (rasterV.attachmentType) { From 602fa6062764877ba9f00a6b0604f93ed8f6637b Mon Sep 17 00:00:00 2001 From: Cocos Robot <48829427+cocos-robot@users.noreply.github.com> Date: Sun, 8 Oct 2023 13:33:49 +0800 Subject: [PATCH 11/11] [ci skip][AUTO]: Automated code generating update: 5e7e390c52d505377d699389e21304d86d7ee52d (#16339) (#16360) Co-authored-by: cocos-robot --- native/cocos/core/builtin/DebugInfos.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/native/cocos/core/builtin/DebugInfos.cpp b/native/cocos/core/builtin/DebugInfos.cpp index 31ed13ab8ee..d83f1db811f 100644 --- a/native/cocos/core/builtin/DebugInfos.cpp +++ b/native/cocos/core/builtin/DebugInfos.cpp @@ -35,6 +35,8 @@ ccstd::unordered_map debugInfos = { { 1008, "[Action reverse]. override me" }, { 1100, "Expected 'data' dict, but not found. Config file: %s" }, { 1101, "Please load the resource first : %s" }, +{ 1102, "Effect settings not found, effects will not be imported." }, +{ 1103, "Success to load scene: %s" }, { 1200, "cocos2d: Director: Error in gettimeofday" }, { 1204, "Running scene should not be null" }, { 1205, "The scene should not be null" },