Shader Recompiler: Auto stub special registers and dump pipelines on exception.
This commit is contained in:
parent
8beda6a2bf
commit
710ca3ca49
|
@ -161,7 +161,8 @@ enum class SpecialRegister : u64 {
|
|||
LOG_WARNING(Shader, "(STUBBED) SR_AFFINITY");
|
||||
return ir.Imm32(0); // This is the default value hardware returns.
|
||||
default:
|
||||
throw NotImplementedException("S2R special register {}", special_register);
|
||||
LOG_CRITICAL(Shader, "(STUBBED) Special register {}", special_register);
|
||||
return ir.Imm32(0); // This is the default value hardware returns.
|
||||
}
|
||||
}
|
||||
} // Anonymous namespace
|
||||
|
|
|
@ -664,6 +664,19 @@ std::unique_ptr<GraphicsPipeline> PipelineCache::CreateGraphicsPipeline(
|
|||
std::move(modules), infos);
|
||||
|
||||
} catch (const Shader::Exception& exception) {
|
||||
auto hash = key.Hash();
|
||||
size_t env_index{0};
|
||||
for (size_t index = 0; index < Maxwell::MaxShaderProgram; ++index) {
|
||||
if (key.unique_hashes[index] == 0) {
|
||||
continue;
|
||||
}
|
||||
Shader::Environment& env{*envs[env_index]};
|
||||
++env_index;
|
||||
|
||||
const u32 cfg_offset{static_cast<u32>(env.StartAddress() + sizeof(Shader::ProgramHeader))};
|
||||
Shader::Maxwell::Flow::CFG cfg(env, pools.flow_block, cfg_offset, index == 0);
|
||||
env.Dump(hash, key.unique_hashes[index]);
|
||||
}
|
||||
LOG_ERROR(Render_Vulkan, "{}", exception.what());
|
||||
return nullptr;
|
||||
}
|
||||
|
|
Reference in New Issue