file_sys: apply case-insensitive search to mods_path on GNU/Linux and macOS (#4312) (#4310)

The case-insensitive fallback search() in GetHostPath is only
invoked for patch_path and host_path, so mods whose file or folder
capitalization does not exactly match the guest path are silently
bypassed even when the files are present. Mirror the existing
search(patch_path) pass for mods_path, placed first to preserve
mod > patch > base precedence.

Co-authored-by: Matías Buzzo <matias@mbuzzo.com>
This commit is contained in:
Marcin Mikołajczyk
2026-04-27 17:07:05 +02:00
committed by GitHub
parent f98f1aac5a
commit fba374442c
7 changed files with 66 additions and 28 deletions
+40
View File
@@ -121,3 +121,43 @@ TEST_F(GcnTest, sub_f16) {
EXPECT_TRUE(result.has_value());
EXPECT_EQ(*result, F16x2{half(-1.0f)}); //confirmed with neo
}
TEST_F(GcnTest, mul_legacy_nan) {
auto runner = gcn_test::Runner::instance().value();
auto spirv = TranslateToSpirv(VOP2(OpcodeVOP2::V_MUL_LEGACY_F32, VOperand8::V0, SOperand9::V0, VOperand8::V1).Get());
auto result = runner->run<u32>(spirv, std::array{u32(0), u32(0x7fc00000)});
EXPECT_TRUE(result.has_value());
EXPECT_EQ(*result, 0);
}
TEST_F(GcnTest, mul_nan) {
auto runner = gcn_test::Runner::instance().value();
auto spirv = TranslateToSpirv(VOP2(OpcodeVOP2::V_MUL_F32, VOperand8::V0, SOperand9::V0, VOperand8::V1).Get());
auto result = runner->run<float>(spirv, std::array{u32(0), u32(0x7fc00000)});
EXPECT_TRUE(result.has_value());
EXPECT_TRUE(std::isnan(*result));
}
TEST_F(GcnTest, min_legacy_nan) {
auto runner = gcn_test::Runner::instance().value();
auto spirv = TranslateToSpirv(VOP2(OpcodeVOP2::V_MIN_LEGACY_F32, VOperand8::V0, SOperand9::V0, VOperand8::V1).Get());
auto result = runner->run<u32>(spirv, std::array{u32(0), u32(0x7fc00000)});
EXPECT_TRUE(result.has_value());
EXPECT_EQ(*result, 0x7fc00000);
}
TEST_F(GcnTest, min_nan) {
auto runner = gcn_test::Runner::instance().value();
auto spirv = TranslateToSpirv(VOP2(OpcodeVOP2::V_MIN_F32, VOperand8::V0, SOperand9::V0, VOperand8::V1).Get());
auto result = runner->run<float>(spirv, std::array{u32(0), u32(0x7fc00000)});
EXPECT_TRUE(result.has_value());
EXPECT_EQ(*result, 0);
}