summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorameerj <52414509+ameerj@users.noreply.github.com>2021-07-03 07:49:59 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:40 +0200
commit7277d7fe96d53ae2b73491d91e0a54caf0206fe7 (patch)
tree3b750375adb79f5bc7bf19ab2fe771c5627b43cf
parentdual_vertex_pass: Clang format (diff)
downloadyuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.tar
yuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.tar.gz
yuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.tar.bz2
yuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.tar.lz
yuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.tar.xz
yuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.tar.zst
yuzu-7277d7fe96d53ae2b73491d91e0a54caf0206fe7.zip
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp29
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h6
2 files changed, 23 insertions, 12 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index e297a3e92..7d66a43e7 100644
--- a/src/video_core/vulkan_common/vulkan_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -194,12 +194,22 @@ std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(vk::Physica
return format_properties;
}
+std::vector<std::string> GetSupportedExtensions(vk::PhysicalDevice physical) {
+ const std::vector extensions = physical.EnumerateDeviceExtensionProperties();
+ std::vector<std::string> supported_extensions(std::size(extensions));
+ for (const auto& extension : extensions) {
+ supported_extensions.emplace_back(extension.extensionName);
+ }
+ return supported_extensions;
+}
+
} // Anonymous namespace
Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR surface,
const vk::InstanceDispatch& dld_)
: instance{instance_}, dld{dld_}, physical{physical_}, properties{physical.GetProperties()},
- format_properties{GetFormatProperties(physical)} {
+ supported_extensions{GetSupportedExtensions(physical)},
+ format_properties(GetFormatProperties(physical)) {
CheckSuitability(surface != nullptr);
SetupFamilies(surface);
SetupFeatures();
@@ -510,6 +520,13 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
CollectTelemetryParameters();
CollectToolingInfo();
+ if (driver_id == VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR && is_float16_supported) {
+ if (std::ranges::find(supported_extensions, VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME) !=
+ supported_extensions.end()) {
+ LOG_WARNING(Render_Vulkan, "Blacklisting Ampere devices from float16 math");
+ is_float16_supported = false;
+ }
+ }
if (ext_extended_dynamic_state && driver_id == VK_DRIVER_ID_MESA_RADV) {
// Mask driver version variant
const u32 version = (properties.driverVersion << 3) >> 3;
@@ -778,10 +795,10 @@ std::vector<const char*> Device::LoadExtensions(bool requires_surface) {
bool has_ext_provoking_vertex{};
bool has_ext_vertex_input_dynamic_state{};
bool has_ext_line_rasterization{};
- for (const VkExtensionProperties& extension : physical.EnumerateDeviceExtensionProperties()) {
+ for (const std::string& extension : supported_extensions) {
const auto test = [&](std::optional<std::reference_wrapper<bool>> status, const char* name,
bool push) {
- if (extension.extensionName != std::string_view(name)) {
+ if (extension != name) {
return;
}
if (push) {
@@ -1064,12 +1081,6 @@ void Device::CollectTelemetryParameters() {
driver_id = driver.driverID;
vendor_name = driver.driverName;
-
- const std::vector extensions = physical.EnumerateDeviceExtensionProperties();
- reported_extensions.reserve(std::size(extensions));
- for (const auto& extension : extensions) {
- reported_extensions.emplace_back(extension.extensionName);
- }
}
void Device::CollectPhysicalMemoryInfo() {
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 26100166f..df394e384 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -301,7 +301,7 @@ public:
/// Returns the list of available extensions.
const std::vector<std::string>& GetAvailableExtensions() const {
- return reported_extensions;
+ return supported_extensions;
}
u64 GetDeviceLocalMemory() const {
@@ -398,8 +398,8 @@ private:
bool has_nsight_graphics{}; ///< Has Nsight Graphics attached
// Telemetry parameters
- std::string vendor_name; ///< Device's driver name.
- std::vector<std::string> reported_extensions; ///< Reported Vulkan extensions.
+ std::string vendor_name; ///< Device's driver name.
+ std::vector<std::string> supported_extensions; ///< Reported Vulkan extensions.
/// Format properties dictionary.
std::unordered_map<VkFormat, VkFormatProperties> format_properties;