[shader_recompiler] Fix Shuffle handling for Position attributes (#3406)
This fixes the rescaling path to properly convert to F32, matching native 1x behavior for any resolution. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3406 Reviewed-by: DraVee <dravee@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: MaranBr <maranbr@outlook.com> Co-committed-by: MaranBr <maranbr@outlook.com>
This commit is contained in:
parent
634686d59b
commit
7d81a724ef
|
|
@ -304,17 +304,9 @@ IR::Program TranslateProgram(ObjectPool<IR::Inst>& inst_pool, ObjectPool<IR::Blo
|
||||||
Optimization::GlobalMemoryToStorageBufferPass(program, host_info);
|
Optimization::GlobalMemoryToStorageBufferPass(program, host_info);
|
||||||
Optimization::TexturePass(env, program, host_info);
|
Optimization::TexturePass(env, program, host_info);
|
||||||
|
|
||||||
bool should_rescale =
|
if (Settings::values.resolution_info.active) {
|
||||||
#ifdef __ANDROID__
|
|
||||||
Settings::values.resolution_info.active;
|
|
||||||
#else
|
|
||||||
true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (should_rescale) {
|
|
||||||
Optimization::RescalingPass(program);
|
Optimization::RescalingPass(program);
|
||||||
}
|
}
|
||||||
|
|
||||||
Optimization::DeadCodeEliminationPass(program);
|
Optimization::DeadCodeEliminationPass(program);
|
||||||
if (Settings::values.renderer_debug) {
|
if (Settings::values.renderer_debug) {
|
||||||
Optimization::VerificationPass(program);
|
Optimization::VerificationPass(program);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
|
@ -63,10 +66,11 @@ void VisitMark(IR::Block& block, IR::Inst& inst) {
|
||||||
}
|
}
|
||||||
if (must_patch_outside) {
|
if (must_patch_outside) {
|
||||||
const auto it{IR::Block::InstructionList::s_iterator_to(inst)};
|
const auto it{IR::Block::InstructionList::s_iterator_to(inst)};
|
||||||
IR::IREmitter ir{block, IR::Block::InstructionList::s_iterator_to(inst)};
|
IR::IREmitter ir{block, it};
|
||||||
const IR::F32 new_inst{&*block.PrependNewInst(it, inst)};
|
IR::Inst* const new_inst{&*block.PrependNewInst(it, inst)};
|
||||||
|
const IR::F32 new_bitcast{ir.ConvertUToF(32, 32, IR::Value{new_inst})};
|
||||||
const IR::F32 up_factor{ir.FPRecip(ir.ResolutionDownFactor())};
|
const IR::F32 up_factor{ir.FPRecip(ir.ResolutionDownFactor())};
|
||||||
const IR::Value converted{ir.FPMul(new_inst, up_factor)};
|
const IR::Value converted{ir.FPMul(new_bitcast, up_factor)};
|
||||||
inst.ReplaceUsesWith(converted);
|
inst.ReplaceUsesWith(converted);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue