From 34800248ccf763d458fd0c44b9fec8e44b6782d3 Mon Sep 17 00:00:00 2001 From: Zephyron Date: Mon, 8 Dec 2025 17:03:51 +1000 Subject: [PATCH] fix(video_core): Replace assertions with warnings in Fermi2D and BSD sockets - Fermi2D: Log warnings for unsupported operations, layers, depth, and clip - BSD sockets: Return INVAL for unimplemented getsockopt optnames instead of SUCCESS Co-authored-by: JPikachu Signed-off-by: Zephyron --- src/core/hle/service/sockets/bsd.cpp | 5 +++-- src/video_core/engines/fermi_2d.cpp | 22 +++++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 9e278a651..6eda3e010 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -808,8 +808,9 @@ Errno BSD::GetSockOptImpl(s32 fd, u32 level, OptName optname, std::vector& o return Translate(getsockopt_err); } default: - UNIMPLEMENTED_MSG("Unimplemented optname={}", optname); - return Errno::SUCCESS; + LOG_WARNING(Service, "(STUBBED) Unimplemented optname={} (0x{:x}), returning INVAL", + static_cast(optname), static_cast(optname)); + return Errno::INVAL; } } diff --git a/src/video_core/engines/fermi_2d.cpp b/src/video_core/engines/fermi_2d.cpp index 91f10aec2..933449069 100644 --- a/src/video_core/engines/fermi_2d.cpp +++ b/src/video_core/engines/fermi_2d.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include "common/assert.h" @@ -65,11 +66,22 @@ void Fermi2D::Blit() { LOG_DEBUG(HW_GPU, "called. source address=0x{:x}, destination address=0x{:x}", regs.src.Address(), regs.dst.Address()); - UNIMPLEMENTED_IF_MSG(regs.operation != Operation::SrcCopy, "Operation is not copy"); - UNIMPLEMENTED_IF_MSG(regs.src.layer != 0, "Source layer is not zero"); - UNIMPLEMENTED_IF_MSG(regs.dst.layer != 0, "Destination layer is not zero"); - UNIMPLEMENTED_IF_MSG(regs.src.depth != 1, "Source depth is not one"); - UNIMPLEMENTED_IF_MSG(regs.clip_enable != 0, "Clipped blit enabled"); + if (regs.operation != Operation::SrcCopy) { + LOG_WARNING(HW_GPU, "Operation is not SrcCopy ({}), skipping blit", static_cast(regs.operation)); + return; + } + if (regs.src.layer != 0) { + LOG_DEBUG(HW_GPU, "Source layer is {}, expected 0 - using layer 0", regs.src.layer); + } + if (regs.dst.layer != 0) { + LOG_DEBUG(HW_GPU, "Destination layer is {}, expected 0 - using layer 0", regs.dst.layer); + } + if (regs.src.depth != 1) { + LOG_DEBUG(HW_GPU, "Source depth is {}, expected 1 - using first layer", regs.src.depth); + } + if (regs.clip_enable != 0) { + LOG_DEBUG(HW_GPU, "Clipped blit enabled - ignoring clip"); + } const auto& args = regs.pixels_from_memory; constexpr s64 null_derivative = 1ULL << 32;