diff --git a/src/common/config.cpp b/src/common/config.cpp index 339990c55..10028ec7b 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -187,6 +187,7 @@ static ConfigEntry rcasAttenuation(250); // Vulkan static ConfigEntry gpuId(-1); static ConfigEntry vkValidation(false); +static ConfigEntry vkValidationCore(true); static ConfigEntry vkValidationSync(false); static ConfigEntry vkValidationGpu(false); static ConfigEntry vkCrashDiagnostic(false); @@ -471,6 +472,10 @@ bool vkValidationEnabled() { return vkValidation.get(); } +bool vkValidationCoreEnabled() { + return vkValidationCore.get(); +} + bool vkValidationSyncEnabled() { return vkValidationSync.get(); } @@ -928,6 +933,7 @@ void load(const std::filesystem::path& path, bool is_game_specific) { gpuId.setFromToml(vk, "gpuId", is_game_specific); vkValidation.setFromToml(vk, "validation", is_game_specific); + vkValidationCore.setFromToml(vk, "validation_core", is_game_specific); vkValidationSync.setFromToml(vk, "validation_sync", is_game_specific); vkValidationGpu.setFromToml(vk, "validation_gpu", is_game_specific); vkCrashDiagnostic.setFromToml(vk, "crashDiagnostic", is_game_specific); @@ -1163,6 +1169,7 @@ void save(const std::filesystem::path& path, bool is_game_specific) { data["GPU"]["internalScreenWidth"] = internalScreenWidth.base_value; data["GPU"]["internalScreenHeight"] = internalScreenHeight.base_value; data["GPU"]["patchShaders"] = shouldPatchShaders.base_value; + data["Vulkan"]["validation_core"] = vkValidationCore.base_value; data["Vulkan"]["validation_gpu"] = vkValidationGpu.base_value; data["Debug"]["FPSColor"] = isFpsColor.base_value; } @@ -1229,6 +1236,7 @@ void setDefaultValues(bool is_game_specific) { // GS - Vulkan gpuId.set(-1, is_game_specific); vkValidation.set(false, is_game_specific); + vkValidationCore.set(false, is_game_specific); vkValidationSync.set(false, is_game_specific); vkValidationGpu.set(false, is_game_specific); vkCrashDiagnostic.set(false, is_game_specific); diff --git a/src/common/config.h b/src/common/config.h index aacf4c96a..2760117f7 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -122,7 +122,8 @@ void setNeoMode(bool enable, bool is_game_specific = false); bool isDevKitConsole(); void setDevKitConsole(bool enable, bool is_game_specific = false); -bool vkValidationGpuEnabled(); // no set +bool vkValidationCoreEnabled(); // no set +bool vkValidationGpuEnabled(); // no set int getExtraDmemInMbytes(); void setExtraDmemInMbytes(int value); bool getIsMotionControlsEnabled(); diff --git a/src/emulator.cpp b/src/emulator.cpp index 8e470b158..625027c11 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -176,6 +176,7 @@ void Emulator::Run(std::filesystem::path file, std::vector args, LOG_INFO(Config, "GPU shouldCopyGPUBuffers: {}", Config::copyGPUCmdBuffers()); LOG_INFO(Config, "Vulkan gpuId: {}", Config::getGpuId()); LOG_INFO(Config, "Vulkan vkValidation: {}", Config::vkValidationEnabled()); + LOG_INFO(Config, "Vulkan vkValidationCore: {}", Config::vkValidationCoreEnabled()); LOG_INFO(Config, "Vulkan vkValidationSync: {}", Config::vkValidationSyncEnabled()); LOG_INFO(Config, "Vulkan vkValidationGpu: {}", Config::vkValidationGpuEnabled()); LOG_INFO(Config, "Vulkan crashDiagnostics: {}", Config::getVkCrashDiagnosticEnabled()); diff --git a/src/video_core/renderer_vulkan/vk_platform.cpp b/src/video_core/renderer_vulkan/vk_platform.cpp index 7e6849979..d93f065a9 100644 --- a/src/video_core/renderer_vulkan/vk_platform.cpp +++ b/src/video_core/renderer_vulkan/vk_platform.cpp @@ -304,10 +304,9 @@ vk::UniqueInstance CreateInstance(Frontend::WindowSystemType window_type, bool e LOG_INFO(Render_Vulkan, "Enabled instance layers: {}", layers_string); // Validation settings + vk::Bool32 enable_core = Config::vkValidationCoreEnabled() ? vk::True : vk::False; vk::Bool32 enable_sync = Config::vkValidationSyncEnabled() ? vk::True : vk::False; - vk::Bool32 enable_gpuav = Config::vkValidationSyncEnabled() ? vk::True : vk::False; - const char* gpuav_mode = - Config::vkValidationGpuEnabled() ? "GPU_BASED_GPU_ASSISTED" : "GPU_BASED_NONE"; + vk::Bool32 enable_gpuav = Config::vkValidationGpuEnabled() ? vk::True : vk::False; // Crash diagnostics settings static const auto crash_diagnostic_path = @@ -319,6 +318,13 @@ vk::UniqueInstance CreateInstance(Frontend::WindowSystemType window_type, bool e #endif const std::array layer_setings = { + vk::LayerSettingEXT{ + .pLayerName = VALIDATION_LAYER_NAME, + .pSettingName = "validate_core", + .type = vk::LayerSettingTypeEXT::eBool32, + .valueCount = 1, + .pValues = &enable_core, + }, vk::LayerSettingEXT{ .pLayerName = VALIDATION_LAYER_NAME, .pSettingName = "validate_sync", @@ -335,14 +341,7 @@ vk::UniqueInstance CreateInstance(Frontend::WindowSystemType window_type, bool e }, vk::LayerSettingEXT{ .pLayerName = VALIDATION_LAYER_NAME, - .pSettingName = "validate_gpu_based", - .type = vk::LayerSettingTypeEXT::eString, - .valueCount = 1, - .pValues = &gpuav_mode, - }, - vk::LayerSettingEXT{ - .pLayerName = VALIDATION_LAYER_NAME, - .pSettingName = "gpuav_reserve_binding_slot", + .pSettingName = "gpuav_enable", .type = vk::LayerSettingTypeEXT::eBool32, .valueCount = 1, .pValues = &enable_gpuav, @@ -356,7 +355,28 @@ vk::UniqueInstance CreateInstance(Frontend::WindowSystemType window_type, bool e }, vk::LayerSettingEXT{ .pLayerName = VALIDATION_LAYER_NAME, - .pSettingName = "gpuav_validate_indirect_buffer", + .pSettingName = "gpuav_buffers_validation", + .type = vk::LayerSettingTypeEXT::eBool32, + .valueCount = 1, + .pValues = &enable_gpuav, + }, + vk::LayerSettingEXT{ + .pLayerName = VALIDATION_LAYER_NAME, + .pSettingName = "gpuav_indirect_draws_buffers", + .type = vk::LayerSettingTypeEXT::eBool32, + .valueCount = 1, + .pValues = &enable_gpuav, + }, + vk::LayerSettingEXT{ + .pLayerName = VALIDATION_LAYER_NAME, + .pSettingName = "gpuav_indirect_dispatches_buffers", + .type = vk::LayerSettingTypeEXT::eBool32, + .valueCount = 1, + .pValues = &enable_gpuav, + }, + vk::LayerSettingEXT{ + .pLayerName = VALIDATION_LAYER_NAME, + .pSettingName = "gpuav_indirect_trace_rays_buffers", .type = vk::LayerSettingTypeEXT::eBool32, .valueCount = 1, .pValues = &enable_gpuav, @@ -438,4 +458,4 @@ vk::UniqueDebugUtilsMessengerEXT CreateDebugCallback(vk::Instance instance) { return std::move(messenger); } -} // namespace Vulkan +} // namespace Vulkan \ No newline at end of file