mirror of
https://github.com/cemu-project/Cemu.git
synced 2026-08-22 18:18:12 -05:00
GraphicPack: Allow overriding cos.xml permissions
This commit is contained in:
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user