Sfoglia il codice sorgente

vk_texture_cache: Fix unsupported blit format error checking

ameerj 4 anni fa
parent
commit
89a7e566c7

+ 5 - 5
src/video_core/renderer_vulkan/vk_texture_cache.cpp

@@ -1137,11 +1137,11 @@ bool Image::ScaleUp() {
     const auto& device = runtime->device;
     const PixelFormat format = StorageFormat(info.format);
     const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, false, format);
-    const auto similar = device.GetSupportedFormat(
-        format_info.format, (VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT),
-        FormatType::Optimal);
-    if (similar != format_info.format) {
-        return true;
+    const auto blit_usage = VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
+    if (!device.IsFormatSupported(format_info.format, blit_usage, FormatType::Optimal)) {
+        LOG_ERROR(Render_Vulkan, "Device does not support scaling format {}", format);
+        // TODO: Use helper blits where applicable
+        return false;
     }
     if (!scaled_image) {
         const u32 up = resolution.up_scale;

+ 4 - 4
src/video_core/vulkan_common/vulkan_device.h

@@ -40,6 +40,10 @@ public:
     VkFormat GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
                                 FormatType format_type) const;
 
+    /// Returns true if a format is supported.
+    bool IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
+                           FormatType format_type) const;
+
     /// Reports a device loss.
     void ReportLoss() const;
 
@@ -370,10 +374,6 @@ private:
     /// Returns true if the device natively supports blitting depth stencil images.
     bool TestDepthStencilBlits() const;
 
-    /// Returns true if a format is supported.
-    bool IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
-                           FormatType format_type) const;
-
     VkInstance instance;                                         ///< Vulkan instance.
     vk::DeviceDispatch dld;                                      ///< Device function pointers.
     vk::PhysicalDevice physical;                                 ///< Physical device.