From 7f07486c29bf762ec7413f347b66569dcf18112f Mon Sep 17 00:00:00 2001 From: Marius DAVID Date: Sat, 7 Nov 2026 16:40:36 +0100 Subject: [PATCH 1/2] Fix discord invite link in docs --- CONTRIBUTING.md | 4 ++-- README.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 661aaedf6e..1662dbe0b9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ Eglantine has lots of different ways that you can contribute to its efforts, even without knowing how to write code: -- Join our [Discord](https://discord.gg/jCCZ58VExk) community +- Join our [Discord](https://discord.gg/XkS5NVPTUY) community - Submit [bug reports or feature requests](https://github.com/Djihads80/Eglantine/issues) - Improve documentation or share reproducible testing results - Contribute to our [translation efforts](./dist/languages/README.md) @@ -47,4 +47,4 @@ Before opening a pull request, make sure your branch is up-to-date with Eglantin Alongside the other contribution methods listed up top, you can also choose to contribute through documentation, organization, or community guides. These can be done either through the code contribution methods described above, or created externally and shared via our Discord community. -If you have an external tool/page that you believe would be handy to integrate/link into Eglantine, please discuss it with the developers on [Discord](https://discord.gg/jCCZ58VExk). **Do not submit vibe-coded or AI generated tools or applications**. +If you have an external tool/page that you believe would be handy to integrate/link into Eglantine, please discuss it with the developers on [Discord](https://discord.gg/XkS5NVPTUY). **Do not submit vibe-coded or AI generated tools or applications**. diff --git a/README.md b/README.md index baf60d4cc9..a30ca10093 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ A list of supported games will be available in future. Please be patient. ## Development -For development discussions, please join us on [Discord](https://discord.gg/jCCZ58VExk) +For development discussions, please join us on [Discord](https://discord.gg/XkS5NVPTUY) If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Stoat to learn more about the current state of the emulator. @@ -67,7 +67,7 @@ You can download the latest releases from [here](https://github.com/Djihads80/Eg We currently do not take in any donations for the time being -If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/jCCZ58VExk) +If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/XkS5NVPTUY) ## Star History From 1e2c2dd4dbd11211bc9480a010cfe4908df0c161 Mon Sep 17 00:00:00 2001 From: rdenno Date: Fri, 6 Nov 2026 13:26:50 -0500 Subject: [PATCH 2/2] shader: lower BRA.U and HSETP2 with a constant buffer Shaders using two instruction forms were rejected, causing invisible enemies in HWAoI and sometimes invisible roads in MKW: - @!P0 BRA.U: offset mode 1 (.U) only says the predicate is warp-uniform. It was refused as a convergence mode; it now lowers as a plain predicated branch, like mode 0 (the target already masks the mode bits). - HSETP2.GT.AND P1, PT, RZ.H0_H0, c[0x7][0xfc].H1_H1, !P1 (opcode 0x634): the constant buffer form of HSETP2, with the B swizzle, abs and neg bits where the register form has them. The value is loaded into a scratch register and the register form emitted. Assisted-by: Claude Opus 5.5 --- .../frontend/ampere/lower_to_maxwell.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/shader_recompiler/frontend/ampere/lower_to_maxwell.h b/src/shader_recompiler/frontend/ampere/lower_to_maxwell.h index 60bf744199..3eee2dd1cc 100644 --- a/src/shader_recompiler/frontend/ampere/lower_to_maxwell.h +++ b/src/shader_recompiler/frontend/ampere/lower_to_maxwell.h @@ -2955,8 +2955,9 @@ inline LoweredProgram LowerToMaxwellWith(std::span code, u32 (u64{insn.Bits(76, 4)} << 48) | (u64{1} << 52) | (u64{insn.Bits(80, 1)} << 55)); break; } - case 0x234: case 0x434: { // HSETP2 with a register (B swizzle 60-61, abs 62, neg 63) or an - // immediate half pair: A swizzle 74-75 (neg 72, abs 73), + case 0x234: case 0x434: case 0x634: { // HSETP2 with a register (B swizzle 60-61, abs 62, + // neg 63), an immediate half pair or a constant buffer (same B fields): + // A swizzle 74-75 (neg 72, abs 73), // combine 69-70, H_AND 71, compare 76-79, FTZ 80, P/Q 81-86, input 87-90. u64 source = u64{250} << 20; if (opcode == 0x234) { @@ -2964,6 +2965,12 @@ inline LoweredProgram LowerToMaxwellWith(std::span code, u32 return fail(index, "native half comparison mode"); source = (u64{insn.Bits(32, 8)} << 20) | (u64{insn.Bits(60, 2)} << 28) | (u64{insn.Bits(62, 1)} << 30) | (u64{insn.Bits(63, 1)} << 31); + } else if (opcode == 0x634) { + // Mario Kart World: HSETP2.GT.AND P1, PT, RZ.H0_H0, c[0x7][0xfc].H1_H1, !P1. + if (insn.Bits(64, 5)) return fail(index, "native half comparison mode"); + if (materialize(2, 255, 250, false, false) == 255) break; + source |= (u64{insn.Bits(60, 2)} << 28) | (u64{insn.Bits(62, 1)} << 30) | + (u64{insn.Bits(63, 1)} << 31); } else { mov_imm(250, insn.words[1]); } @@ -3498,9 +3505,10 @@ inline LoweredProgram LowerToMaxwellWith(std::span code, u32 // when its active threads are the mask in the uniform register at 24-31 (bit 91; // URZ without it). The compiler puts warp-synchronous fast paths behind them (shuffles // on a converged warp; the other path calls a WARPSYNC helper). Eden runs the warp's - // threads converged there: .CONV always branches and .DIV never does. + // threads converged there: .CONV always branches and .DIV never does. .U (1) only + // says the predicate is warp-uniform: a plain branch (Mario Kart World roads). const u32 mode = insn.Bits(32, 2); - if (mode == 1 || (mode == 0 && insn.Bits(91, 1))) + if (mode == 0 && insn.Bits(91, 1)) return fail(index, "native branch convergence mode"); if (mode == 2) break; u64 branch_predicate = predicate;