mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-21 11:26:56 +02:00
Preserve shared scalar loads during embedded vertex fetch replacement
This commit is contained in:
@@ -789,15 +789,6 @@ const EmbeddedFetchLoad* FindEmbeddedFetchLoad(const EmbeddedFetchPlan* plan, ui
|
||||
return found != plan->loads.end() ? &*found : nullptr;
|
||||
}
|
||||
|
||||
bool IsEmbeddedFetchPrologLoad(const EmbeddedFetchPlan* plan, uint32_t pc) {
|
||||
if (plan == nullptr) {
|
||||
return false;
|
||||
}
|
||||
return std::ranges::any_of(plan->loads, [pc](const auto& load) {
|
||||
return std::ranges::find(load.prolog_loads, pc) != load.prolog_loads.end();
|
||||
});
|
||||
}
|
||||
|
||||
int ResolveEmbeddedFetchResource(const ShaderVertexInputInfo& input,
|
||||
const EmbeddedFetchLoad& load) {
|
||||
if (load.attrib_id >= 0 && load.attrib_id < input.resources_num &&
|
||||
@@ -819,22 +810,6 @@ int ResolveEmbeddedFetchResource(const ShaderVertexInputInfo& input,
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool IsScalarMemoryLoad(Decoder::Opcode opcode) {
|
||||
switch (opcode) {
|
||||
case Decoder::Opcode::S_LOAD_DWORD:
|
||||
case Decoder::Opcode::S_LOAD_DWORDX2:
|
||||
case Decoder::Opcode::S_LOAD_DWORDX4:
|
||||
case Decoder::Opcode::S_LOAD_DWORDX8:
|
||||
case Decoder::Opcode::S_LOAD_DWORDX16:
|
||||
case Decoder::Opcode::S_BUFFER_LOAD_DWORD:
|
||||
case Decoder::Opcode::S_BUFFER_LOAD_DWORDX2:
|
||||
case Decoder::Opcode::S_BUFFER_LOAD_DWORDX4:
|
||||
case Decoder::Opcode::S_BUFFER_LOAD_DWORDX8:
|
||||
case Decoder::Opcode::S_BUFFER_LOAD_DWORDX16: return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool IsBufferDwordLoad(Decoder::Opcode opcode) {
|
||||
switch (opcode) {
|
||||
case Decoder::Opcode::BUFFER_LOAD_DWORD:
|
||||
@@ -1258,10 +1233,6 @@ IR::Program TranslateProgram(const Decoder::Program& decoded, const CFG::Graph&
|
||||
if (IsCodeTableLoad(cfg, instruction.pc)) {
|
||||
continue;
|
||||
}
|
||||
if (IsScalarMemoryLoad(instruction.opcode) &&
|
||||
IsEmbeddedFetchPrologLoad(options.embedded_fetch, instruction.pc)) {
|
||||
continue;
|
||||
}
|
||||
const auto* embedded = FindEmbeddedFetchLoad(options.embedded_fetch, instruction.pc);
|
||||
if (embedded != nullptr && IsBufferDwordLoad(instruction.opcode) &&
|
||||
instruction.data_dwords == embedded->components &&
|
||||
|
||||
Reference in New Issue
Block a user