From nobody Mon Nov 27 11:12:21 2023 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Sf2x12WXJz52Klq; Mon, 27 Nov 2023 11:12:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Sf2x12KtLz3Zdq; Mon, 27 Nov 2023 11:12:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701083541; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=kcM96iF6T1cISx3PTVaLA8qFJCqrwXHXmozhr5l7kqc=; b=xrI0tTxZb47pFmN2zxlBNJ5Xj040FoNA92F02tJJLj/U5IANN/bKRJDHIsONYkBl82p/nm QgxELPvKx7x1pioP1Ocec7iLPUApzffncgUnegC2EoHJ54BiDKYhkh/erUCbfgl/vyio5Q SP4rYJWOMd9nkkx2p3awL9EHm6r+AS2nxD8Vo3syd8VlzVj4PhvVewASIomTKsf+iNSim/ b/RXFWg8UZKBjqYuMmcaAx2wclE3AosfgsveIb+vZDF/HutdludKnzH5T2zKdhJINOMrja WdV4XHdl4fOiJfZrTOHMOpM3iyEVys93y9A5gxotBgo5lU37ms4oIT1J4LCaSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701083541; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=kcM96iF6T1cISx3PTVaLA8qFJCqrwXHXmozhr5l7kqc=; b=l/PWRkqQ0apLpgarnipdBhGvTABXsJRRThybHOHCevwrl1EIgfpdsxOBB51eTWhohqhDFP 5lHz8sc/CE8Nhkudov0frhL0kkw2ZNKiC5Z83HZ1uEGCW0fNunYRIDV0h58kODqKuWso/V LkM/ZCqP8s9maUvjPSyrz6rR6ZV21q2lLElogINqBhexwnfyexPr/X6hzyUdJmzE/3+esS 7SMydOZ+KrKObVxTyhyNhH0DHVSDdf+tEf/nA0a47Uc2qrRopfTd0PMa4Ln01KTX+cKfyK GwdrLDUPO8DHOLlVckwrLigWd0H7JXeFgNzYm/eZCgq1YFSWyIPMbXnbkCYcbw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1701083541; a=rsa-sha256; cv=none; b=fSEZG0/2mcJJC8VRf2Ya9kf0S9C9CvX6J9B1cwLOGkwsx+VE3bIOXBokat74GBV50Y+Vt3 f90SEyJxaJO3KaCPkmJtsyqw+wO6Zcq+e/LiHBBsCv2so3UVa++mZi8KUBwDcGpwVA9AKt wVXneQND3/uE2nvqLcWIcvf4K+kYLnHBpZ2lDn9R4W3SnSwu4ivzeZAsnxQ3cdIESV8ocw kneqFqjy8qHLmjof6z6hrREQA3aIwIGWkcz6Bu8XG8qIwJqEZjl7ftzhymBssWGRmLET08 x98lo67hNLKrTQXgRStw+ZS91LoiGszC8gUXwyQaNnYKJTgkDbopmVzhXcMw6g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Sf2x11QpXzbrC; Mon, 27 Nov 2023 11:12:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3ARBCLdx078653; Mon, 27 Nov 2023 11:12:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3ARBCL2n078650; Mon, 27 Nov 2023 11:12:21 GMT (envelope-from git) Date: Mon, 27 Nov 2023 11:12:21 GMT Message-Id: <202311271112.3ARBCL2n078650@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Ganael LAPLANCHE Subject: git: c394067b9765 - main - emulators/duckstation: New port: open-source PlayStation emulator List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: martymac X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c394067b97652c89705dc99280aca51f03939a89 Auto-Submitted: auto-generated The branch main has been updated by martymac: URL: https://cgit.FreeBSD.org/ports/commit/?id=c394067b97652c89705dc99280aca51f03939a89 commit c394067b97652c89705dc99280aca51f03939a89 Author: Ganael LAPLANCHE AuthorDate: 2023-11-27 11:10:45 +0000 Commit: Ganael LAPLANCHE CommitDate: 2023-11-27 11:12:07 +0000 emulators/duckstation: New port: open-source PlayStation emulator --- emulators/Makefile | 1 + emulators/duckstation/Makefile | 49 ++++++++++++++ emulators/duckstation/distinfo | 3 + emulators/duckstation/files/duckstation.desktop | 12 ++++ .../duckstation/files/patch-data-directory.txt | 24 +++++++ .../duckstation/files/patch-relocate-resources.txt | 74 ++++++++++++++++++++++ .../files/patch-src-common-byte_stream.cpp | 14 ++++ .../files/patch-src-common-file_system.cpp | 70 ++++++++++++++++++++ .../files/patch-src-common-threading.cpp | 22 +++++++ emulators/duckstation/pkg-descr | 6 ++ emulators/duckstation/pkg-plist | 71 +++++++++++++++++++++ 11 files changed, 346 insertions(+) diff --git a/emulators/Makefile b/emulators/Makefile index 5854d0feb7b6..cf6e4b012f69 100644 --- a/emulators/Makefile +++ b/emulators/Makefile @@ -25,6 +25,7 @@ SUBDIR += dosbox-staging SUBDIR += dosbox-x SUBDIR += dps8m + SUBDIR += duckstation SUBDIR += dynamips-community SUBDIR += edumips64 SUBDIR += elliott-803 diff --git a/emulators/duckstation/Makefile b/emulators/duckstation/Makefile new file mode 100644 index 000000000000..53ac7a6e1e76 --- /dev/null +++ b/emulators/duckstation/Makefile @@ -0,0 +1,49 @@ +PORTNAME= duckstation +PORTVERSION= 20231016 +DISTVERSIONPREFIX= v +CATEGORIES= emulators + +MAINTAINER= martymac@FreeBSD.org +COMMENT= Free and open-source PlayStation emulator +WWW= https://www.duckstation.org + +LICENSE= GPLv3 + +LIB_DEPENDS= libcurl.so:ftp/curl \ + libbacktrace.so:devel/libbacktrace \ + libxkbcommon.so:x11/libxkbcommon \ + libpulse.so:audio/pulseaudio \ + libjack.so:audio/jack \ + libsndio.so:audio/sndio \ + libdbus-1.so:devel/dbus +# XXX Necessary for Qt6/FindWrapVulkanHeaders.cmake +BUILD_DEPENDS= vulkan-headers>0:graphics/vulkan-headers + +USES= cmake compiler:c++20-lang gl pkgconfig qt:6 sdl xorg + +USE_GITHUB= yes +GH_ACCOUNT= stenzek +# See: https://github.com/stenzek/duckstation/releases/tag/latest +GH_TAGNAME= cecae91 + +USE_GL= egl +USE_SDL= sdl2 +USE_XORG= ice x11 xext xrandr xrender +USE_QT= base tools + +CMAKE_ARGS+= \ + -DDUCKSTATION_APPLICATION_DIR_PATH:STRING=${DATADIR} + +# - Program and resources are copied from target dir ${CONFIGURE_WRKSRC}/bin +# because only necessary resources are installed there +do-install: + cd ${CONFIGURE_WRKSRC}/bin && \ + ${COPYTREE_SHARE} resources/ ${STAGEDIR}${DATADIR}/ && \ + ${COPYTREE_SHARE} translations/ ${STAGEDIR}${DATADIR}/ + ${INSTALL_PROGRAM} \ + ${CONFIGURE_WRKSRC}/bin/duckstation-qt ${STAGEDIR}${PREFIX}/bin/ + ${INSTALL_DATA} ${CONFIGURE_WRKSRC}/bin/resources/images/duck.png \ + ${STAGEDIR}${PREFIX}/share/pixmaps/duckstation.png + ${INSTALL_DATA} ${FILESDIR}/duckstation.desktop ${STAGEDIR}${DESKTOPDIR} + +.include diff --git a/emulators/duckstation/distinfo b/emulators/duckstation/distinfo new file mode 100644 index 000000000000..cdf3ab4398ff --- /dev/null +++ b/emulators/duckstation/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1700156894 +SHA256 (stenzek-duckstation-v20231016-cecae91_GH0.tar.gz) = e1c25940db1b517b5dfbf73d7f21a584194ddd0d6a93f11b45210a021d4841c7 +SIZE (stenzek-duckstation-v20231016-cecae91_GH0.tar.gz) = 13424608 diff --git a/emulators/duckstation/files/duckstation.desktop b/emulators/duckstation/files/duckstation.desktop new file mode 100644 index 000000000000..8e79b154fcec --- /dev/null +++ b/emulators/duckstation/files/duckstation.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Terminal=false +Type=Application +Name=Duckstation +StartupWMClass=Duckstation +GenericName=PlayStation Emulator +Comment=Sony PlayStation emulator +Exec=duckstation-qt +Icon=duckstation +Keywords=game;emulator; +Categories=Game;Emulator; diff --git a/emulators/duckstation/files/patch-data-directory.txt b/emulators/duckstation/files/patch-data-directory.txt new file mode 100644 index 000000000000..94f00c7aa01d --- /dev/null +++ b/emulators/duckstation/files/patch-data-directory.txt @@ -0,0 +1,24 @@ +Fix data directory handling on FreeBSD + +--- src/duckstation-qt/qthost.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/duckstation-qt/qthost.cpp +@@ -289,7 +289,7 @@ void QtHost::SetDataDirectory() + EmuFolders::DataRoot = Path::Combine(StringUtil::WideStringToUTF8String(documents_directory), "DuckStation"); + CoTaskMemFree(documents_directory); + } +-#elif defined(__linux__) ++#elif defined(__linux__) || defined(__FreeBSD__) + // Use $XDG_CONFIG_HOME/duckstation if it exists. + const char* xdg_config_home = getenv("XDG_CONFIG_HOME"); + if (xdg_config_home && Path::IsAbsolute(xdg_config_home)) +--- src/duckstation-nogui/nogui_host.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/duckstation-nogui/nogui_host.cpp +@@ -186,7 +186,7 @@ void NoGUIHost::SetDataDirectory() + EmuFolders::DataRoot = Path::Combine(StringUtil::WideStringToUTF8String(documents_directory), "DuckStation"); + CoTaskMemFree(documents_directory); + } +-#elif defined(__linux__) ++#elif defined(__linux__) || defined(__FreeBSD__) + // Use $XDG_CONFIG_HOME/duckstation if it exists. + const char* xdg_config_home = getenv("XDG_CONFIG_HOME"); + if (xdg_config_home && Path::IsAbsolute(xdg_config_home)) diff --git a/emulators/duckstation/files/patch-relocate-resources.txt b/emulators/duckstation/files/patch-relocate-resources.txt new file mode 100644 index 000000000000..412399c8770c --- /dev/null +++ b/emulators/duckstation/files/patch-relocate-resources.txt @@ -0,0 +1,74 @@ +Allow relocation of resource files and translations + +--- CMakeLists.txt.orig 2023-10-16 12:57:57 UTC ++++ CMakeLists.txt +@@ -44,6 +44,9 @@ endif() + endif() + endif() + ++if(DEFINED DUCKSTATION_APPLICATION_DIR_PATH) ++ add_compile_definitions(DUCKSTATION_APPLICATION_DIR_PATH="${DUCKSTATION_APPLICATION_DIR_PATH}") ++endif() + + # Required libraries. + if(ENABLE_SDL2) +--- src/duckstation-qt/qthost.cpp.orig 2023-11-20 14:04:38 UTC ++++ src/duckstation-qt/qthost.cpp +@@ -259,6 +259,10 @@ void QtHost::SetResourcesDirectory() + + void QtHost::SetResourcesDirectory() + { ++#ifdef DUCKSTATION_APPLICATION_DIR_PATH ++ // Resources' path specified at compile time ++ EmuFolders::Resources = Path::Canonicalize(DUCKSTATION_APPLICATION_DIR_PATH "/resources"); ++#else + #ifndef __APPLE__ + // On Windows/Linux, these are in the binary directory. + EmuFolders::Resources = Path::Combine(EmuFolders::AppRoot, "resources"); +@@ -266,6 +270,7 @@ void QtHost::SetResourcesDirectory() + // On macOS, this is in the bundle resources directory. + EmuFolders::Resources = Path::Canonicalize(Path::Combine(EmuFolders::AppRoot, "../Resources")); + #endif ++#endif // DUCKSTATION_APPLICATION_DIR_PATH + } + + void QtHost::SetDataDirectory() +--- src/duckstation-nogui/nogui_host.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/duckstation-nogui/nogui_host.cpp +@@ -156,6 +156,10 @@ void NoGUIHost::SetResourcesDirectory() + + void NoGUIHost::SetResourcesDirectory() + { ++#ifdef DUCKSTATION_APPLICATION_DIR_PATH ++ // Resources' path specified at compile time ++ EmuFolders::Resources = Path::Canonicalize(DUCKSTATION_APPLICATION_DIR_PATH "/resources"); ++#else + #ifndef __APPLE__NOT_USED // Not using bundles yet. + // On Windows/Linux, these are in the binary directory. + EmuFolders::Resources = Path::Combine(EmuFolders::AppRoot, "resources"); +@@ -163,6 +167,7 @@ void NoGUIHost::SetResourcesDirectory() + // On macOS, this is in the bundle resources directory. + EmuFolders::Resources = Path::Canonicalize(Path::Combine(EmuFolders::AppRoot, "../Resources")); + #endif ++#endif // DUCKSTATION_APPLICATION_DIR_PATH + } + + void NoGUIHost::SetDataDirectory() +--- src/duckstation-qt/qttranslations.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/duckstation-qt/qttranslations.cpp +@@ -73,11 +73,15 @@ void QtHost::InstallTranslator() + FixLanguageName(QString::fromStdString(Host::GetBaseStringSettingValue("Main", "Language", GetDefaultLanguage()))); + + // install the base qt translation first ++#ifdef DUCKSTATION_APPLICATION_DIR_PATH ++ const QString base_dir = QStringLiteral(DUCKSTATION_APPLICATION_DIR_PATH "/translations"); ++#else + #ifndef __APPLE__ + const QString base_dir = QStringLiteral("%1/translations").arg(qApp->applicationDirPath()); + #else + const QString base_dir = QStringLiteral("%1/../Resources/translations").arg(qApp->applicationDirPath()); + #endif ++#endif // DUCKSTATION_APPLICATION_DIR_PATH + + // Qt base uses underscores instead of hyphens. + const QString qt_language = QString(language).replace(QChar('-'), QChar('_')); diff --git a/emulators/duckstation/files/patch-src-common-byte_stream.cpp b/emulators/duckstation/files/patch-src-common-byte_stream.cpp new file mode 100644 index 000000000000..f791bfdd6232 --- /dev/null +++ b/emulators/duckstation/files/patch-src-common-byte_stream.cpp @@ -0,0 +1,14 @@ +FreeBSD's alloca(3) only needs + +--- src/common/byte_stream.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/common/byte_stream.cpp +@@ -28,7 +28,9 @@ + #ifdef _MSC_VER + #include + #else ++#if !defined(__FreeBSD__) + #include ++#endif + #endif + + Log_SetChannel(ByteStream); diff --git a/emulators/duckstation/files/patch-src-common-file_system.cpp b/emulators/duckstation/files/patch-src-common-file_system.cpp new file mode 100644 index 000000000000..a88db23f479a --- /dev/null +++ b/emulators/duckstation/files/patch-src-common-file_system.cpp @@ -0,0 +1,70 @@ +Fix an off-by-one '..' error when computing bios SearchPath + +A '..' is missing in returned path when 'path' and 'relative_to' have no common +components. C++17's std::filesystem::relative() method returns a correct value. + +As an alternative to that simple patch, we may want to just replace +Path::MakeRelative() calls by std::filesystem::relative() calls and remove +Path::MakeRelative() method. + +--- src/common/file_system.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/common/file_system.cpp +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + + #ifdef __APPLE__ + #include +@@ -250,49 +251,7 @@ std::string Path::MakeRelative(const std::string_view& + + std::string Path::MakeRelative(const std::string_view& path, const std::string_view& relative_to) + { +- // simple algorithm, we just work on the components. could probably be better, but it'll do for now. +- std::vector path_components(SplitNativePath(path)); +- std::vector relative_components(SplitNativePath(relative_to)); +- std::vector new_components; +- +- // both must be absolute paths +- if (Path::IsAbsolute(path) && Path::IsAbsolute(relative_to)) +- { +- // find the number of same components +- size_t num_same = 0; +- for (size_t i = 0; i < path_components.size() && i < relative_components.size(); i++) +- { +- if (path_components[i] == relative_components[i]) +- num_same++; +- else +- break; +- } +- +- // we need at least one same component +- if (num_same > 0) +- { +- // from the relative_to directory, back up to the start of the common components +- const size_t num_ups = relative_components.size() - num_same; +- for (size_t i = 0; i < num_ups; i++) +- new_components.emplace_back(".."); +- +- // and add the remainder of the path components +- for (size_t i = num_same; i < path_components.size(); i++) +- new_components.push_back(std::move(path_components[i])); +- } +- else +- { +- // no similarity +- new_components = std::move(path_components); +- } +- } +- else +- { +- // not absolute +- new_components = std::move(path_components); +- } +- +- return JoinNativePath(new_components); ++ return std::filesystem::relative(path, relative_to); + } + + std::string_view Path::GetExtension(const std::string_view& path) diff --git a/emulators/duckstation/files/patch-src-common-threading.cpp b/emulators/duckstation/files/patch-src-common-threading.cpp new file mode 100644 index 000000000000..6448ee870fc0 --- /dev/null +++ b/emulators/duckstation/files/patch-src-common-threading.cpp @@ -0,0 +1,22 @@ +Fix get_thread_time() declaration on FreeBSD + +--- src/common/threading.cpp.orig 2023-10-16 12:57:57 UTC ++++ src/common/threading.cpp +@@ -64,7 +64,7 @@ static u64 getthreadtime(thread_port_t thread) + } + #endif + +-#ifdef __linux__ ++#if defined(__linux__) || defined(__FreeBSD__) + // Helper function to get either either the current cpu usage + // in called thread or in id thread + static u64 get_thread_time(void* id = 0) +@@ -227,7 +227,7 @@ u64 Threading::ThreadHandle::GetCPUTime() const + return user.u64time + kernel.u64time; + #elif defined(__APPLE__) + return getthreadtime(pthread_mach_thread_np((pthread_t)m_native_handle)); +-#elif defined(__linux__) ++#elif defined(__linux__) || defined(__FreeBSD__) + return get_thread_time(m_native_handle); + #else + return 0; diff --git a/emulators/duckstation/pkg-descr b/emulators/duckstation/pkg-descr new file mode 100644 index 000000000000..b8425b6dab50 --- /dev/null +++ b/emulators/duckstation/pkg-descr @@ -0,0 +1,6 @@ +DuckStation is a PlayStation 1, aka. PSX Emulator. + +DuckStation is an simulator/emulator of the Sony PlayStation(TM) console, +focusing on playability, speed, and long-term maintainability. The goal is to +be as accurate as possible while maintaining performance suitable for low-end +devices. diff --git a/emulators/duckstation/pkg-plist b/emulators/duckstation/pkg-plist new file mode 100644 index 000000000000..2937d68f9ac6 --- /dev/null +++ b/emulators/duckstation/pkg-plist @@ -0,0 +1,71 @@ +bin/duckstation-qt +share/applications/duckstation.desktop +share/pixmaps/duckstation.png +%%DATADIR%%/resources/chtdb.txt +%%DATADIR%%/resources/fonts/LICENSE.txt +%%DATADIR%%/resources/fonts/Roboto-Regular.ttf +%%DATADIR%%/resources/fonts/RobotoMono-Medium.ttf +%%DATADIR%%/resources/fonts/fa-solid-900.ttf +%%DATADIR%%/resources/fullscreenui/NTSC-J.png +%%DATADIR%%/resources/fullscreenui/NTSC-U.png +%%DATADIR%%/resources/fullscreenui/PAL.png +%%DATADIR%%/resources/fullscreenui/address-book-new.png +%%DATADIR%%/resources/fullscreenui/applications-system.png +%%DATADIR%%/resources/fullscreenui/media-cdrom.png +%%DATADIR%%/resources/fullscreenui/multimedia-player.png +%%DATADIR%%/resources/fullscreenui/star-0.png +%%DATADIR%%/resources/fullscreenui/star-1.png +%%DATADIR%%/resources/fullscreenui/star-2.png +%%DATADIR%%/resources/fullscreenui/star-3.png +%%DATADIR%%/resources/fullscreenui/star-4.png +%%DATADIR%%/resources/fullscreenui/star-5.png +%%DATADIR%%/resources/gamecontrollerdb.txt +%%DATADIR%%/resources/gamedb.json +%%DATADIR%%/resources/images/cover-placeholder.png +%%DATADIR%%/resources/images/crosshair.png +%%DATADIR%%/resources/images/duck.png +%%DATADIR%%/resources/images/placeholder.png +%%DATADIR%%/resources/images/sources.txt +%%DATADIR%%/resources/shaders/Cccalibrator.glsl +%%DATADIR%%/resources/shaders/crt-lottes.glsl +%%DATADIR%%/resources/shaders/dolphinfx/bloom.glsl +%%DATADIR%%/resources/shaders/dolphinfx/celshading.glsl +%%DATADIR%%/resources/shaders/dolphinfx/scanlines.glsl +%%DATADIR%%/resources/shaders/reshade/README.md +%%DATADIR%%/resources/shaders/reshade/REFERENCE.md +%%DATADIR%%/resources/shaders/reshade/Shaders/Blending.fxh +%%DATADIR%%/resources/shaders/reshade/Shaders/Daltonize.fx +%%DATADIR%%/resources/shaders/reshade/Shaders/Deband.fx +%%DATADIR%%/resources/shaders/reshade/Shaders/DrawText.fxh +%%DATADIR%%/resources/shaders/reshade/Shaders/LUT.fx +%%DATADIR%%/resources/shaders/reshade/Shaders/Macros.fxh +%%DATADIR%%/resources/shaders/reshade/Shaders/ReShade.fxh +%%DATADIR%%/resources/shaders/reshade/Shaders/ReShadeUI.fxh +%%DATADIR%%/resources/shaders/reshade/Shaders/TriDither.fxh +%%DATADIR%%/resources/shaders/reshade/Textures/FontAtlas.png +%%DATADIR%%/resources/shaders/reshade/Textures/lut.png +%%DATADIR%%/resources/shaders/reshade/source.txt +%%DATADIR%%/resources/shaders/simple-brightness.glsl +%%DATADIR%%/resources/shaders/simple-flip.glsl +%%DATADIR%%/resources/shaders/simple-gamma.glsl +%%DATADIR%%/resources/shaders/simple-sharpen.glsl +%%DATADIR%%/resources/sounds/achievements/README.txt +%%DATADIR%%/resources/sounds/achievements/lbsubmit.wav +%%DATADIR%%/resources/sounds/achievements/message.wav +%%DATADIR%%/resources/sounds/achievements/unlock.wav +%%DATADIR%%/translations/duckstation-qt_de.qm +%%DATADIR%%/translations/duckstation-qt_en.qm +%%DATADIR%%/translations/duckstation-qt_es-ES.qm +%%DATADIR%%/translations/duckstation-qt_es.qm +%%DATADIR%%/translations/duckstation-qt_fr.qm +%%DATADIR%%/translations/duckstation-qt_he.qm +%%DATADIR%%/translations/duckstation-qt_it.qm +%%DATADIR%%/translations/duckstation-qt_ja.qm +%%DATADIR%%/translations/duckstation-qt_ko.qm +%%DATADIR%%/translations/duckstation-qt_nl.qm +%%DATADIR%%/translations/duckstation-qt_pl.qm +%%DATADIR%%/translations/duckstation-qt_pt-BR.qm +%%DATADIR%%/translations/duckstation-qt_pt-PT.qm +%%DATADIR%%/translations/duckstation-qt_ru.qm +%%DATADIR%%/translations/duckstation-qt_tr.qm +%%DATADIR%%/translations/duckstation-qt_zh-CN.qm