|
@@ -3,12 +3,15 @@
|
|
|
// Refer to the license.txt file included.
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <bitset>
|
|
#include <bitset>
|
|
|
|
|
+#include <chrono>
|
|
|
#include <cstdlib>
|
|
#include <cstdlib>
|
|
|
#include <optional>
|
|
#include <optional>
|
|
|
#include <set>
|
|
#include <set>
|
|
|
#include <string_view>
|
|
#include <string_view>
|
|
|
|
|
+#include <thread>
|
|
|
#include <vector>
|
|
#include <vector>
|
|
|
#include "common/assert.h"
|
|
#include "common/assert.h"
|
|
|
|
|
+#include "core/settings.h"
|
|
|
#include "video_core/renderer_vulkan/declarations.h"
|
|
#include "video_core/renderer_vulkan/declarations.h"
|
|
|
#include "video_core/renderer_vulkan/vk_device.h"
|
|
#include "video_core/renderer_vulkan/vk_device.h"
|
|
|
|
|
|
|
@@ -201,6 +204,22 @@ vk::Format VKDevice::GetSupportedFormat(vk::Format wanted_format,
|
|
|
return wanted_format;
|
|
return wanted_format;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void VKDevice::ReportLoss() const {
|
|
|
|
|
+ LOG_CRITICAL(Render_Vulkan, "Device loss occured!");
|
|
|
|
|
+
|
|
|
|
|
+ // Wait some time to let the log flush
|
|
|
|
|
+ std::this_thread::sleep_for(std::chrono::seconds{1});
|
|
|
|
|
+
|
|
|
|
|
+ if (!nv_device_diagnostic_checkpoints) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ [[maybe_unused]] const std::vector data = graphics_queue.getCheckpointDataNV(dld);
|
|
|
|
|
+ // Catch here in debug builds (or with optimizations disabled) the last graphics pipeline to be
|
|
|
|
|
+ // executed. It can be done on a debugger by evaluating the expression:
|
|
|
|
|
+ // *(VKGraphicsPipeline*)data[0]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
bool VKDevice::IsOptimalAstcSupported(const vk::PhysicalDeviceFeatures& features,
|
|
bool VKDevice::IsOptimalAstcSupported(const vk::PhysicalDeviceFeatures& features,
|
|
|
const vk::DispatchLoaderDynamic& dldi) const {
|
|
const vk::DispatchLoaderDynamic& dldi) const {
|
|
|
// Disable for now to avoid converting ASTC twice.
|
|
// Disable for now to avoid converting ASTC twice.
|
|
@@ -381,6 +400,8 @@ std::vector<const char*> VKDevice::LoadExtensions(const vk::DispatchLoaderDynami
|
|
|
VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME, true);
|
|
VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME, true);
|
|
|
Test(extension, ext_subgroup_size_control, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME,
|
|
Test(extension, ext_subgroup_size_control, VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME,
|
|
|
false);
|
|
false);
|
|
|
|
|
+ Test(extension, nv_device_diagnostic_checkpoints,
|
|
|
|
|
+ VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME, true);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (khr_shader_float16_int8) {
|
|
if (khr_shader_float16_int8) {
|