From 67d9218101f8f6e3d644dc8d61a2bdc9442abd31 Mon Sep 17 00:00:00 2001 From: Stephen Miller Date: Mon, 10 Mar 2025 19:50:16 -0500 Subject: [PATCH] Final fixups Removed the port assert and added asserts in libSceGnmDriver for when sceVideoOutGetBufferLabelAddress calls fail. --- src/core/libraries/gnmdriver/gnmdriver.cpp | 6 ++++-- src/core/libraries/videoout/video_out.cpp | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/libraries/gnmdriver/gnmdriver.cpp b/src/core/libraries/gnmdriver/gnmdriver.cpp index e2e865def..e8560b2b8 100644 --- a/src/core/libraries/gnmdriver/gnmdriver.cpp +++ b/src/core/libraries/gnmdriver/gnmdriver.cpp @@ -1087,7 +1087,8 @@ s32 PS4_SYSV_ABI sceGnmInsertWaitFlipDone(u32* cmdbuf, u32 size, s32 vo_handle, } uintptr_t label_addr{}; - VideoOut::sceVideoOutGetBufferLabelAddress(vo_handle, &label_addr); + ASSERT_MSG(VideoOut::sceVideoOutGetBufferLabelAddress(vo_handle, &label_addr) == 16, + "sceVideoOutGetBufferLabelAddress call failed"); auto* wait_reg_mem = reinterpret_cast(cmdbuf); wait_reg_mem->header = PM4Type3Header{PM4ItOpcode::WaitRegMem, 5}; @@ -2041,7 +2042,8 @@ static inline s32 PatchFlipRequest(u32* cmdbuf, u32 size, u32 vo_handle, u32 buf } uintptr_t label_addr{}; - VideoOut::sceVideoOutGetBufferLabelAddress(vo_handle, &label_addr); + ASSERT_MSG(VideoOut::sceVideoOutGetBufferLabelAddress(vo_handle, &label_addr) == 16, + "sceVideoOutGetBufferLabelAddress call failed"); // Write event to lock the VO surface auto* write_lock = reinterpret_cast(cmdbuf); diff --git a/src/core/libraries/videoout/video_out.cpp b/src/core/libraries/videoout/video_out.cpp index d14da225f..3a5f3bda7 100644 --- a/src/core/libraries/videoout/video_out.cpp +++ b/src/core/libraries/videoout/video_out.cpp @@ -300,7 +300,9 @@ s32 PS4_SYSV_ABI sceVideoOutGetBufferLabelAddress(s32 handle, uintptr_t* label_a return ORBIS_VIDEO_OUT_ERROR_INVALID_ADDRESS; } auto* port = driver->GetPort(handle); - ASSERT(port); + if (!port) { + return ORBIS_VIDEO_OUT_ERROR_INVALID_HANDLE; + } *label_addr = reinterpret_cast(port->buffer_labels.data()); return 16; }