mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-25 04:02:42 +01:00
Initial support for Apple GPUs
This commit is contained in:
parent
6b5f0957ce
commit
c7140df5f8
@ -79,8 +79,8 @@ namespace vk
|
||||
case vk::driver_vendor::NVIDIA:
|
||||
// Warps are multiples of 32. Increasing kernel depth seems to hurt performance (Nier, Big Duck sample)
|
||||
unroll_loops = true;
|
||||
optimal_group_size = 32;
|
||||
optimal_kernel_size = 1;
|
||||
optimal_group_size = 32;
|
||||
break;
|
||||
case vk::driver_vendor::AMD:
|
||||
case vk::driver_vendor::RADV:
|
||||
@ -89,6 +89,11 @@ namespace vk
|
||||
optimal_kernel_size = 1;
|
||||
optimal_group_size = 64;
|
||||
break;
|
||||
case vk::driver_vendor::MVK:
|
||||
unroll_loops = true;
|
||||
optimal_kernel_size = 1;
|
||||
optimal_group_size = 256;
|
||||
break;
|
||||
}
|
||||
|
||||
const auto& gpu = vk::g_render_device->gpu();
|
||||
|
@ -603,6 +603,11 @@ VKGSRender::VKGSRender() : GSRender()
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case vk::driver_vendor::MVK:
|
||||
// Async compute crashes immediately on Apple GPUs
|
||||
rsx_log.error("Apple GPUs are incompatible with the current implementation of asynchronous texture decoding.");
|
||||
backend_config.supports_asynchronous_compute = false;
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
|
@ -124,6 +124,9 @@ namespace vk
|
||||
case driver_vendor::ANV:
|
||||
// INTEL vulkan drivers are mostly OK, workarounds are applied when creating the device
|
||||
break;
|
||||
case driver_vendor::MVK:
|
||||
// Apple GPUs / moltenVK need more testing
|
||||
break;
|
||||
default:
|
||||
rsx_log.warning("Unsupported device: %s", gpu_name);
|
||||
}
|
||||
|
@ -115,6 +115,7 @@ namespace vk
|
||||
[[ fallthrough ]];
|
||||
case driver_vendor::NVIDIA:
|
||||
case driver_vendor::INTEL:
|
||||
case driver_vendor::MVK:
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,8 @@ namespace vk
|
||||
NV_pascal,
|
||||
NV_volta,
|
||||
NV_turing,
|
||||
NV_ampere
|
||||
NV_ampere,
|
||||
MVK_apple
|
||||
};
|
||||
|
||||
enum class driver_vendor
|
||||
@ -30,7 +31,8 @@ namespace vk
|
||||
NVIDIA,
|
||||
RADV,
|
||||
INTEL,
|
||||
ANV
|
||||
ANV,
|
||||
MVK
|
||||
};
|
||||
|
||||
driver_vendor get_driver_vendor();
|
||||
|
@ -183,9 +183,16 @@ namespace vk
|
||||
|
||||
driver_vendor physical_device::get_driver_vendor() const
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
// moltenVK currently returns DRIVER_ID_MOLTENVK (0).
|
||||
// For now, assume the vendor is moltenVK on Apple devices.
|
||||
return driver_vendor::MVK;
|
||||
#endif
|
||||
|
||||
if (!driver_properties.driverID)
|
||||
{
|
||||
const auto gpu_name = get_name();
|
||||
|
||||
if (gpu_name.find("Radeon") != umax)
|
||||
{
|
||||
return driver_vendor::AMD;
|
||||
|
@ -522,6 +522,7 @@ namespace vk
|
||||
case driver_vendor::AMD:
|
||||
case driver_vendor::INTEL:
|
||||
case driver_vendor::RADV:
|
||||
case driver_vendor::MVK:
|
||||
break;
|
||||
case driver_vendor::ANV:
|
||||
case driver_vendor::NVIDIA:
|
||||
|
@ -73,11 +73,10 @@ struct cfg_root : cfg::node
|
||||
cfg::uint64 tx_limit2_ns{this, "TSX Transaction Second Limit", 2000}; // In nanoseconds
|
||||
|
||||
cfg::_int<10, 3000> clocks_scale{ this, "Clocks scale", 100 }; // Changing this from 100 (percentage) may affect game speed in unexpected ways
|
||||
cfg::_enum<sleep_timers_accuracy_level> sleep_timers_accuracy{ this, "Sleep Timers Accuracy",
|
||||
#ifdef __linux__
|
||||
sleep_timers_accuracy_level::_as_host, true };
|
||||
#if defined (__linux__) || defined (__APPLE__)
|
||||
cfg::_enum<sleep_timers_accuracy_level> sleep_timers_accuracy{ this, "Sleep Timers Accuracy", sleep_timers_accuracy_level::_as_host, true };
|
||||
#else
|
||||
sleep_timers_accuracy_level::_usleep, true };
|
||||
cfg::_enum<sleep_timers_accuracy_level> sleep_timers_accuracy{ this, "Sleep Timers Accuracy", sleep_timers_accuracy_level::_usleep, true };
|
||||
#endif
|
||||
|
||||
cfg::uint64 perf_report_threshold{this, "Performance Report Threshold", 500, true}; // In µs, 0.5ms = default, 0 = everything
|
||||
@ -134,7 +133,11 @@ struct cfg_root : cfg::node
|
||||
cfg::_bool disable_vulkan_mem_allocator{ this, "Disable Vulkan Memory Allocator", false };
|
||||
cfg::_bool full_rgb_range_output{ this, "Use full RGB output range", true, true }; // Video out dynamic range
|
||||
cfg::_bool strict_texture_flushing{ this, "Strict Texture Flushing", false };
|
||||
#ifdef __APPLE__
|
||||
cfg::_bool disable_native_float16{ this, "Disable native float16 support", true };
|
||||
#else
|
||||
cfg::_bool disable_native_float16{ this, "Disable native float16 support", false };
|
||||
#endif
|
||||
cfg::_bool multithreaded_rsx{ this, "Multithreaded RSX", false };
|
||||
cfg::_bool relaxed_zcull_sync{ this, "Relaxed ZCULL Sync", false };
|
||||
cfg::_bool enable_3d{ this, "Enable 3D", false };
|
||||
|
Loading…
Reference in New Issue
Block a user