* Memory: Rework FCRAM management entirely Disables a lot of functionality... but I didn't want to commit too much to this commit Also reworks virtual memory management somewhat (but needs more work) * Accurately handle MemoryState for virtual memory Previously all non-free blocks were marked as Reserved * Memory: Consolidate state and permission changes Can now use a single function to change either state, permissions, or both Also merge vmem blocks that have the same state and permissions * Memory: Fix double reset for FCRAM manager Fix minor bug with permission tracking * Memory: Implement Protect operation in ControlMemory * Memory: Implement Unmap in ControlMemory Also do a sanity check to make sure the memory region is free for linear allocations * Memory: Make TLS only 0x200 bytes for each thread Also move TLS to Base region * RO: Unmap CROs when unloaded Thanks @noumidev * Kernel: Return used app memory for Commit ResourceLimit Not quite correct, but nothing to be done until process management is improved Also remove the stack limit for CXIs (thanks amogus) * Kernel: Report used app memory for GetProcessInfo 2 Not really correct, but it should be accurate for applications at least * Formatting changes * Initial fastmem support * PCSX2 fastmem depression * Move away from PCSX2 fastmem * Add enum_flag_ops.hpp * Finally building on Windows * Almost got a PoC * Fix arm64 builds * This somehow works * This also works... * Properly fix fastmem * Add free region manager * Update boost * Add ScopeExit * Comment out asserts on Linux/Mac/Android * Comment out ASSERT_MSG asserts too * Fix derp * Attempt to fix Android * Disable fastmem on Android * Fix Android again maybe pt 2 * android pls * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA * Update host_memory.cpp * Properly reset memory arena on reset * Proper ashmem code for Android * more * Add temporary Android buildjet script for faster prototype builds * Fix fastmem (again) * Clean up shared memory * Remove Android BuildJet runner * a * Revert "a" This reverts commit 5443ad6f2a794c19c9b1a1567ca1c7f58eed78cd. * Re-add ELF support * Re-add 3DSX support * GetSystemInfo, GetProcessInfo: Memory sizes should be in bytes * Update Boost * Update metal-cpp * Fix metal renderer compilation * Fix fastmem mapping * Clean up fastmem code * Fix oopsie again * Emulator: Reorder struct * Kernel types: Cleanup * Cleanup * More cleanup * Make invalid mprotects warn instead of panicking * Add setting for toggling fastmem * More cleanup * Properly initialize BSS to zeroes * Remove unused code * Formatting * Cleanup * Memory/CRO: Workaround for Pokemon XY * NCSD loader: Fix BSS (again) * NCSD loader: Fix BSS (again) (again) * More memory fixes * Memory: Remove unused code * FS: Warn on unimplemented functions instead of panic * Update software_keyboard.cpp * Libretro: Add fastmem option * FRD: Stub SaveLocalAccountData --------- Co-authored-by: PSI-Rockin <PSI-Rockin@users.noreply.github.com>
133 lines
4.0 KiB
C++
133 lines
4.0 KiB
C++
#pragma once
|
|
#include <filesystem>
|
|
#include <string>
|
|
|
|
#include "audio/dsp_core.hpp"
|
|
#include "frontend_settings.hpp"
|
|
#include "renderer.hpp"
|
|
#include "screen_layout.hpp"
|
|
#include "services/region_codes.hpp"
|
|
|
|
struct AudioDeviceConfig {
|
|
// Audio curve to use for volumes between 0-100
|
|
enum class VolumeCurve : int {
|
|
Cubic = 0, // Samples are scaled by volume ^ 3
|
|
Linear = 1, // Samples are scaled by volume
|
|
};
|
|
|
|
float volumeRaw = 1.0f;
|
|
VolumeCurve volumeCurve = VolumeCurve::Cubic;
|
|
|
|
bool muteAudio = false;
|
|
|
|
float getVolume() const {
|
|
if (muteAudio) {
|
|
return 0.0f;
|
|
}
|
|
|
|
return volumeRaw;
|
|
}
|
|
|
|
static VolumeCurve volumeCurveFromString(std::string inString);
|
|
static const char* volumeCurveToString(VolumeCurve curve);
|
|
};
|
|
|
|
// Remember to initialize every field here to its default value otherwise bad things will happen
|
|
struct EmulatorConfig {
|
|
// Only enable the shader JIT by default on platforms where it's completely tested
|
|
#if defined(PANDA3DS_X64_HOST) || defined(PANDA3DS_ARM64_HOST)
|
|
static constexpr bool shaderJitDefault = true;
|
|
#else
|
|
static constexpr bool shaderJitDefault = false;
|
|
#endif
|
|
|
|
// For now, use specialized shaders by default on MacOS as M1 drivers are buggy when using the ubershader, and on Android since mobile GPUs are
|
|
// horrible. On other platforms we default to ubershader + shadergen fallback for lights
|
|
#if defined(__ANDROID__) || defined(__APPLE__)
|
|
static constexpr bool ubershaderDefault = false;
|
|
#else
|
|
static constexpr bool ubershaderDefault = true;
|
|
#endif
|
|
static constexpr bool accelerateShadersDefault = true;
|
|
static constexpr bool audioEnabledDefault = true;
|
|
|
|
// We default to OpenGL on all platforms other than iOS
|
|
#if defined(PANDA3DS_IOS)
|
|
static constexpr RendererType rendererDefault = RendererType::Metal;
|
|
#else
|
|
static constexpr RendererType rendererDefault = RendererType::OpenGL;
|
|
#endif
|
|
|
|
static constexpr bool enableFastmemDefault = true;
|
|
static constexpr bool hashTexturesDefault = false;
|
|
|
|
bool shaderJitEnabled = shaderJitDefault;
|
|
bool useUbershaders = ubershaderDefault;
|
|
bool accelerateShaders = accelerateShadersDefault;
|
|
bool fastmemEnabled = enableFastmemDefault;
|
|
bool hashTextures = hashTexturesDefault;
|
|
|
|
ScreenLayout::Layout screenLayout = ScreenLayout::Layout::Default;
|
|
float topScreenSize = 0.5;
|
|
|
|
bool accurateShaderMul = false;
|
|
bool discordRpcEnabled = false;
|
|
|
|
// Toggles whether to force shadergen when there's more than N lights active and we're using the ubershader, for better performance
|
|
bool forceShadergenForLights = true;
|
|
int lightShadergenThreshold = 1;
|
|
|
|
RendererType rendererType = rendererDefault;
|
|
Audio::DSPCore::Type dspType = Audio::DSPCore::Type::HLE;
|
|
|
|
bool sdCardInserted = true;
|
|
bool sdWriteProtected = false;
|
|
bool circlePadProEnabled = true;
|
|
bool usePortableBuild = false;
|
|
|
|
bool audioEnabled = audioEnabledDefault;
|
|
bool vsyncEnabled = true;
|
|
bool aacEnabled = true; // Enable AAC audio?
|
|
|
|
bool enableRenderdoc = false;
|
|
bool printAppVersion = true;
|
|
bool printDSPFirmware = false;
|
|
|
|
bool chargerPlugged = true;
|
|
// Default to 3% battery to make users suffer
|
|
int batteryPercentage = 3;
|
|
|
|
LanguageCodes systemLanguage = LanguageCodes::English;
|
|
|
|
// Default ROM path to open in Qt and misc frontends
|
|
std::filesystem::path defaultRomPath = "";
|
|
std::filesystem::path filePath;
|
|
|
|
// Frontend window settings
|
|
struct WindowSettings {
|
|
static constexpr int defaultX = 200;
|
|
static constexpr int defaultY = 200;
|
|
static constexpr int defaultWidth = 800;
|
|
static constexpr int defaultHeight = 240 * 2;
|
|
|
|
bool rememberPosition = false; // Remember window position & size
|
|
bool showAppVersion = false;
|
|
|
|
int x = defaultX;
|
|
int y = defaultY;
|
|
int width = defaultHeight;
|
|
int height = defaultHeight;
|
|
};
|
|
|
|
WindowSettings windowSettings;
|
|
AudioDeviceConfig audioDeviceConfig;
|
|
FrontendSettings frontendSettings;
|
|
|
|
EmulatorConfig(const std::filesystem::path& path);
|
|
void load();
|
|
void save();
|
|
|
|
static LanguageCodes languageCodeFromString(std::string inString);
|
|
static const char* languageCodeToString(LanguageCodes code);
|
|
};
|