diff --git a/duckstation.sln b/duckstation.sln
index dad40ac49..85630632f 100644
--- a/duckstation.sln
+++ b/duckstation.sln
@@ -14,16 +14,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "src\common\common
{7F909E29-4808-4BD9-A60C-56C51A3AAEC2} = {7F909E29-4808-4BD9-A60C-56C51A3AAEC2}
{43540154-9E1E-409C-834F-B84BE5621388} = {43540154-9E1E-409C-834F-B84BE5621388}
{ED601289-AC1A-46B8-A8ED-17DB9EB73423} = {ED601289-AC1A-46B8-A8ED-17DB9EB73423}
- {425D6C99-D1C8-43C2-B8AC-4D7B1D941017} = {425D6C99-D1C8-43C2-B8AC-4D7B1D941017}
{8BDA439C-6358-45FB-9994-2FF083BABE06} = {8BDA439C-6358-45FB-9994-2FF083BABE06}
{7FF9FDB9-D504-47DB-A16A-B08071999620} = {7FF9FDB9-D504-47DB-A16A-B08071999620}
- {39F0ADFF-3A84-470D-9CF0-CA49E164F2F3} = {39F0ADFF-3A84-470D-9CF0-CA49E164F2F3}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "core", "src\core\core.vcxproj", "{868B98C8-65A1-494B-8346-250A73A48C0A}"
ProjectSection(ProjectDependencies) = postProject
- {EE054E08-3799-4A59-A422-18259C105FFD} = {EE054E08-3799-4A59-A422-18259C105FFD}
{BB08260F-6FBC-46AF-8924-090EE71360C6} = {BB08260F-6FBC-46AF-8924-090EE71360C6}
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455} = {57F6206D-F264-4B07-BAF8-11B9BBE1F455}
{8906836E-F06E-46E8-B11A-74E5E8C7B8FB} = {8906836E-F06E-46E8-B11A-74E5E8C7B8FB}
{E4357877-D459-45C7-B8F6-DCBB587BB528} = {E4357877-D459-45C7-B8F6-DCBB587BB528}
{ED601289-AC1A-46B8-A8ED-17DB9EB73423} = {ED601289-AC1A-46B8-A8ED-17DB9EB73423}
@@ -101,6 +99,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rainterface", "dep\rainterf
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fmt", "dep\fmt\fmt.vcxproj", "{8BE398E6-B882-4248-9065-FECC8728E038}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "util", "src\util\util.vcxproj", "{57F6206D-F264-4B07-BAF8-11B9BBE1F455}"
+ ProjectSection(ProjectDependencies) = postProject
+ {EE054E08-3799-4A59-A422-18259C105FFD} = {EE054E08-3799-4A59-A422-18259C105FFD}
+ {425D6C99-D1C8-43C2-B8AC-4D7B1D941017} = {425D6C99-D1C8-43C2-B8AC-4D7B1D941017}
+ {39F0ADFF-3A84-470D-9CF0-CA49E164F2F3} = {39F0ADFF-3A84-470D-9CF0-CA49E164F2F3}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM64 = Debug|ARM64
@@ -955,6 +960,42 @@ Global
{8BE398E6-B882-4248-9065-FECC8728E038}.ReleaseUWP|x64.Build.0 = ReleaseUWP|x64
{8BE398E6-B882-4248-9065-FECC8728E038}.ReleaseUWP|x86.ActiveCfg = ReleaseUWP|Win32
{8BE398E6-B882-4248-9065-FECC8728E038}.ReleaseUWP|x86.Build.0 = ReleaseUWP|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Debug|ARM64.Build.0 = Debug|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Debug|x64.ActiveCfg = Debug|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Debug|x64.Build.0 = Debug|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Debug|x86.ActiveCfg = Debug|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Debug|x86.Build.0 = Debug|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugFast|ARM64.ActiveCfg = DebugFast|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugFast|ARM64.Build.0 = DebugFast|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugFast|x64.ActiveCfg = DebugFast|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugFast|x64.Build.0 = DebugFast|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugFast|x86.ActiveCfg = DebugFast|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugFast|x86.Build.0 = DebugFast|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugUWP|ARM64.ActiveCfg = DebugUWP|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugUWP|ARM64.Build.0 = DebugUWP|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugUWP|x64.ActiveCfg = DebugUWP|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugUWP|x64.Build.0 = DebugUWP|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugUWP|x86.ActiveCfg = DebugUWP|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.DebugUWP|x86.Build.0 = DebugUWP|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Release|ARM64.ActiveCfg = Release|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Release|ARM64.Build.0 = Release|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Release|x64.ActiveCfg = Release|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Release|x64.Build.0 = Release|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Release|x86.ActiveCfg = Release|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.Release|x86.Build.0 = Release|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseLTCG|ARM64.ActiveCfg = ReleaseLTCG|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseLTCG|ARM64.Build.0 = ReleaseLTCG|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseLTCG|x64.ActiveCfg = ReleaseLTCG|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseLTCG|x64.Build.0 = ReleaseLTCG|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseLTCG|x86.ActiveCfg = ReleaseLTCG|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseLTCG|x86.Build.0 = ReleaseLTCG|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseUWP|ARM64.ActiveCfg = ReleaseUWP|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseUWP|ARM64.Build.0 = ReleaseUWP|ARM64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseUWP|x64.ActiveCfg = ReleaseUWP|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseUWP|x64.Build.0 = ReleaseUWP|x64
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseUWP|x86.ActiveCfg = ReleaseUWP|Win32
+ {57F6206D-F264-4B07-BAF8-11B9BBE1F455}.ReleaseUWP|x86.Build.0 = ReleaseUWP|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 61fd8f533..dd24bec1a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,5 @@
add_subdirectory(common)
+add_subdirectory(util)
add_subdirectory(core)
add_subdirectory(scmversion)
add_subdirectory(frontend-common)
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index e98cf1be2..a68e453ec 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -2,34 +2,12 @@ add_library(common
align.h
assert.cpp
assert.h
- audio_stream.cpp
- audio_stream.h
bitfield.h
bitutils.h
byte_stream.cpp
byte_stream.h
- cd_image.cpp
- cd_image.h
- cd_image_bin.cpp
- cd_image_cue.cpp
- cd_image_chd.cpp
- cd_image_device.cpp
- cd_image_ecm.cpp
- cd_image_hasher.cpp
- cd_image_hasher.h
- cd_image_m3u.cpp
- cd_image_memory.cpp
- cd_image_mds.cpp
- cd_image_pbp.cpp
- cd_image_ppf.cpp
- cd_subchannel_replacement.cpp
- cd_subchannel_replacement.h
- cd_xa.cpp
- cd_xa.h
crash_handler.cpp
crash_handler.h
- cue_parser.cpp
- cue_parser.h
dimensional_array.h
error.cpp
error.h
@@ -52,10 +30,6 @@ add_library(common
gl/texture.h
hash_combine.h
heap_array.h
- iso_reader.cpp
- iso_reader.h
- jit_code_buffer.cpp
- jit_code_buffer.h
log.cpp
log.h
make_array.h
@@ -63,23 +37,12 @@ add_library(common
md5_digest.h
minizip_helpers.cpp
minizip_helpers.h
- null_audio_stream.cpp
- null_audio_stream.h
- memory_arena.cpp
- memory_arena.h
- page_fault_handler.cpp
- page_fault_handler.h
path.h
platform.h
- pbp_types.h
progress_callback.cpp
progress_callback.h
rectangle.h
scope_guard.h
- shiftjis.cpp
- shiftjis.h
- state_wrapper.cpp
- state_wrapper.h
string.cpp
string.h
string_util.cpp
@@ -111,8 +74,6 @@ add_library(common
vulkan/texture.h
vulkan/util.cpp
vulkan/util.h
- wav_writer.cpp
- wav_writer.h
window_info.cpp
window_info.h
)
diff --git a/src/common/common.props b/src/common/common.props
index c2bf639de..2c7caeb1c 100644
--- a/src/common/common.props
+++ b/src/common/common.props
@@ -2,13 +2,13 @@
- $(SolutionDir)dep\fmt\include;$(SolutionDir)dep\libsamplerate\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan\include;$(SolutionDir)dep\libcue\include;$(SolutionDir)dep\libchdr\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\glslang;$(SolutionDir)dep\zlib\include;$(SolutionDir)dep\minizip\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)
+ $(SolutionDir)dep\fmt\include;$(SolutionDir)dep\glad\include;$(SolutionDir)dep\vulkan\include;$(SolutionDir)dep\stb\include;$(SolutionDir)dep\glslang;$(SolutionDir)dep\zlib\include;$(SolutionDir)dep\minizip\include;$(SolutionDir)src;%(AdditionalIncludeDirectories)
- $(RootBuildDir)fmt\fmt.lib;$(RootBuildDir)glad\glad.lib;$(RootBuildDir)glslang\glslang.lib;$(RootBuildDir)libchdr\libchdr.lib;$(RootBuildDir)zlib\zlib.lib;$(RootBuildDir)minizip\minizip.lib;$(RootBuildDir)lzma\lzma.lib;$(RootBuildDir)libsamplerate\libsamplerate.lib;d3dcompiler.lib;d3d11.lib;%(AdditionalDependencies)
+ $(RootBuildDir)fmt\fmt.lib;$(RootBuildDir)glad\glad.lib;$(RootBuildDir)glslang\glslang.lib;$(RootBuildDir)zlib\zlib.lib;$(RootBuildDir)minizip\minizip.lib;$(RootBuildDir)lzma\lzma.lib;d3dcompiler.lib;d3d11.lib;%(AdditionalDependencies)
diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj
index 4a0115102..f26b94d5e 100644
--- a/src/common/common.vcxproj
+++ b/src/common/common.vcxproj
@@ -4,14 +4,10 @@
-
-
-
-
@@ -49,24 +45,16 @@
true
-
-
-
-
-
-
-
-
@@ -74,7 +62,6 @@
-
@@ -88,7 +75,6 @@
-
true
@@ -97,22 +83,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -144,19 +116,10 @@
true
-
-
-
-
-
-
-
-
-
@@ -174,7 +137,6 @@
-
true
diff --git a/src/common/common.vcxproj.filters b/src/common/common.vcxproj.filters
index f3f9f4099..08727e67b 100644
--- a/src/common/common.vcxproj.filters
+++ b/src/common/common.vcxproj.filters
@@ -3,11 +3,7 @@
-
-
-
-
gl
@@ -31,10 +27,6 @@
d3d11
-
-
-
-
@@ -49,7 +41,6 @@
-
gl
@@ -62,7 +53,6 @@
gl
-
vulkan
@@ -99,9 +89,6 @@
-
-
-
thirdparty
@@ -111,7 +98,6 @@
-
d3d12
@@ -149,13 +135,6 @@
-
-
-
-
-
-
-
gl
@@ -177,9 +156,6 @@
d3d11
-
-
-
@@ -191,9 +167,7 @@
d3d11
-
-
gl
@@ -204,7 +178,6 @@
gl
-
vulkan
@@ -236,24 +209,14 @@
vulkan
-
-
-
-
thirdparty
-
-
-
-
-
-
d3d12
@@ -275,7 +238,6 @@
d3d12
-
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 0702e882c..689d2c9da 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -120,7 +120,7 @@ set(RECOMPILER_SRCS
target_include_directories(core PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/..")
target_include_directories(core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
-target_link_libraries(core PUBLIC Threads::Threads common zlib)
+target_link_libraries(core PUBLIC Threads::Threads common util zlib)
target_link_libraries(core PRIVATE glad stb xxhash imgui)
if(WIN32)
diff --git a/src/core/analog_controller.cpp b/src/core/analog_controller.cpp
index 5bc212247..ab5455c4a 100644
--- a/src/core/analog_controller.cpp
+++ b/src/core/analog_controller.cpp
@@ -1,10 +1,10 @@
#include "analog_controller.h"
#include "common/log.h"
-#include "common/state_wrapper.h"
#include "common/string_util.h"
#include "host_interface.h"
#include "settings.h"
#include "system.h"
+#include "util/state_wrapper.h"
#include
Log_SetChannel(AnalogController);
diff --git a/src/core/analog_joystick.cpp b/src/core/analog_joystick.cpp
index e9feb6cc1..8245d5131 100644
--- a/src/core/analog_joystick.cpp
+++ b/src/core/analog_joystick.cpp
@@ -1,9 +1,9 @@
#include "analog_joystick.h"
#include "common/log.h"
-#include "common/state_wrapper.h"
#include "common/string_util.h"
#include "host_interface.h"
#include "system.h"
+#include "util/state_wrapper.h"
#include
Log_SetChannel(AnalogJoystick);
diff --git a/src/core/bus.cpp b/src/core/bus.cpp
index 0d443d7e3..638f6214a 100644
--- a/src/core/bus.cpp
+++ b/src/core/bus.cpp
@@ -4,7 +4,6 @@
#include "common/assert.h"
#include "common/log.h"
#include "common/make_array.h"
-#include "common/state_wrapper.h"
#include "cpu_code_cache.h"
#include "cpu_core.h"
#include "cpu_core_private.h"
@@ -18,6 +17,7 @@
#include "sio.h"
#include "spu.h"
#include "timers.h"
+#include "util/state_wrapper.h"
#include
#include
#include
diff --git a/src/core/bus.h b/src/core/bus.h
index 90762450c..636c09d81 100644
--- a/src/core/bus.h
+++ b/src/core/bus.h
@@ -1,6 +1,6 @@
#pragma once
#include "common/bitfield.h"
-#include "common/memory_arena.h"
+#include "util/memory_arena.h"
#include "types.h"
#include
#include
diff --git a/src/core/cdrom.cpp b/src/core/cdrom.cpp
index ac2506252..b7b7a03ac 100644
--- a/src/core/cdrom.cpp
+++ b/src/core/cdrom.cpp
@@ -1,15 +1,15 @@
#include "cdrom.h"
#include "common/align.h"
-#include "common/cd_image.h"
#include "common/log.h"
#include "common/platform.h"
-#include "common/state_wrapper.h"
#include "dma.h"
#include "imgui.h"
#include "interrupt_controller.h"
#include "settings.h"
#include "spu.h"
#include "system.h"
+#include "util/cd_image.h"
+#include "util/state_wrapper.h"
#include
Log_SetChannel(CDROM);
diff --git a/src/core/cdrom.h b/src/core/cdrom.h
index ea3786c2b..7d4f08ba1 100644
--- a/src/core/cdrom.h
+++ b/src/core/cdrom.h
@@ -1,11 +1,11 @@
#pragma once
#include "cdrom_async_reader.h"
#include "common/bitfield.h"
-#include "common/cd_image.h"
-#include "common/cd_xa.h"
#include "common/fifo_queue.h"
#include "common/heap_array.h"
#include "types.h"
+#include "util/cd_image.h"
+#include "util/cd_xa.h"
#include
#include
#include
diff --git a/src/core/cdrom_async_reader.h b/src/core/cdrom_async_reader.h
index 2664821cc..2e9320ff1 100644
--- a/src/core/cdrom_async_reader.h
+++ b/src/core/cdrom_async_reader.h
@@ -1,5 +1,5 @@
#pragma once
-#include "common/cd_image.h"
+#include "util/cd_image.h"
#include "types.h"
#include
#include
diff --git a/src/core/cheevos.cpp b/src/core/cheevos.cpp
index 333fcbb86..30d0b473a 100644
--- a/src/core/cheevos.cpp
+++ b/src/core/cheevos.cpp
@@ -1,13 +1,11 @@
#include "cheevos.h"
#include "common/assert.h"
-#include "common/cd_image.h"
#include "common/file_system.h"
#include "common/http_downloader.h"
#include "common/log.h"
#include "common/md5_digest.h"
#include "common/path.h"
#include "common/platform.h"
-#include "common/state_wrapper.h"
#include "common/string_util.h"
#include "core/bios.h"
#include "core/bus.h"
@@ -20,6 +18,8 @@
#include "rc_url.h"
#include "rcheevos.h"
#include "scmversion/scmversion.h"
+#include "util/cd_image.h"
+#include "util/state_wrapper.h"
#include
#include
#include
diff --git a/src/core/controller.cpp b/src/core/controller.cpp
index e4fd7b223..a6ddee9b6 100644
--- a/src/core/controller.cpp
+++ b/src/core/controller.cpp
@@ -1,11 +1,11 @@
#include "controller.h"
#include "analog_controller.h"
#include "analog_joystick.h"
-#include "common/state_wrapper.h"
#include "digital_controller.h"
#include "namco_guncon.h"
#include "negcon.h"
#include "playstation_mouse.h"
+#include "util/state_wrapper.h"
Controller::Controller() = default;
diff --git a/src/core/core.props b/src/core/core.props
index d917e83c8..01d10ce26 100644
--- a/src/core/core.props
+++ b/src/core/core.props
@@ -1,6 +1,6 @@
-
+
@@ -19,7 +19,7 @@
- $(RootBuildDir)rcheevos\rcheevos.lib;$(RootBuildDir)imgui\imgui.lib;$(RootBuildDir)stb\stb.lib;$(RootBuildDir)xxhash\xxhash.lib;$(RootBuildDir)zlib\zlib.lib;$(RootBuildDir)common\common.lib;%(AdditionalDependencies)
+ $(RootBuildDir)rcheevos\rcheevos.lib;$(RootBuildDir)imgui\imgui.lib;$(RootBuildDir)stb\stb.lib;$(RootBuildDir)xxhash\xxhash.lib;$(RootBuildDir)zlib\zlib.lib;$(RootBuildDir)util\util.lib;$(RootBuildDir)common\common.lib;%(AdditionalDependencies)
$(RootBuildDir)rainterface\rainterface.lib;%(AdditionalDependencies)
$(RootBuildDir)vixl\vixl.lib;%(AdditionalDependencies)
diff --git a/src/core/cpu_code_cache.h b/src/core/cpu_code_cache.h
index 161c78d89..b2a8b2820 100644
--- a/src/core/cpu_code_cache.h
+++ b/src/core/cpu_code_cache.h
@@ -1,9 +1,9 @@
#pragma once
#include "bus.h"
#include "common/bitfield.h"
-#include "common/jit_code_buffer.h"
-#include "common/page_fault_handler.h"
#include "cpu_types.h"
+#include "util/jit_code_buffer.h"
+#include "util/page_fault_handler.h"
#include
#include