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 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;