GraphicPack: Allow overriding cos.xml permissions

This commit is contained in:
techmuse
2026-06-07 14:59:49 -04:00
parent 326933b248
commit baf1cfa2dc
3 changed files with 57 additions and 0 deletions

View File

@@ -950,6 +950,23 @@ namespace CafeSystem
{
if (sLaunchModeIsStandalone)
return CosCapabilityBits::All;
uint64 resultMask = 0;
for (const auto& pack : GraphicPack2::GetGraphicPacks())
{
if (pack->IsEnabled())
{
for (const auto& permissionOverrides : pack->GetPermissionOverrides())
{
if (permissionOverrides.first == group)
resultMask |= permissionOverrides.second;
}
}
}
if (resultMask != 0)
return static_cast<CosCapabilityBits>(resultMask);
auto& update = sGameInfo_ForegroundTitle.GetUpdate();
if (update.IsValid())
{

View File

@@ -451,6 +451,39 @@ GraphicPack2::GraphicPack2(fs::path rulesPath, IniParser& rules)
}
}
}
else if (boost::iequals(currentSectionName, "Permissions"))
{
std::array<std::pair<std::string_view, CosCapabilityGroup>, 15> permissionTable
{{
{"BSP", CosCapabilityGroup::BSP},
{"DK", CosCapabilityGroup::DK},
{"USB", CosCapabilityGroup::USB},
{"UHS", CosCapabilityGroup::UHS},
{"FS", CosCapabilityGroup::FS},
{"MCP", CosCapabilityGroup::MCP},
{"NIM", CosCapabilityGroup::NIM},
{"ACT", CosCapabilityGroup::ACT},
{"FPD", CosCapabilityGroup::FPD},
{"BOSS", CosCapabilityGroup::BOSS},
{"ACP", CosCapabilityGroup::ACP},
{"PDM", CosCapabilityGroup::PDM},
{"AC", CosCapabilityGroup::AC},
{"NDM", CosCapabilityGroup::NDM},
{"NSEC", CosCapabilityGroup::NSEC}
}};
for (const auto& [name, group] : permissionTable)
{
const auto permissionOption = rules.FindOption(name);
if (permissionOption)
{
cemuLog_log(LogType::Force, "Graphic pack \"{}\": has permission mask {} for {}", GetNormalizedPathString(), *permissionOption, name);
uint64 permissionMask = ConvertString<uint64>(*permissionOption, 16);
m_permissions.push_back({group, permissionMask});
}
}
}
}
if (m_version >= 5)

View File

@@ -2,6 +2,7 @@
#include "util/helpers/helpers.h"
#include "Cemu/ExpressionParser/ExpressionParser.h"
#include "Cafe/TitleList/TitleInfo.h"
#include "Cafe/HW/Latte/Renderer/RendererOuputShader.h"
#include "util/helpers/Serializer.h"
#include "Cafe/OS/RPL/rpl.h"
@@ -147,6 +148,9 @@ public:
[[nodiscard]] const std::vector<PresetPtr>& GetPresets() const { return m_presets; }
[[nodiscard]] std::unordered_map<std::string, std::vector<PresetPtr>> GetCategorizedPresets(std::vector<std::string>& order) const;
// permissions
const std::vector<std::pair<CosCapabilityGroup, uint64>>& GetPermissionOverrides() { return m_permissions; }
// shaders
void LoadShaders();
@@ -264,6 +268,9 @@ private:
// ram mappings
std::vector<std::pair<MPTR, MPTR>> m_ramMappings;
// permissions
std::vector<std::pair<CosCapabilityGroup, uint64>> m_permissions;
// patches
void LoadPatchFiles(); // loads Cemuhook or Cemu patches