mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-14 05:35:58 +00:00
Merge branch 'main' into fontlib
This commit is contained in:
commit
32c8df61e5
10 changed files with 94 additions and 39 deletions
|
@ -1090,33 +1090,31 @@ endif()
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
# Include MoltenVK, along with an ICD file so it can be found by the system Vulkan loader if used for loading layers.
|
# Include MoltenVK, along with an ICD file so it can be found by the system Vulkan loader if used for loading layers.
|
||||||
set(MVK_DYLIB_SRC ${CMAKE_CURRENT_BINARY_DIR}/externals/MoltenVK/libMoltenVK.dylib)
|
|
||||||
|
|
||||||
if (ENABLE_QT_GUI)
|
if (ENABLE_QT_GUI)
|
||||||
set_property(TARGET shadps4 APPEND PROPERTY BUILD_RPATH "@executable_path/../Frameworks")
|
set(MVK_BUNDLE_PATH "Resources/vulkan/icd.d")
|
||||||
set(MVK_ICD_DST ${CMAKE_CURRENT_BINARY_DIR}/shadps4.app/Contents/Resources/vulkan/icd.d/MoltenVK_icd.json)
|
set_property(TARGET shadps4 APPEND PROPERTY BUILD_RPATH "@executable_path/../${MVK_BUNDLE_PATH}")
|
||||||
set(MVK_DYLIB_DST ${CMAKE_CURRENT_BINARY_DIR}/shadps4.app/Contents/Frameworks/libMoltenVK.dylib)
|
set(MVK_DST ${CMAKE_CURRENT_BINARY_DIR}/shadps4.app/Contents/${MVK_BUNDLE_PATH})
|
||||||
set(MVK_DYLIB_ICD_PATH "../../../Frameworks/libMoltenVK.dylib")
|
|
||||||
else()
|
else()
|
||||||
set_property(TARGET shadps4 APPEND PROPERTY BUILD_RPATH "@executable_path")
|
set_property(TARGET shadps4 APPEND PROPERTY BUILD_RPATH "@executable_path")
|
||||||
set(MVK_ICD_DST ${CMAKE_CURRENT_BINARY_DIR}/MoltenVK_icd.json)
|
set(MVK_DST ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
set(MVK_DYLIB_DST ${CMAKE_CURRENT_BINARY_DIR}/libMoltenVK.dylib)
|
|
||||||
set(MVK_DYLIB_ICD_PATH "./libMoltenVK.dylib")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
cmake_path(GET MVK_ICD_DST PARENT_PATH MVK_ICD_DST_PARENT)
|
set(MVK_DYLIB_SRC ${CMAKE_CURRENT_BINARY_DIR}/externals/MoltenVK/libMoltenVK.dylib)
|
||||||
cmake_path(GET MVK_DYLIB_DST PARENT_PATH MVK_DYLIB_DST_PARENT)
|
set(MVK_DYLIB_DST ${MVK_DST}/libMoltenVK.dylib)
|
||||||
|
set(MVK_ICD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/externals/MoltenVK/MoltenVK/MoltenVK/icd/MoltenVK_icd.json)
|
||||||
|
set(MVK_ICD_DST ${MVK_DST}/MoltenVK_icd.json)
|
||||||
|
|
||||||
set(MVK_ICD "\\\{ \\\"file_format_version\\\": \\\"1.0.0\\\", \\\"ICD\\\": \\\{ \\\"library_path\\\": \\\"${MVK_DYLIB_ICD_PATH}\\\", \\\"api_version\\\": \\\"1.2.0\\\", \\\"is_portability_driver\\\": true \\\} \\\}")
|
add_custom_command(
|
||||||
|
OUTPUT ${MVK_DST}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${MVK_DST})
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${MVK_ICD_DST}
|
OUTPUT ${MVK_ICD_DST}
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${MVK_ICD_DST_PARENT} && ${CMAKE_COMMAND} -E echo ${MVK_ICD} > ${MVK_ICD_DST})
|
DEPENDS ${MVK_ICD_SRC} ${MVK_DST}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${MVK_ICD_SRC} ${MVK_ICD_DST})
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${MVK_DYLIB_DST}
|
OUTPUT ${MVK_DYLIB_DST}
|
||||||
DEPENDS ${MVK_DYLIB_SRC}
|
DEPENDS ${MVK_DYLIB_SRC} ${MVK_DST}
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${MVK_DYLIB_DST_PARENT} && ${CMAKE_COMMAND} -E copy ${MVK_DYLIB_SRC} ${MVK_DYLIB_DST})
|
COMMAND ${CMAKE_COMMAND} -E copy ${MVK_DYLIB_SRC} ${MVK_DYLIB_DST})
|
||||||
|
|
||||||
add_custom_target(CopyMoltenVK DEPENDS ${MVK_ICD_DST} ${MVK_DYLIB_DST})
|
add_custom_target(CopyMoltenVK DEPENDS ${MVK_ICD_DST} ${MVK_DYLIB_DST})
|
||||||
add_dependencies(CopyMoltenVK MoltenVK)
|
add_dependencies(CopyMoltenVK MoltenVK)
|
||||||
add_dependencies(shadps4 CopyMoltenVK)
|
add_dependencies(shadps4 CopyMoltenVK)
|
||||||
|
|
2
externals/MoltenVK/MoltenVK
vendored
2
externals/MoltenVK/MoltenVK
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 4cf8f94684c53e581eb9cc694dd3305d1f7d9959
|
Subproject commit 87a8e8b13d4ad8835367fea1ebad1896d0460946
|
2
externals/MoltenVK/SPIRV-Cross
vendored
2
externals/MoltenVK/SPIRV-Cross
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 2275d0efc4f2fa46851035d9d3c67c105bc8b99e
|
Subproject commit 7918775748c5e2f5c40d9918ce68825035b5a1e1
|
|
@ -83,9 +83,35 @@ int PS4_SYSV_ABI sceImeDialogGetPanelPositionAndForm() {
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceImeDialogGetPanelSize() {
|
Error PS4_SYSV_ABI sceImeDialogGetPanelSize(const OrbisImeDialogParam* param, u32* width,
|
||||||
LOG_ERROR(Lib_ImeDialog, "(STUBBED) called");
|
u32* height) {
|
||||||
return ORBIS_OK;
|
LOG_INFO(Lib_ImeDialog, "called");
|
||||||
|
|
||||||
|
if (!width || !height) {
|
||||||
|
return Error::INVALID_ADDRESS;
|
||||||
|
}
|
||||||
|
switch (param->type) {
|
||||||
|
case OrbisImeType::Default:
|
||||||
|
case OrbisImeType::BasicLatin:
|
||||||
|
case OrbisImeType::Url:
|
||||||
|
case OrbisImeType::Mail:
|
||||||
|
*width = 500; // original: 793
|
||||||
|
if (True(param->option & OrbisImeDialogOption::Multiline)) {
|
||||||
|
*height = 300; // original: 576
|
||||||
|
} else {
|
||||||
|
*height = 150; // original: 476
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OrbisImeType::Number:
|
||||||
|
*width = 370;
|
||||||
|
*height = 470;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(Lib_ImeDialog, "Unknown OrbisImeType: {}", (u32)param->type);
|
||||||
|
return Error::INVALID_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Error::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceImeDialogGetPanelSizeExtended() {
|
int PS4_SYSV_ABI sceImeDialogGetPanelSizeExtended() {
|
||||||
|
|
|
@ -155,7 +155,8 @@ Error PS4_SYSV_ABI sceImeDialogForceClose();
|
||||||
Error PS4_SYSV_ABI sceImeDialogForTestFunction();
|
Error PS4_SYSV_ABI sceImeDialogForTestFunction();
|
||||||
int PS4_SYSV_ABI sceImeDialogGetCurrentStarState();
|
int PS4_SYSV_ABI sceImeDialogGetCurrentStarState();
|
||||||
int PS4_SYSV_ABI sceImeDialogGetPanelPositionAndForm();
|
int PS4_SYSV_ABI sceImeDialogGetPanelPositionAndForm();
|
||||||
int PS4_SYSV_ABI sceImeDialogGetPanelSize();
|
Error PS4_SYSV_ABI sceImeDialogGetPanelSize(const OrbisImeDialogParam* param, u32* width,
|
||||||
|
u32* height);
|
||||||
int PS4_SYSV_ABI sceImeDialogGetPanelSizeExtended();
|
int PS4_SYSV_ABI sceImeDialogGetPanelSizeExtended();
|
||||||
Error PS4_SYSV_ABI sceImeDialogGetResult(OrbisImeDialogResult* result);
|
Error PS4_SYSV_ABI sceImeDialogGetResult(OrbisImeDialogResult* result);
|
||||||
OrbisImeDialogStatus PS4_SYSV_ABI sceImeDialogGetStatus();
|
OrbisImeDialogStatus PS4_SYSV_ABI sceImeDialogGetStatus();
|
||||||
|
|
|
@ -19,11 +19,40 @@ int PS4_SYSV_ABI sceSysmoduleGetModuleHandleInternal() {
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 PS4_SYSV_ABI sceSysmoduleGetModuleInfoForUnwind(VAddr addr, s32 flags, void* info) {
|
s32 PS4_SYSV_ABI sceSysmoduleGetModuleInfoForUnwind(VAddr addr, s32 flags,
|
||||||
LOG_ERROR(Lib_SysModule, "(STUBBED) called");
|
Kernel::OrbisModuleInfoForUnwind* info) {
|
||||||
Kernel::OrbisModuleInfoForUnwind module_info;
|
LOG_TRACE(Lib_SysModule, "sceSysmoduleGetModuleInfoForUnwind(addr=0x{:X}, flags=0x{:X})", addr,
|
||||||
module_info.st_size = 0x130;
|
flags);
|
||||||
s32 res = Kernel::sceKernelGetModuleInfoForUnwind(addr, flags, &module_info);
|
|
||||||
|
s32 res = Kernel::sceKernelGetModuleInfoForUnwind(addr, flags, info);
|
||||||
|
if (res != 0) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr std::array<std::string_view, 17> modules_to_hide = {
|
||||||
|
"libc.prx",
|
||||||
|
"libc.sprx",
|
||||||
|
"libSceAudioLatencyEstimation.prx",
|
||||||
|
"libSceFace.prx",
|
||||||
|
"libSceFaceTracker.prx",
|
||||||
|
"libSceFios2.prx",
|
||||||
|
"libSceFios2.sprx",
|
||||||
|
"libSceFontGsm.prx",
|
||||||
|
"libSceHand.prx",
|
||||||
|
"libSceHandTracker.prx",
|
||||||
|
"libSceHeadTracker.prx",
|
||||||
|
"libSceJobManager.prx",
|
||||||
|
"libSceNpCppWebApi.prx",
|
||||||
|
"libSceNpToolkit.prx",
|
||||||
|
"libSceNpToolkit2.prx",
|
||||||
|
"libSceS3DConversion.prx",
|
||||||
|
"libSceSmart.prx",
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::string_view module_name = info->name.data();
|
||||||
|
if (std::ranges::find(modules_to_hide, module_name) != modules_to_hide.end()) {
|
||||||
|
std::ranges::fill(info->name, '\0');
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +85,6 @@ int PS4_SYSV_ABI sceSysmoduleIsLoadedInternal(OrbisSysModuleInternal id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceSysmoduleLoadModule(OrbisSysModule id) {
|
int PS4_SYSV_ABI sceSysmoduleLoadModule(OrbisSysModule id) {
|
||||||
auto color_name = magic_enum::enum_name(id);
|
|
||||||
LOG_ERROR(Lib_SysModule, "(DUMMY) called module = {}", magic_enum::enum_name(id));
|
LOG_ERROR(Lib_SysModule, "(DUMMY) called module = {}", magic_enum::enum_name(id));
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
#include "core/libraries/kernel/process.h"
|
||||||
|
|
||||||
namespace Core::Loader {
|
namespace Core::Loader {
|
||||||
class SymbolsResolver;
|
class SymbolsResolver;
|
||||||
|
@ -152,7 +153,8 @@ enum class OrbisSysModuleInternal : u32 {
|
||||||
};
|
};
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceSysmoduleGetModuleHandleInternal();
|
int PS4_SYSV_ABI sceSysmoduleGetModuleHandleInternal();
|
||||||
s32 PS4_SYSV_ABI sceSysmoduleGetModuleInfoForUnwind(VAddr addr, s32 flags, void* info);
|
s32 PS4_SYSV_ABI sceSysmoduleGetModuleInfoForUnwind(VAddr addr, s32 flags,
|
||||||
|
Kernel::OrbisModuleInfoForUnwind* info);
|
||||||
int PS4_SYSV_ABI sceSysmoduleIsCalledFromSysModule();
|
int PS4_SYSV_ABI sceSysmoduleIsCalledFromSysModule();
|
||||||
int PS4_SYSV_ABI sceSysmoduleIsCameraPreloaded();
|
int PS4_SYSV_ABI sceSysmoduleIsCameraPreloaded();
|
||||||
int PS4_SYSV_ABI sceSysmoduleIsLoaded(OrbisSysModule id);
|
int PS4_SYSV_ABI sceSysmoduleIsLoaded(OrbisSysModule id);
|
||||||
|
|
|
@ -142,7 +142,7 @@ PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size,
|
||||||
auto mapping_start = search_start > dmem_area->second.base
|
auto mapping_start = search_start > dmem_area->second.base
|
||||||
? Common::AlignUp(search_start, alignment)
|
? Common::AlignUp(search_start, alignment)
|
||||||
: Common::AlignUp(dmem_area->second.base, alignment);
|
: Common::AlignUp(dmem_area->second.base, alignment);
|
||||||
auto mapping_end = Common::AlignUp(mapping_start + size, alignment);
|
auto mapping_end = mapping_start + size;
|
||||||
|
|
||||||
// Find the first free, large enough dmem area in the range.
|
// Find the first free, large enough dmem area in the range.
|
||||||
while ((!dmem_area->second.is_free || dmem_area->second.GetEnd() < mapping_end) &&
|
while ((!dmem_area->second.is_free || dmem_area->second.GetEnd() < mapping_end) &&
|
||||||
|
@ -151,10 +151,8 @@ PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size,
|
||||||
dmem_area++;
|
dmem_area++;
|
||||||
|
|
||||||
// Update local variables based on the new dmem_area
|
// Update local variables based on the new dmem_area
|
||||||
mapping_start = search_start > dmem_area->second.base
|
mapping_start = Common::AlignUp(dmem_area->second.base, alignment);
|
||||||
? Common::AlignUp(search_start, alignment)
|
mapping_end = mapping_start + size;
|
||||||
: Common::AlignUp(dmem_area->second.base, alignment);
|
|
||||||
mapping_end = Common::AlignUp(mapping_start + size, alignment);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dmem_area == dmem_map.end()) {
|
if (dmem_area == dmem_map.end()) {
|
||||||
|
|
|
@ -521,9 +521,11 @@ void Instance::CollectDeviceParameters() {
|
||||||
LOG_INFO(Render_Vulkan, "GPU_Vulkan_Extensions: {}", extensions);
|
LOG_INFO(Render_Vulkan, "GPU_Vulkan_Extensions: {}", extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Instance::CollectToolingInfo() {
|
void Instance::CollectToolingInfo() const {
|
||||||
if (GetDriverID() == vk::DriverId::eAmdProprietary) {
|
if (driver_id == vk::DriverId::eAmdProprietary ||
|
||||||
// Currently causes issues with Reshade on AMD proprietary, disabled until fix released.
|
driver_id == vk::DriverId::eIntelProprietaryWindows) {
|
||||||
|
// AMD: Causes issues with Reshade.
|
||||||
|
// Intel: Causes crash on start.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto [tools_result, tools] = physical_device.getToolProperties();
|
const auto [tools_result, tools] = physical_device.getToolProperties();
|
||||||
|
|
|
@ -311,7 +311,7 @@ private:
|
||||||
|
|
||||||
/// Collects telemetry information from the device.
|
/// Collects telemetry information from the device.
|
||||||
void CollectDeviceParameters();
|
void CollectDeviceParameters();
|
||||||
void CollectToolingInfo();
|
void CollectToolingInfo() const;
|
||||||
|
|
||||||
/// Gets the supported feature flags for a format.
|
/// Gets the supported feature flags for a format.
|
||||||
[[nodiscard]] vk::FormatFeatureFlags2 GetFormatFeatureFlags(vk::Format format) const;
|
[[nodiscard]] vk::FormatFeatureFlags2 GetFormatFeatureFlags(vk::Format format) const;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue