video_core: Fix shader-interpreter conditional-code initialization

Rather than reserving the incoming state of the conditional codes, the
shader-interpreter was setting them both to false. In pretty much all
cases, the initial state of a shaderunit can be zero-initialized
statically. Just running the interpreter shouldn't necessarily reset the
conditional codes though.  The JIT loads incoming conditional codes
while the shader-interpreter resets them to false. This makes the
interpreter match the behavior of the shader-jit.
This commit is contained in:
Wunkolo 2024-08-17 11:15:34 -07:00
parent 1053676c9f
commit 2cff4c9c34
3 changed files with 6 additions and 12 deletions

View file

@ -9,10 +9,7 @@
namespace Pica {
ShaderUnit::ShaderUnit(GeometryEmitter* emitter) : emitter_ptr{emitter} {
const Common::Vec4<f24> temp_vec{f24::Zero(), f24::Zero(), f24::Zero(), f24::One()};
temporary.fill(temp_vec);
}
ShaderUnit::ShaderUnit(GeometryEmitter* emitter) : emitter_ptr{emitter} {}
ShaderUnit::~ShaderUnit() = default;

View file

@ -46,11 +46,11 @@ struct ShaderUnit {
}
public:
s32 address_registers[3];
bool conditional_code[2];
alignas(16) std::array<Common::Vec4<f24>, 16> input;
alignas(16) std::array<Common::Vec4<f24>, 16> temporary;
alignas(16) std::array<Common::Vec4<f24>, 16> output;
s32 address_registers[3] = {};
bool conditional_code[2] = {};
alignas(16) std::array<Common::Vec4<f24>, 16> input = {};
alignas(16) std::array<Common::Vec4<f24>, 16> temporary = {};
alignas(16) std::array<Common::Vec4<f24>, 16> output = {};
GeometryEmitter* emitter_ptr;
private:

View file

@ -52,9 +52,6 @@ static void RunInterpreter(const ShaderSetup& setup, ShaderUnit& state,
boost::circular_buffer<LoopStackElement> loop_stack(4);
u32 program_counter = entry_point;
state.conditional_code[0] = false;
state.conditional_code[1] = false;
const auto do_if = [&](Instruction instr, bool condition) {
if (condition) {
if_stack.push_back({