mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-12 09:09:47 +12:00
Shader Decomp: Remove pair member capture in lambda (unsupported on NDK)
This commit is contained in:
parent
a20982f78a
commit
44705508ff
1 changed files with 11 additions and 11 deletions
|
@ -65,11 +65,6 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto setExitMode = [&it](ExitMode mode) {
|
|
||||||
it->second = mode;
|
|
||||||
return it->second;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Make sure not to go out of bounds on the shader
|
// Make sure not to go out of bounds on the shader
|
||||||
for (u32 pc = start; pc < PICAShader::maxInstructionCount && pc != end; pc++) {
|
for (u32 pc = start; pc < PICAShader::maxInstructionCount && pc != end; pc++) {
|
||||||
const u32 instruction = shader.loadedShader[pc];
|
const u32 instruction = shader.loadedShader[pc];
|
||||||
|
@ -85,7 +80,8 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e
|
||||||
// This opens up 2 parallel paths of execution
|
// This opens up 2 parallel paths of execution
|
||||||
auto branchTakenExit = analyzeFunction(shader, dest, end, labels);
|
auto branchTakenExit = analyzeFunction(shader, dest, end, labels);
|
||||||
auto branchNotTakenExit = analyzeFunction(shader, pc + 1, dest, labels);
|
auto branchNotTakenExit = analyzeFunction(shader, pc + 1, dest, labels);
|
||||||
return setExitMode(exitParallel(branchTakenExit, branchNotTakenExit));
|
it->second = exitParallel(branchTakenExit, branchNotTakenExit);
|
||||||
|
return it->second;
|
||||||
}
|
}
|
||||||
case ShaderOpcodes::IFU:
|
case ShaderOpcodes::IFU:
|
||||||
case ShaderOpcodes::IFC: {
|
case ShaderOpcodes::IFC: {
|
||||||
|
@ -96,7 +92,8 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e
|
||||||
const Function* branchTakenFunc = addFunction(shader, pc + 1, dest);
|
const Function* branchTakenFunc = addFunction(shader, pc + 1, dest);
|
||||||
// Check if analysis of the branch taken func failed and return unknown if it did
|
// Check if analysis of the branch taken func failed and return unknown if it did
|
||||||
if (analysisFailed) {
|
if (analysisFailed) {
|
||||||
return setExitMode(ExitMode::Unknown);
|
it->second = ExitMode::Unknown;
|
||||||
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next analyze the not taken func
|
// Next analyze the not taken func
|
||||||
|
@ -105,7 +102,8 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e
|
||||||
const Function* branchNotTakenFunc = addFunction(shader, dest, dest + num);
|
const Function* branchNotTakenFunc = addFunction(shader, dest, dest + num);
|
||||||
// Check if analysis failed and return unknown if it did
|
// Check if analysis failed and return unknown if it did
|
||||||
if (analysisFailed) {
|
if (analysisFailed) {
|
||||||
return setExitMode(ExitMode::Unknown);
|
it->second = ExitMode::Unknown;
|
||||||
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
branchNotTakenExitMode = branchNotTakenFunc->exitMode;
|
branchNotTakenExitMode = branchNotTakenFunc->exitMode;
|
||||||
|
@ -114,11 +112,13 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e
|
||||||
auto parallel = exitParallel(branchTakenFunc->exitMode, branchNotTakenExitMode);
|
auto parallel = exitParallel(branchTakenFunc->exitMode, branchNotTakenExitMode);
|
||||||
// Both branches of the if/else end, so there's nothing after the call
|
// Both branches of the if/else end, so there's nothing after the call
|
||||||
if (parallel == ExitMode::AlwaysEnd) {
|
if (parallel == ExitMode::AlwaysEnd) {
|
||||||
return setExitMode(parallel);
|
it->second = parallel;
|
||||||
|
return it->second;
|
||||||
} else {
|
} else {
|
||||||
ExitMode afterConditional = analyzeFunction(shader, pc + 1, end, labels);
|
ExitMode afterConditional = analyzeFunction(shader, pc + 1, end, labels);
|
||||||
ExitMode conditionalExitMode = exitSeries(parallel, afterConditional);
|
ExitMode conditionalExitMode = exitSeries(parallel, afterConditional);
|
||||||
return setExitMode(conditionalExitMode);
|
it->second = conditionalExitMode;
|
||||||
|
return it->second;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e
|
||||||
case ShaderOpcodes::CALLC: Helpers::panic("Unimplemented control flow operation (CALLC)"); break;
|
case ShaderOpcodes::CALLC: Helpers::panic("Unimplemented control flow operation (CALLC)"); break;
|
||||||
case ShaderOpcodes::CALLU: Helpers::panic("Unimplemented control flow operation (CALLU)"); break;
|
case ShaderOpcodes::CALLU: Helpers::panic("Unimplemented control flow operation (CALLU)"); break;
|
||||||
case ShaderOpcodes::LOOP: Helpers::panic("Unimplemented control flow operation (LOOP)"); break;
|
case ShaderOpcodes::LOOP: Helpers::panic("Unimplemented control flow operation (LOOP)"); break;
|
||||||
case ShaderOpcodes::END: return setExitMode(ExitMode::AlwaysEnd);
|
case ShaderOpcodes::END: it->second = ExitMode::AlwaysEnd; return it->second;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue