FRHICommandListImmediate::EndScene 崩溃

在FRHICommandListImmediate::EndScene():

void FRHICommandListImmediate::EndScene()

{

check(IsImmediate() && IsInRenderingThread());

if (Bypass())

{

GetContext().RHIEndScene();

return;

}

ALLOC_COMMAND(FRHICommandEndScene)();

if (!IsRunningRHIInSeparateThread())

{

// if we aren’t running an RHIThread, there is no good reason to buffer this frame advance stuff and that complicates state management, so flush everything out now

QUICK_SCOPE_CYCLE_COUNTER(EndScene_Flush);

CSV_SCOPED_TIMING_STAT(RHITFlushes, EndScene);

FRHICommandListExecutor::GetImmediateCommandList().ImmediateFlush(EImmediateFlushType::FlushRHIThread);

}

}

里面ImmediateFlush会崩溃,我看在UE5.5之后RHIEndScene和RHIBeginScene都去掉了,对应的EndScene也没有了,请问我们在5.3里面也能直接去掉么?我看了UE 0ebb5c1这次提交,并没有上下文关联,就单纯的把RHIEndScene和RHIBeginScene删掉了,我们如果想在5.3删掉还有其他关联逻辑需要注意么?

另外,我发现新版本的UE在一些强制Flush的地方都进行了删除,比如FVulkanTexture::InternalLockWrite里面:

inline void FVulkanTexture::InternalLockWrite(FVulkanCommandListContext& Context, FVulkanTexture* Surface, const VkBufferImageCopy& Region, VulkanRHI::FStagingBuffer* StagingBuffer)
{
    Code
    VulkanRHI::vkCmdCopyBufferToImage(StagingCommandBuffer, StagingBuffer->GetHandle(), Surface->Image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &Region);
    {
       FVulkanPipelineBarrier Barrier;
       Barrier.AddImageLayoutTransition(Surface->Image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, Surface->GetDefaultLayout(), SubresourceRange);
       Barrier.Execute(CmdBuffer);
    }
 
    Surface->Device->GetStagingManager().ReleaseBuffer(CmdBuffer, StagingBuffer);
 
    if (GVulkanSubmitOnTextureUnlock != 0)
    {
       Context.GetCommandBufferManager()->SubmitUploadCmdBuffer();
    }
}

最后UploadCmdBuffer这部分就被删掉了,我们发现这一块我们也会崩溃

<br/>

想问下在这些地方UE取消Flush是为了性能考虑么?UE做了什么机制能保证去掉之后的同步么?那么我们为了解决崩溃能否在5.3版本也去掉?

<br/>

另外同步下,我们关闭了RHI线程

<br/>

<br/>

<br/>

崩溃栈信息:

一、

#00 pc 0x0000000002e56660 (FRHICommandListImmediate::ExecuteAndReset(bool)+461) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#01 pc 0x0000000002e58008 (FRHICommandListImmediate::EndScene()+85) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#02 pc 0x0000000003d413a8 (TRDGLambdaPass<FEmptyShaderParameters, FSceneRenderer::RenderFinish(FRDGBuilder&, FRDGTexture*)::$_22>::Execute(FRHIComputeCommandList&)+3894) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#03 pc 0x0000000002ee3e70 (FRDGBuilder::ExecutePass(FRDGPass*, FRHIComputeCommandList&)+2914) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#04 pc 0x0000000002ee161c (FRDGBuilder::Execute()+1972) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#05 pc 0x0000000003d41ad4 (FRendererModule::BeginRenderingViewFamilies(FCanvas*, TArrayView<FSceneViewFamily*, int>)::$_28::operator()(FRHICommandListImmediate&) const+4589) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#06 pc 0x0000000003d42448 (TGraphTask<TEnqueueUniqueRenderCommandType<FRendererModule::BeginRenderingViewFamilies(FCanvas*, TArrayView<FSceneViewFamily*, int>)::FDrawSceneCommandName, FRendererModule::BeginRenderingViewFamilies(FCanvas*, TArrayView<FSceneViewFamily*, int>)::$_28>>::ExecuteTask()+657) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#07 pc 0x00000000021893a8 (UE::Tasks::Private::FTaskBase::TryExecuteTask()+436) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#08 pc 0x000000000218f7f4 (FNamedTaskThread::ProcessTasksNamedThread(int, bool)+495) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#09 pc 0x000000000218f030 (FNamedTaskThread::ProcessTasksUntilQuit(int)+648) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#10 pc 0x0000000002ef3b54 (RenderingThreadMain(FEvent*)+411) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#11 pc 0x0000000002efd2ac (FRenderingThread::Run()+562) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#12 pc 0x0000000002207570 (FRunnableThreadPThread::Run()+25) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#13 pc 0x000000000218ac38 (FRunnableThreadPThread::_ThreadProc(void*)+187) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#14 pc 0x00000000000c167c /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+204)

#15 pc 0x0000000000054930 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

二、

#00 pc 0x00000000000811ac /apex/com.android.runtime/lib64/bionic/libc.so (snprintf+280)

#01 pc 0x000000000001c1e4 /data/app/~~ufcX3_DoKiQAwmjOZ-etEQ==/com.socgame.projectz-aokJk2PhX7uzClMt9I0KjA==/split_config.arm64_v8a.apk!libCrashSight.so (BuildId: 0d4982284a81da8c40c95f82c5df58c0b45a6ae2)

#02 pc 0x000000000001ef38 /data/app/~~ufcX3_DoKiQAwmjOZ-etEQ==/com.socgame.projectz-aokJk2PhX7uzClMt9I0KjA==/split_config.arm64_v8a.apk!libCrashSight.so (BuildId: 0d4982284a81da8c40c95f82c5df58c0b45a6ae2)

#03 pc 0x000000000000db04 /data/app/~~ufcX3_DoKiQAwmjOZ-etEQ==/com.socgame.projectz-aokJk2PhX7uzClMt9I0KjA==/split_config.arm64_v8a.apk!libCrashSight.so (BuildId: 0d4982284a81da8c40c95f82c5df58c0b45a6ae2)

#04 pc 0x000000000000089c [vdso]

#05 pc 0x000000000005d654 /apex/com.android.runtime/lib64/bionic/libc.so (abort+168)

#06 pc 0x000000000004a6d4 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::die()+12)

#07 pc 0x000000000004b118 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::reportRawError(char const*)+32)

#08 pc 0x000000000004b7ec /apex/com.android.runtime/lib64/bionic/libc.so (scudo::reportMapError(unsigned long)+176)

#09 pc 0x000000000004ad28 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::MemMapLinux::remapImpl(unsigned long, unsigned long, char const*, unsigned long)+216)

#10 pc 0x000000000004f8d8 /apex/com.android.runtime/lib64/bionic/libc.so (scudo::MapAllocator<scudo::SecondaryConfig<scudo::AndroidNormalConfig>>::allocate(scudo::Options const&, unsigned long, unsigned long, unsigned long*, scudo::FillContentsMode)+816)

#11 pc 0x000000000004c9ec /apex/com.android.runtime/lib64/bionic/libc.so (scudo::Allocator<scudo::AndroidNormalConfig, &scudo_malloc_postinit>::allocate(unsigned long, scudo::Chunk::Origin, unsigned long, bool)+908)

#12 pc 0x000000000004c5d8 /apex/com.android.runtime/lib64/bionic/libc.so (scudo_calloc+52)

#13 pc 0x000000000004643c /apex/com.android.runtime/lib64/bionic/libc.so (calloc+60)

#14 pc 0x000000000017e438 /vendor/lib64/hw/vulkan.adreno.so (!!!0000!7bb04b16f36ce76dda3f5b0bc78989!1daab2de43!+136)

#15 pc 0x0000000000181528 /vendor/lib64/hw/vulkan.adreno.so (!!!0000!3d9c088ae5a546f96e7bc18029ffad!1daab2de43!+1440)

#16 pc 0x00000000001b9fe8 /vendor/lib64/hw/vulkan.adreno.so (!!!0000!d02eaf653ed404e413c8c644159872!1daab2de43!+552)

#17 pc 0x00000000001cc7d4 /vendor/lib64/hw/vulkan.adreno.so (qglinternal::vkCmdCopyBufferToImage2KHR(VkCommandBuffer_T*, VkCopyBufferToImageInfo2 const*)+652)

#18 pc 0x00000000001cc418 /vendor/lib64/hw/vulkan.adreno.so (qglinternal::vkCmdCopyBufferToImage(VkCommandBuffer_T*, VkBuffer_T*, VkImage_T*, VkImageLayout, unsigned int, VkBufferImageCopy const*)+160)

#19 pc 0x000000000918cb94 (FVulkanTexture::InternalLockWrite(FVulkanCommandListContext&, FVulkanTexture*, VkBufferImageCopy const&, VulkanRHI::FStagingBuffer*)+156) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#20 pc 0x000000000918ca44 (FVulkanDynamicRHI::InternalUnlockTexture2D(bool, FRHITexture*, unsigned int, bool)+1192) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#21 pc 0x00000000050207a4 (FTexture2DResource::CreateTexture()+4368) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#22 pc 0x000000000501c614 (FStreamableTextureResource::InitRHI(FRHICommandListBase&)+183) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#23 pc 0x0000000002f0d3dc (FRenderResource::InitResource(FRHICommandListBase&)+194) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#24 pc 0x0000000002f2ef84 (TGraphTask<TEnqueueUniqueRenderCommandType<BeginInitResource(FRenderResource*)::InitCommandName, BeginInitResource(FRenderResource*)::$_5>>::ExecuteTask()+657) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#25 pc 0x00000000021893a8 (UE::Tasks::Private::FTaskBase::TryExecuteTask()+436) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#26 pc 0x000000000218f7f4 (FNamedTaskThread::ProcessTasksNamedThread(int, bool)+495) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#27 pc 0x000000000218f030 (FNamedTaskThread::ProcessTasksUntilQuit(int)+648) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#28 pc 0x0000000002ef3b54 (RenderingThreadMain(FEvent*)+411) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#29 pc 0x0000000002efd2ac (FRenderingThread::Run()+562) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#30 pc 0x0000000002207570 (FRunnableThreadPThread::Run()+25) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#31 pc 0x000000000218ac38 (FRunnableThreadPThread::_ThreadProc(void*)+187) (BuildId: eeec087eea887e2d13a34786da6a744d8ab096cb)

#32 pc 0x000000000006f114 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+196)

#33 pc 0x0000000000061230 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68)

在多台机器都会崩溃,下面是崩溃栈:

[Image Removed]​

Hi,

你好,我看到这两个崩溃都是发生在关掉RHIThread的情况下,请问为什么要关闭RHIThread?

主要是大部分情况下,我们测试的都是开启RHIThread,尤其是发布后的游戏,虽然我们后续在开发过程中遇到过比如开启ImmediateMode,ForceRHIBypass,OneThead等命令时遇到的问题,但因为RHI接口一直有大的改动,所以不确定是否能解决你们的问题。在5.3的版本里,不排除关闭RHIThread有什么潜在问题我们没发现,所以尽可能开启RHIThread。

关于第一个问题,我认为是不应该删除的,因为在关掉RHIThread的情况下,这里需要对RHI的资源做释放,否则可能会造成内存泄漏。在开启RHIThread的情况下也会做同样的事情(FRDGBuilder.EndFlushResourcesRHI)。

关于第二个问题,我们重构了VulkanRHI上传数据的实现(https://github.com/EpicGames/UnrealEngine/commit/2b8510a2b6f7b927671c91f52ed912929a09b257\),不过从描述里看,并没有描述是修复某个crash,看起来应该跟提升并行性有关系。我在内部的jira里也没有搜到类似的问题。

这两个问题可能要先看看打开RHIThread是否有改善,如果实在不能开启,可能要更深入的看一下可能是什么问题造成的。

1 我们之前是测试发现开启RHIThread在PSO Cache的时候会发生一些崩溃,所以关了,所以在Android上的话,开启RHIThread是会更稳定么?

2 另外我们发现关了RHIThread性能是会下降20-30%左右的,在后续还是想开启的,想问下后面更新版本RHIThread稳定性和性能是都会有提升么?

3 目前小版本是关了RHIThread,后面我们也是打算要开启的,如果要开启的话,一条路径是不升级引擎,那就需要在现在版本上修复现有的开启RHIThread的崩溃问题,二是升级到最新版本,享受新本的稳定性和性能的提升(如果2是成立的话),你们有什么建议么

建议还是开启,PSO Cache如果因为开启了RHIThread崩溃,可以把信息发给我,我可以看看有什么线索。因为我们都是开启RHI Thread的,所以很少会发现关掉RHIThread一些问题。

RHIThread开启应该不会有稳定性问题,也许有不过后续肯定都修了。性能理论上比不开启是要好一点的,至少可以跟渲染线程并行一部分时间。

如果能升级到最新版的引擎最好,有几个原因,一个是之前发现的问题肯定都修复了,二是即便遇到任何问题,我们都会第一时间修复,如果版本跟我们当前版本差距很大的话,我们的开发团队也很难维护以前的版本,所以其实会问题更多。

1

/apex/com.android.runtime/lib64/bionic/libc.so

pc 0000000000051948

(abort+168) [arm64-v8a]

2

/apex/com.android.runtime/lib64/bionic/libc.so

pc 0000000000041640

[arm64-v8a]

3

/apex/com.android.runtime/lib64/bionic/libc.so

pc 0000000000041d58

[arm64-v8a]

4

/apex/com.android.runtime/lib64/bionic/libc.so

pc 0000000000041fac

[arm64-v8a]

5

/apex/com.android.runtime/lib64/bionic/libc.so

pc 0000000000043648

[arm64-v8a]

6

/vendor/lib64/libllvm-qgl.so

pc 0000000000269094

[arm64-v8a]

7

/vendor/lib64/libllvm-qgl.so

pc 0000000000269094

[arm64-v8a]

8

/vendor/lib64/libllvm-qgl.so

pc 0000000000269094

[arm64-v8a]

9

/vendor/lib64/libllvm-qgl.so

pc 0000000000269094

[arm64-v8a]

10

/vendor/lib64/libllvm-qgl.so

pc 0000000000231ab8

[arm64-v8a]

11

/vendor/lib64/libllvm-qgl.so

pc 000000000037db48

[arm64-v8a]

12

/vendor/lib64/libllvm-qgl.so

pc 00000000005daeec

[arm64-v8a]

13

/vendor/lib64/libllvm-qgl.so

pc 00000000005a9f74

[arm64-v8a]

14

/vendor/lib64/libllvm-qgl.so

pc 00000000005c74e8

[arm64-v8a]

15

/vendor/lib64/libllvm-qgl.so

pc 00000000005c41d4

[arm64-v8a]

16

/vendor/lib64/libllvm-qgl.so

pc 0000000000258414

[arm64-v8a]

17

/vendor/lib64/libllvm-qgl.so

pc 000000000025a390

[arm64-v8a]

18

/vendor/lib64/libllvm-qgl.so

pc 000000000063c3f0

[arm64-v8a]

19

/vendor/lib64/libllvm-qgl.so

pc 0000000000639d10

[arm64-v8a]

20

/vendor/lib64/libllvm-qgl.so

pc 00000000006399d0

(CreateQGLCProgram(QGPUCompiler::CompileData*)+48) [arm64-v8a]

21

/vendor/lib64/libllvm-qgl.so

pc 0000000000db7b10

[arm64-v8a]

22

/vendor/lib64/libllvm-qgl.so

pc 0000000000db7788

[arm64-v8a]

23

/vendor/lib64/libllvm-glnext.so

pc 0000000000040d4c

[arm64-v8a]

24

/vendor/lib64/hw/vulkan.adreno.so

pc 00000000001b1c24

[arm64-v8a]

25

/vendor/lib64/hw/vulkan.adreno.so

pc 00000000001add14

[arm64-v8a]

26

/vendor/lib64/hw/vulkan.adreno.so

pc 00000000001ac118

(qglinternal::vkCreateGraphicsPipelines(VkDevice_T*, VkPipelineCache_T*, unsigned int, VkGraphicsPipelineCreateInfo const*, VkAllocationCallbacks const*, VkPipeline_T**)+7008) [arm64-v8a]

27

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 00000000197b471c

(FVulkanPipelineStateCacheManager::CreateVKPipeline(FVulkanRHIGraphicsPipelineState*, FVulkanShader**, VkGraphicsPipelineCreateInfo const&, bool)+4144) [arm64-v8a]

28

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 00000000197b3264

(FVulkanPipelineStateCacheManager::CreateGfxPipelineFromEntry(FVulkanRHIGraphicsPipelineState*, FVulkanShader**, bool)+2696) [arm64-v8a]

29

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 00000000197b9150

(FVulkanPipelineStateCacheManager::RHICreateGraphicsPipelineState(FGraphicsPipelineStateInitializer const&)+6364) [arm64-v8a]

30

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 00000000197bb950

(FVulkanDynamicRHI::RHICreateGraphicsPipelineState(FGraphicsPipelineStateInitializer const&)+864) [arm64-v8a]

31

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000e2f37c4

(FCompilePipelineStateTask::CompilePSO()+760) [arm64-v8a]

32

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000e30c810

(TGraphTask<FCompilePipelineStateTask>::ExecuteTask(TArray<FBaseGraphTask*, TSizedDefaultAllocator<32>>&, ENamedThreads::Type, bool)+880) [arm64-v8a]

33

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c5a64b0

(_ZN13LowLevelTasks13TTaskDelegateIFPNS_5FTaskEbELj48EE17TTaskDelegateImplIZNS1_4InitIZN37FTaskGraphCompatibilityImplementation9QueueTaskEP14FBaseGraphTaskbN13ENamedThreads4TypeESB_EUlvE_EEvPKDsNS_13ETaskPriorityEOT_NS_10ETaskFlagsEEUlbE_Lb0EE11CallAndMoveERS4_Pvjb+176) [arm64-v8a]

34

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c573bcc

(LowLevelTasks::FScheduler::ExecuteTask(LowLevelTasks::FTask*&)+572) [arm64-v8a]

35

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c5750f8

(_ZN13LowLevelTasks10FScheduler18TryExecuteTaskFromINS_19TLocalQueueRegistryILj1024EE11TLocalQueueEXadL

36

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c574790

(LowLevelTasks::FScheduler::WorkerMain(LowLevelTasks::FSleepEvent*, LowLevelTasks::TLocalQueueRegistry<(unsigned int)1024>::TLocalQueue*, unsigned int, bool)+340) [arm64-v8a]

37

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c7c7280

(FThreadImpl::Run()+56) [arm64-v8a]

38

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c773964

(FRunnableThreadPThread::Run()+140) [arm64-v8a]

39

/data/app/~~N_HXoqHrlSctufQEsDP1tA==/com.socgame.projectz-VAWkKfRRJmJXcmZr4jscxw==/lib/arm64/libUnreal.so

pc 000000000c59ab24

(FRunnableThreadPThread::_ThreadProc(void*)+124) [arm64-v8a]

40

/apex/com.android.runtime/lib64/bionic/libc.so

pc 00000000000b69e4

(__res_nsend+620) [arm64-v8a]

41

/apex/com.android.runtime/lib64/bionic/libc.so

pc 000000000005327c

[arm64-v8a]

42

java:

43

[Failed to get Java stack]

1

/vendor/lib64/hw/vulkan.msmnile.so

pc 000000000005023c

[arm64-v8a]

2

/vendor/lib64/hw/vulkan.msmnile.so

pc 000000000003ff50

[arm64-v8a]

3

/vendor/lib64/hw/vulkan.msmnile.so

pc 0000000000005fc8

(qglinternal::vkCreateGraphicsPipelines(VkDevice_T*, VkPipelineCache_T*, unsigned int, VkGraphicsPipelineCreateInfo const*, VkAllocationCallbacks const*, VkPipeline_T**)+1656) [arm64-v8a]

4

libUnreal.so

pc 00000000198a2078

CreateVKPipeline (Runtime/VulkanRHI/Private/VulkanCommandWrappers.h:752) [arm64-v8a]

5

libUnreal.so

pc 00000000198a0bc0

CreateGfxPipelineFromEntry (./Runtime/VulkanRHI/Private/VulkanPipeline.cpp:1379) [arm64-v8a]

6

libUnreal.so

pc 00000000198a6aac

RHICreateGraphicsPipelineState (./Runtime/VulkanRHI/Private/VulkanPipeline.cpp:2022) [arm64-v8a]

7

libUnreal.so

pc 00000000198a92ac

RHICreateGraphicsPipelineState (./Runtime/VulkanRHI/Private/VulkanPipeline.cpp:2073) [arm64-v8a]

8

libUnreal.so

pc 000000000e38a7c4

CompilePSO (Runtime/RHI/Public/DynamicRHI.h:1133) [arm64-v8a]

9

libUnreal.so

pc 000000000e3a3810

ExecuteTask (./Runtime/RHI/Private/PipelineStateCache.cpp:1777) [arm64-v8a]

10

libUnreal.so

pc 000000000c63d4b0

CallAndMove (Runtime/Core/Public/Async/TaskGraphInterfaces.h:866) [arm64-v8a]

11

libUnreal.so

pc 000000000c60abcc

ExecuteTask (Runtime/Core/Public/Async/Fundamental/TaskDelegate.h:308) [arm64-v8a]

12

libUnreal.so

pc 000000000c60c0f8

TryExecuteTaskFrom<LowLevelTasks::TLocalQueueRegistry<1024U>::TLocalQueue, &LowLevelTasks::TLocalQueueRegistry<1024>::TLocalQueue::DequeueGlobal, false> (./Runtime/Core/Private/Async/Fundamental/Scheduler.cpp:349) [arm64-v8a]

13

libUnreal.so

pc 000000000c60b790

WorkerMain (./Runtime/Core/Private/Async/Fundamental/Scheduler.cpp:378) [arm64-v8a]

14

libUnreal.so

pc 000000000c85e280

Run (./Runtime/Core/Private/HAL/Thread.cpp:66 [Inline: operator()]) (Other infos:operator() Runtime/Core/Public/Templates/Function.h:629) [arm64-v8a]

15

libUnreal.so

pc 000000000c80a964

Run (./Runtime/Core/Private/HAL/PThreadRunnableThread.cpp:25) [arm64-v8a]

16

libUnreal.so

pc 000000000c631b24

_ThreadProc (./Runtime/Core/Private/HAL/PThreadRunnableThread.h:187) [arm64-v8a]

17

/apex/com.android.runtime/lib64/bionic/libc.so

pc 00000000000a5890

(__res_vinit+1356) [arm64-v8a]

18

/apex/com.android.runtime/lib64/bionic/libc.so

pc 0000000000043b6c

(a0ialloc+820) [arm64-v8a]

19

java:

20

[Failed to get Java stack]

第一个机型是ZTE A2023H的堆栈,这个是Sharp Aquos Zero 2的堆栈

你能试一下配置r.Vulkan.EnablePipelineLRUCache=1,然后测试一下吗

试了下,开启r.Vulkan.EnablePipelineLRUCache=1之后 编译PSO会超级慢,隔段时间会闪个弹窗,log有如下报错:

LogVulkanRHI: Error: Android RemoteCompileServices Failed to create graphics pipeline.

请问这些是什么设备? 另外能否试一下设置 r.pso.EnableAsyncCacheConsolidation 0​

机型是中兴 天玑41ultra, 8gen1,我查了下5.3.2版本没你发的这个var,不过我设置了GVulkanPSOForceSingleThreaded = (int32)ESingleThreadedPSOCreateMode::All;禁掉PSOAsync好像好了

好的,感谢提供信息。可以针对这种设备增加一个DeviceProfile,单独设置这个参数。或者设置r.pso.CreateOnRHIThread=1是不是应该也可以?