Debug
This commit is contained in:
Submodule Vulkan/Vulkan-LoaderAndValidationLayers updated: 64d375f52e...1f321cf93d
+1
-1
Submodule Vulkan/glslang updated: 2921e0c54a...f042e407a9
@@ -95,7 +95,8 @@ s32 cellAudioOutSetDeviceMode()
|
|||||||
|
|
||||||
s32 cellAudioInSetDeviceMode()
|
s32 cellAudioInSetDeviceMode()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellAvconfExt);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellAudioInRegisterDevice()
|
s32 cellAudioInRegisterDevice()
|
||||||
|
|||||||
@@ -554,7 +554,7 @@ s32 cellFontExtend(u32 a1, u32 a2, u32 a3)
|
|||||||
//Something happens
|
//Something happens
|
||||||
}
|
}
|
||||||
//Something happens?
|
//Something happens?
|
||||||
return CELL_OK;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellFontRenderCharGlyphImageVertical()
|
s32 cellFontRenderCharGlyphImageVertical()
|
||||||
@@ -587,7 +587,8 @@ s32 cellFontGraphicsGetDrawType()
|
|||||||
|
|
||||||
s32 cellFontGetKerning()
|
s32 cellFontGetKerning()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellFont);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellFontGetRenderScaledKerning()
|
s32 cellFontGetRenderScaledKerning()
|
||||||
@@ -622,7 +623,8 @@ s32 cellFontGetEffectWeight()
|
|||||||
|
|
||||||
s32 cellFontGetScalePixel()
|
s32 cellFontGetScalePixel()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellFont);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellFontClearFileCache()
|
s32 cellFontClearFileCache()
|
||||||
@@ -637,7 +639,8 @@ s32 cellFontAdjustFontScaling()
|
|||||||
|
|
||||||
s32 cellFontSetupRenderScalePoint()
|
s32 cellFontSetupRenderScalePoint()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellFont);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellFontGlyphGetVerticalShift()
|
s32 cellFontGlyphGetVerticalShift()
|
||||||
|
|||||||
@@ -892,7 +892,8 @@ s32 cellFsChangeFileSizeByFdWithoutAllocation()
|
|||||||
|
|
||||||
s32 cellFsSetDiscReadRetrySetting()
|
s32 cellFsSetDiscReadRetrySetting()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellFs);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellFsRegisterConversionCallback()
|
s32 cellFsRegisterConversionCallback()
|
||||||
|
|||||||
@@ -191,13 +191,15 @@ s32 cellHddGameSetSystemVer()
|
|||||||
|
|
||||||
s32 cellHddGameExitBroken()
|
s32 cellHddGameExitBroken()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellGame);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
s32 cellGameDataGetSizeKB()
|
s32 cellGameDataGetSizeKB()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellGame);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellGameDataSetSystemVer()
|
s32 cellGameDataSetSystemVer()
|
||||||
|
|||||||
@@ -10,9 +10,110 @@
|
|||||||
|
|
||||||
extern logs::channel cellSysutil;
|
extern logs::channel cellSysutil;
|
||||||
|
|
||||||
s32 cellMsgDialogOpen()
|
s32 cellMsgDialogOpen(u32 type, vm::cptr<char> msgString, vm::ptr<CellMsgDialogCallback> callback, vm::ptr<void> userData, vm::ptr<void> extParam)
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
cellSysutil.warning("cellMsgDialogOpen(type=0x%x, msgString=%s, callback=*0x%x, userData=*0x%x, extParam=*0x%x)", type, msgString, callback, userData, extParam);
|
||||||
|
|
||||||
|
if (!msgString || std::strlen(msgString.get_ptr()) >= 0x200 || type & -0x33f8)
|
||||||
|
{
|
||||||
|
return CELL_MSGDIALOG_ERROR_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
const MsgDialogType _type = { type };
|
||||||
|
|
||||||
|
switch (_type.button_type.unshifted())
|
||||||
|
{
|
||||||
|
case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_NONE:
|
||||||
|
{
|
||||||
|
if (_type.default_cursor || _type.progress_bar_count > 2)
|
||||||
|
{
|
||||||
|
return CELL_MSGDIALOG_ERROR_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_YESNO:
|
||||||
|
{
|
||||||
|
if (_type.default_cursor > 1 || _type.progress_bar_count)
|
||||||
|
{
|
||||||
|
return CELL_MSGDIALOG_ERROR_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CELL_MSGDIALOG_TYPE_BUTTON_TYPE_OK:
|
||||||
|
{
|
||||||
|
if (_type.default_cursor || _type.progress_bar_count)
|
||||||
|
{
|
||||||
|
return CELL_MSGDIALOG_ERROR_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: return CELL_MSGDIALOG_ERROR_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto dlg = fxm::import<MsgDialogBase>(Emu.GetCallbacks().get_msg_dialog);
|
||||||
|
|
||||||
|
if (!dlg)
|
||||||
|
{
|
||||||
|
return CELL_SYSUTIL_ERROR_BUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_type.se_mute_on)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_type.se_normal)
|
||||||
|
{
|
||||||
|
cellSysutil.warning(msgString.get_ptr());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cellSysutil.error(msgString.get_ptr());
|
||||||
|
}
|
||||||
|
|
||||||
|
dlg->type = _type;
|
||||||
|
|
||||||
|
dlg->on_close = [callback, userData, wptr = std::weak_ptr<MsgDialogBase>(dlg)](s32 status)
|
||||||
|
{
|
||||||
|
const auto dlg = wptr.lock();
|
||||||
|
|
||||||
|
if (dlg && dlg->state.compare_and_swap_test(MsgDialogState::Open, MsgDialogState::Close))
|
||||||
|
{
|
||||||
|
if (callback)
|
||||||
|
{
|
||||||
|
sysutil_register_cb([=](ppu_thread& ppu) -> s32
|
||||||
|
{
|
||||||
|
callback(ppu, status, userData);
|
||||||
|
return CELL_OK;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fxm::remove<MsgDialogBase>();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
atomic_t<bool> result(false);
|
||||||
|
|
||||||
|
// Run asynchronously in GUI thread
|
||||||
|
Emu.CallAfter([&]()
|
||||||
|
{
|
||||||
|
dlg->Create(msgString.get_ptr());
|
||||||
|
result = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
while (!result)
|
||||||
|
{
|
||||||
|
CHECK_EMU_STATUS;
|
||||||
|
std::this_thread::sleep_for(1ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellMsgDialogOpen2(u32 type, vm::cptr<char> msgString, vm::ptr<CellMsgDialogCallback> callback, vm::ptr<void> userData, vm::ptr<void> extParam)
|
s32 cellMsgDialogOpen2(u32 type, vm::cptr<char> msgString, vm::ptr<CellMsgDialogCallback> callback, vm::ptr<void> userData, vm::ptr<void> extParam)
|
||||||
|
|||||||
@@ -139,7 +139,8 @@ s32 cellNetCtlGetNatInfo(vm::ptr<CellNetCtlNatInfo> natInfo)
|
|||||||
|
|
||||||
s32 cellGameUpdateInit()
|
s32 cellGameUpdateInit()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellNetCtl);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellGameUpdateTerm()
|
s32 cellGameUpdateTerm()
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ s32 cellOskDialogUnloadAsync()
|
|||||||
|
|
||||||
s32 cellOskDialogGetSize()
|
s32 cellOskDialogGetSize()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(cellOskDialog);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 cellOskDialogAbort()
|
s32 cellOskDialogAbort()
|
||||||
|
|||||||
@@ -484,6 +484,11 @@ s32 cellVdecDecodeAu(u32 handle, CellVdecDecodeMode mode, vm::cptr<CellVdecAuInf
|
|||||||
return CELL_VDEC_ERROR_ARG;
|
return CELL_VDEC_ERROR_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mode == CELL_VDEC_DEC_MODE_B_SKIP || !vdec)
|
||||||
|
{
|
||||||
|
return CELL_VDEC_ERROR_BUSY;
|
||||||
|
}
|
||||||
|
|
||||||
if (mode != CELL_VDEC_DEC_MODE_NORMAL)
|
if (mode != CELL_VDEC_DEC_MODE_NORMAL)
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unsupported decoding mode (%d)" HERE, (s32)mode);
|
fmt::throw_exception("Unsupported decoding mode (%d)" HERE, (s32)mode);
|
||||||
@@ -555,7 +560,7 @@ s32 cellVdecGetPicture(u32 handle, vm::cptr<CellVdecPicFormat> format, vm::ptr<u
|
|||||||
|
|
||||||
if (format->colorMatrixType != CELL_VDEC_COLOR_MATRIX_TYPE_BT709)
|
if (format->colorMatrixType != CELL_VDEC_COLOR_MATRIX_TYPE_BT709)
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unknown colorMatrixType (%d)" HERE, format->colorMatrixType);
|
LOG_ERROR(HLE, "Unknown colorMatrixType (%d)" HERE, format->colorMatrixType);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alpha_plane)
|
if (alpha_plane)
|
||||||
|
|||||||
@@ -234,7 +234,8 @@ s32 sceNpMatching2SetSignalingOptParam()
|
|||||||
|
|
||||||
s32 sceNpMatching2RegisterContextCallback()
|
s32 sceNpMatching2RegisterContextCallback()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sceNp2);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sceNpMatching2SendRoomChatMessage()
|
s32 sceNpMatching2SendRoomChatMessage()
|
||||||
@@ -274,7 +275,8 @@ s32 sceNpMatching2GrantRoomOwner()
|
|||||||
|
|
||||||
s32 sceNpMatching2CreateContext()
|
s32 sceNpMatching2CreateContext()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sceNp2);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sceNpMatching2GetSignalingOptParamLocal()
|
s32 sceNpMatching2GetSignalingOptParamLocal()
|
||||||
@@ -324,12 +326,14 @@ s32 sceNpMatching2DeleteServerContext()
|
|||||||
|
|
||||||
s32 sceNpMatching2SetDefaultRequestOptParam()
|
s32 sceNpMatching2SetDefaultRequestOptParam()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sceNp2);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sceNpMatching2RegisterRoomEventCallback()
|
s32 sceNpMatching2RegisterRoomEventCallback()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sceNp2);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sceNpMatching2GetRoomPasswordLocal()
|
s32 sceNpMatching2GetRoomPasswordLocal()
|
||||||
@@ -379,7 +383,8 @@ s32 sceNpMatching2SetLobbyMemberDataInternal()
|
|||||||
|
|
||||||
s32 sceNpMatching2RegisterRoomMessageCallback()
|
s32 sceNpMatching2RegisterRoomMessageCallback()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sceNp2);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -176,6 +176,12 @@ s32 console_write(vm::ptr<char> data, u32 len)
|
|||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s32 sysPrxForUser_B5D5F64E()
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED_FUNC(sysPrxForUser);
|
||||||
|
return CELL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern void sysPrxForUser_sys_lwmutex_init();
|
extern void sysPrxForUser_sys_lwmutex_init();
|
||||||
extern void sysPrxForUser_sys_lwcond_init();
|
extern void sysPrxForUser_sys_lwcond_init();
|
||||||
@@ -223,4 +229,5 @@ DECLARE(ppu_module_manager::sysPrxForUser)("sysPrxForUser", []()
|
|||||||
REG_FUNC(sysPrxForUser, console_getc);
|
REG_FUNC(sysPrxForUser, console_getc);
|
||||||
REG_FUNC(sysPrxForUser, console_putc);
|
REG_FUNC(sysPrxForUser, console_putc);
|
||||||
REG_FUNC(sysPrxForUser, console_write);
|
REG_FUNC(sysPrxForUser, console_write);
|
||||||
|
REG_FNID(sysPrxForUser, 0xB5D5F64E, sysPrxForUser_B5D5F64E);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -354,7 +354,8 @@ s32 _sys_vsprintf()
|
|||||||
|
|
||||||
s32 _sys_qsort()
|
s32 _sys_qsort()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sysPrxForUser);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sysPrxForUser_sys_libc_init()
|
void sysPrxForUser_sys_libc_init()
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ struct memory_pool_t
|
|||||||
|
|
||||||
s32 sys_mempool_allocate_block()
|
s32 sys_mempool_allocate_block()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sysPrxForUser);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sys_mempool_create(vm::ptr<sys_mempool_t> mempool, vm::ptr<void> chunk, const u64 chunk_size, const u64 block_size, const u64 ralignment)
|
s32 sys_mempool_create(vm::ptr<sys_mempool_t> mempool, vm::ptr<void> chunk, const u64 chunk_size, const u64 block_size, const u64 ralignment)
|
||||||
|
|||||||
@@ -103,12 +103,14 @@ void sys_ppu_thread_once(ppu_thread& ppu, vm::ptr<atomic_be_t<u32>> once_ctrl, v
|
|||||||
|
|
||||||
s32 sys_ppu_thread_register_atexit()
|
s32 sys_ppu_thread_register_atexit()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sysPrxForUser);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 sys_ppu_thread_unregister_atexit()
|
s32 sys_ppu_thread_unregister_atexit()
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented" HERE);
|
UNIMPLEMENTED_FUNC(sysPrxForUser);
|
||||||
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sysPrxForUser_sys_ppu_thread_init()
|
void sysPrxForUser_sys_ppu_thread_init()
|
||||||
|
|||||||
@@ -292,12 +292,15 @@ const g_ppu_scale_table;
|
|||||||
|
|
||||||
bool ppu_interpreter::MFVSCR(ppu_thread& ppu, ppu_opcode_t op)
|
bool ppu_interpreter::MFVSCR(ppu_thread& ppu, ppu_opcode_t op)
|
||||||
{
|
{
|
||||||
fmt::throw_exception<std::logic_error>("MFVSCR instruction at 0x%x (%s)", ppu.cia, Emu.GetTitleID());
|
ppu.vr[op.vd].clear();
|
||||||
|
ppu.vr[op.vd]._u32[0] = ppu.vscr.vscr;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ppu_interpreter::MTVSCR(ppu_thread& ppu, ppu_opcode_t op)
|
bool ppu_interpreter::MTVSCR(ppu_thread& ppu, ppu_opcode_t op)
|
||||||
{
|
{
|
||||||
LOG_WARNING(PPU, "MTVSCR");
|
ppu.vscr.vscr = ppu.vr[op.vb]._u32[0];
|
||||||
|
ppu.vscr.X = ppu.vscr.Y = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,18 @@ enum class ppu_cmd : u32
|
|||||||
hle_call, // Execute function by index (arg)
|
hle_call, // Execute function by index (arg)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union VSCRhdr
|
||||||
|
{
|
||||||
|
u32 vscr;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
u32 sat : 1;
|
||||||
|
u32 X : 15;
|
||||||
|
u32 nj : 1;
|
||||||
|
u32 Y : 15;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
class ppu_thread : public cpu_thread
|
class ppu_thread : public cpu_thread
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -34,6 +46,7 @@ public:
|
|||||||
u64 gpr[32] = {}; // General-Purpose Registers
|
u64 gpr[32] = {}; // General-Purpose Registers
|
||||||
f64 fpr[32] = {}; // Floating Point Registers
|
f64 fpr[32] = {}; // Floating Point Registers
|
||||||
v128 vr[32] = {}; // Vector Registers
|
v128 vr[32] = {}; // Vector Registers
|
||||||
|
VSCRhdr vscr{}; // Vector Status and Control Register
|
||||||
|
|
||||||
alignas(16) bool cr[32] = {}; // Condition Registers (abstract representation)
|
alignas(16) bool cr[32] = {}; // Condition Registers (abstract representation)
|
||||||
|
|
||||||
|
|||||||
@@ -917,7 +917,7 @@ void spu_recompiler::BISL(spu_opcode_t op)
|
|||||||
|
|
||||||
void spu_recompiler::IRET(spu_opcode_t op)
|
void spu_recompiler::IRET(spu_opcode_t op)
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Unimplemented instruction" HERE);
|
LOG_ERROR(SPU, "Unimplemented instruction" HERE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spu_recompiler::BISLED(spu_opcode_t op)
|
void spu_recompiler::BISLED(spu_opcode_t op)
|
||||||
|
|||||||
@@ -495,7 +495,7 @@ void SPUThread::process_mfc_cmd(u32 cmd)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::throw_exception("Unknown command %s (cmd=0x%x, lsa=0x%x, ea=0x%llx, tag=0x%x, size=0x%x)" HERE,
|
LOG_ERROR(SPU, "Unknown command %s (cmd=0x%x, lsa=0x%x, ea=0x%llx, tag=0x%x, size=0x%x)" HERE,
|
||||||
get_mfc_cmd_name(cmd), cmd, ch_mfc_args.lsa, ch_mfc_args.ea, ch_mfc_args.tag, ch_mfc_args.size);
|
get_mfc_cmd_name(cmd), cmd, ch_mfc_args.lsa, ch_mfc_args.ea, ch_mfc_args.tag, ch_mfc_args.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1119,7 +1119,7 @@ bool SPUThread::set_ch_value(u32 ch, u32 value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt::throw_exception("Unknown/illegal channel (ch=%d [%s], value=0x%x)" HERE, ch, ch < 128 ? spu_ch_name[ch] : "???", value);
|
LOG_ERROR(SPU, "Unknown/illegal channel (ch=%d [%s], value=0x%x)" HERE, ch, ch < 128 ? spu_ch_name[ch] : "???", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SPUThread::stop_and_signal(u32 code)
|
bool SPUThread::stop_and_signal(u32 code)
|
||||||
|
|||||||
@@ -129,7 +129,18 @@ error_code sys_fs_open(vm::cptr<char> path, s32 flags, vm::ptr<u32> fd, s32 mode
|
|||||||
fmt::throw_exception("sys_fs_open(%s): Invalid or unimplemented flags: %#o" HERE, path, flags);
|
fmt::throw_exception("sys_fs_open(%s): Invalid or unimplemented flags: %#o" HERE, path, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
fs::file file(local_path, open_mode);
|
const char *path_ptr = path.get_ptr();
|
||||||
|
|
||||||
|
if (strstr(path.get_ptr(), "/dev_hdd0") &&
|
||||||
|
strncmp(path.get_ptr(), "/dev_hdd0", 9))
|
||||||
|
{
|
||||||
|
path_ptr = strstr(path_ptr, "/dev_hdd0");
|
||||||
|
|
||||||
|
LOG_ERROR(HLE, "Path contains device root path but not at the start!");
|
||||||
|
LOG_ERROR(HLE, "Path given is (%s), modified to (%s)", path.get_ptr(), path_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs::file file(local_path, open_mode);
|
||||||
|
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ namespace vm
|
|||||||
|
|
||||||
if (!size || (size | addr) % 4096)
|
if (!size || (size | addr) % 4096)
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Invalid arguments (addr=0x%x, size=0x%x)" HERE, addr, size);
|
LOG_ERROR(MEMORY, "Invalid arguments (addr=0x%x, size=0x%x)" HERE, addr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
const u8 flags_inv = flags_set & flags_clear;
|
const u8 flags_inv = flags_set & flags_clear;
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public:
|
|||||||
template<int Alignement>
|
template<int Alignement>
|
||||||
size_t alloc(size_t size)
|
size_t alloc(size_t size)
|
||||||
{
|
{
|
||||||
if (!can_alloc<Alignement>(size)) fmt::throw_exception("Working buffer not big enough" HERE);
|
if (!can_alloc<Alignement>(size)) LOG_ERROR(RSX, "Working buffer not big enough" HERE);
|
||||||
size_t alloc_size = align(size, Alignement);
|
size_t alloc_size = align(size, Alignement);
|
||||||
size_t aligned_put_pos = align(m_put_pos, Alignement);
|
size_t aligned_put_pos = align(m_put_pos, Alignement);
|
||||||
if (aligned_put_pos + alloc_size < m_size)
|
if (aligned_put_pos + alloc_size < m_size)
|
||||||
|
|||||||
@@ -966,6 +966,7 @@ rsx::blit_engine::context_dma rsx::blit_engine::to_context_dma(u32 in)
|
|||||||
{
|
{
|
||||||
switch (in)
|
switch (in)
|
||||||
{
|
{
|
||||||
|
case CELL_GCM_CONTEXT_DMA_MEMORY_HOST_BUFFER: return rsx::blit_engine::context_dma::memory_host_buffer; //Killzone 2
|
||||||
case CELL_GCM_CONTEXT_DMA_TO_MEMORY_GET_REPORT: return rsx::blit_engine::context_dma::to_memory_get_report;
|
case CELL_GCM_CONTEXT_DMA_TO_MEMORY_GET_REPORT: return rsx::blit_engine::context_dma::to_memory_get_report;
|
||||||
case CELL_GCM_CONTEXT_DMA_REPORT_LOCATION_MAIN: return rsx::blit_engine::context_dma::report_location_main;
|
case CELL_GCM_CONTEXT_DMA_REPORT_LOCATION_MAIN: return rsx::blit_engine::context_dma::report_location_main;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -374,6 +374,7 @@ namespace rsx
|
|||||||
|
|
||||||
enum class context_dma : u8
|
enum class context_dma : u8
|
||||||
{
|
{
|
||||||
|
memory_host_buffer,
|
||||||
to_memory_get_report,
|
to_memory_get_report,
|
||||||
report_location_main,
|
report_location_main,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace rsx
|
|||||||
|
|
||||||
[[noreturn]] void invalid_method(thread*, u32 _reg, u32 arg)
|
[[noreturn]] void invalid_method(thread*, u32 _reg, u32 arg)
|
||||||
{
|
{
|
||||||
fmt::throw_exception("Invalid RSX method 0x%x (arg=0x%x)" HERE, _reg << 2, arg);
|
LOG_ERROR( RSX, "Invalid RSX method 0x%x (arg=0x%x)" HERE, _reg << 2, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Type> struct vertex_data_type_from_element_type;
|
template<typename Type> struct vertex_data_type_from_element_type;
|
||||||
@@ -285,6 +285,7 @@ namespace rsx
|
|||||||
|
|
||||||
switch (report_dma)
|
switch (report_dma)
|
||||||
{
|
{
|
||||||
|
case blit_engine::context_dma::memory_host_buffer: location = CELL_GCM_LOCATION_MAIN; break;
|
||||||
case blit_engine::context_dma::to_memory_get_report: location = CELL_GCM_LOCATION_LOCAL; break;
|
case blit_engine::context_dma::to_memory_get_report: location = CELL_GCM_LOCATION_LOCAL; break;
|
||||||
case blit_engine::context_dma::report_location_main: location = CELL_GCM_LOCATION_MAIN; break;
|
case blit_engine::context_dma::report_location_main: location = CELL_GCM_LOCATION_MAIN; break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
Reference in New Issue
Block a user