diff --git a/src/audio_core/common/feature_support.h b/src/audio_core/common/feature_support.h index 2fbf122154..e4dd1737bd 100644 --- a/src/audio_core/common/feature_support.h +++ b/src/audio_core/common/feature_support.h @@ -13,7 +13,7 @@ #include "common/polyfill_ranges.h" namespace AudioCore { -constexpr u32 CurrentRevision = 12; +constexpr u32 CurrentRevision = 13; enum class SupportTags { CommandProcessingTimeEstimatorVersion4, diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index 5dc7e5d59d..34acec9ebf 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp @@ -14,13 +14,22 @@ void ArmInterface::LogBacktrace(Kernel::KProcess* process) const { this->GetContext(ctx); LOG_ERROR(Core_ARM, "Backtrace, sp={:016X}, pc={:016X}", ctx.sp, ctx.pc); - LOG_ERROR(Core_ARM, "{:20}{:20}{:20}{:20}{}", "Module Name", "Address", "Original Address", - "Offset", "Symbol"); + LOG_ERROR(Core_ARM, "{:20}{:20}{:20}{:20}{}", "Module Name", "Address", "Original Address", "Offset", "Symbol"); LOG_ERROR(Core_ARM, ""); + const auto backtrace = GetBacktraceFromContext(process, ctx); + u64 last_address = 0; + for (const auto& entry : backtrace) { + + // Skip duplicate consecutive addresses + if (entry.address == last_address) + continue; + LOG_ERROR(Core_ARM, "{:20}{:016X} {:016X} {:016X} {}", entry.module, entry.address, entry.original_address, entry.offset, entry.name); + + last_address = entry.address; } } diff --git a/src/core/hle/api_version.h b/src/core/hle/api_version.h index 80d6cea09f..24464dbf2b 100644 --- a/src/core/hle/api_version.h +++ b/src/core/hle/api_version.h @@ -11,9 +11,9 @@ namespace HLE::ApiVersion { // Horizon OS version constants. -constexpr u8 HOS_VERSION_MAJOR = 12; -constexpr u8 HOS_VERSION_MINOR = 1; -constexpr u8 HOS_VERSION_MICRO = 0; +constexpr u8 HOS_VERSION_MAJOR = 19; +constexpr u8 HOS_VERSION_MINOR = 0; +constexpr u8 HOS_VERSION_MICRO = 1; // NintendoSDK version constants. @@ -21,14 +21,14 @@ constexpr u8 SDK_REVISION_MAJOR = 1; constexpr u8 SDK_REVISION_MINOR = 0; constexpr char PLATFORM_STRING[] = "NX"; -constexpr char VERSION_HASH[] = "76b10c2dab7d3aa73fc162f8dff1655e6a21caf4"; -constexpr char DISPLAY_VERSION[] = "12.1.0"; -constexpr char DISPLAY_TITLE[] = "NintendoSDK Firmware for NX 12.1.0-1.0"; +constexpr char VERSION_HASH[] = "835c78223df116284ef7e36e8441760edc81729c"; +constexpr char DISPLAY_VERSION[] = "19.0.1"; +constexpr char DISPLAY_TITLE[] = "NintendoSDK Firmware for NX 19.0.1-1.0"; // Atmosphere version constants. constexpr u8 ATMOSPHERE_RELEASE_VERSION_MAJOR = 1; -constexpr u8 ATMOSPHERE_RELEASE_VERSION_MINOR = 0; +constexpr u8 ATMOSPHERE_RELEASE_VERSION_MINOR = 8; constexpr u8 ATMOSPHERE_RELEASE_VERSION_MICRO = 0; constexpr u32 AtmosphereTargetFirmwareWithRevision(u8 major, u8 minor, u8 micro, u8 rev) { diff --git a/src/core/hle/result.h b/src/core/hle/result.h index d06d6655e4..c456f345f5 100644 --- a/src/core/hle/result.h +++ b/src/core/hle/result.h @@ -185,16 +185,28 @@ enum class ErrorModule : u32 { Fst2 = 251, Nex = 306, NPLN = 321, + Libnx = 345, + HomebrewAbi = 346, + HomebrewLoader = 347, + LibnxNvidia = 348, + LibnxBinder = 349, TSPM = 499, DevMenu = 500, Nverpt = 520, Am_StuckMonitor = 521, Pia = 618, Eagle = 623, + LibAppletWeb = 800, + LibAppletAuth = 809, + LibAppletLns = 810, + LibAppletShop = 811, + + // NOTE(EmulationEnjoyer): Keeping old applet entry names in the case there's some lookup by name happening somewhere GeneralWebApplet = 800, WifiWebAuthApplet = 809, WhitelistedApplet = 810, ShopN = 811, + Coral = 815 }; diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp index 9f6fc335dc..cf9d211365 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp @@ -548,10 +548,9 @@ Id EmitInvocationInfo(EmitContext& ctx) { switch (ctx.stage) { case Stage::TessellationControl: case Stage::TessellationEval: - return ctx.OpShiftLeftLogical(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.patch_vertices_in), - ctx.Const(16u)); + return ctx.OpShiftLeftLogical(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.patch_vertices_in), ctx.Const(16u)); case Stage::Geometry: - return ctx.Const(InputTopologyVertices::vertices(ctx.runtime_info.input_topology) << 16); + return ctx.OpShiftLeftLogical(ctx.U32[1], ctx.Const(InputTopologyVertices::vertices(ctx.runtime_info.input_topology)), ctx.Const(16u)); default: LOG_WARNING(Shader, "(STUBBED) called"); return ctx.Const(0x00ff0000u); diff --git a/src/shader_recompiler/ir_opt/global_memory_to_storage_buffer_pass.cpp b/src/shader_recompiler/ir_opt/global_memory_to_storage_buffer_pass.cpp index 0cea799455..2d4feca02c 100644 --- a/src/shader_recompiler/ir_opt/global_memory_to_storage_buffer_pass.cpp +++ b/src/shader_recompiler/ir_opt/global_memory_to_storage_buffer_pass.cpp @@ -372,8 +372,8 @@ void CollectStorageBuffers(IR::Block& block, IR::Inst& inst, StorageInfo& info) // avoid getting false positives static constexpr Bias nvn_bias{ .index = 0, - .offset_begin = 0x110, - .offset_end = 0x610, + .offset_begin = 0x100, + .offset_end = 0x700, .alignment = 16, }; // Track the low address of the instruction diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index 9051ba0734..6a2fbba747 100644 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp @@ -76,13 +76,7 @@ bool DmaPusher::Step() { return true; } - // Push buffer non-empty, read a word - if (dma_state.method >= MacroRegistersStart) { - if (subchannels[dma_state.subchannel]) { - subchannels[dma_state.subchannel]->current_dirty = memory_manager.IsMemoryDirty( - dma_state.dma_get, command_list_header.size * sizeof(u32)); - } - } + // Determine whether to use safe or unsafe processing const auto safe_process = [&] { Tegra::Memory::GpuGuestMemory @@ -90,6 +84,7 @@ bool DmaPusher::Step() { &command_headers); ProcessCommands(headers); }; + const auto unsafe_process = [&] { Tegra::Memory::GpuGuestMemory @@ -97,14 +92,12 @@ bool DmaPusher::Step() { &command_headers); ProcessCommands(headers); }; - if (Settings::IsGPULevelHigh()) { - if (dma_state.method >= MacroRegistersStart) { - unsafe_process(); - return true; - } + + if (Settings::IsGPULevelHigh() || (dma_state.method >= MacroRegistersStart)) { safe_process(); return true; } + unsafe_process(); } return true;