#5038·shadPS4

[游戏错误]:《未解之谜:纳坦·德雷克系列》(CUSA02320) — 三个由根引起的崩溃(GPU卡死、菜单崩溃、EOP断言) + 解决方法

作者: MrBossHunter创建于 2026年9月15日更新于 2026年9月15日

证据

  • VK_EXT_device_fault (本地添加)仅报告InstructionPointerUnknown地址,没有Read/WriteInvalid,即是卡顿而不是页故障。nvlddmkm事件153在每次崩溃时都会被记录。将TdrDelay设置为10 s不会改变任何情况。
  • VK_NV_device_diagnostic_checkpoints(本地添加,标记=着色器哈希)显示最后执行的命令是**cs 0x43b8ee5e**的调用(阶段0x2000=计算)。
  • cs_0x43b8ee5e的IR中,着色器有8个循环(多个嵌套)。它们的边界来自ReadConst(flags=0x0)%ptr, #idx,这是一个通过客户端指针的动态读取(例如,在ptr + i*224处迭代224字节的记录,而i < ReadConst(ptr, 2))。
  • EmitReadConst(emit_spirv_context_get_set.cpp):
    if (!EmulatorSettings.IsDirectMemoryAccessEnabled()) {
        return ctx.EmitFlatbufferLoad(ctx.ConstU32(flatbuf_off_dw));   // flatbuf_off_dw == 0 for dynamic reads
    }
    
    对于动态读取,flatbuf_off_dw为0,因此着色器读取了平坦缓冲区的单字,其中存储了不相关的数据。循环计数…

内容来源: shadps4-emu/shadPS4