From 47ab25dbf7ba194736bbe5b367458e7297aacc20 Mon Sep 17 00:00:00 2001 From: Alessio1989 Date: Thu, 14 Mar 2024 20:34:14 +0100 Subject: [PATCH] distinguish between moltenVK and other drivers. --- src/video_core/renderer_vulkan/vk_texture_cache.cpp | 8 +++++--- src/video_core/vulkan_common/vulkan_device.h | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 545f7ffca7..a8a5353ad4 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -136,7 +136,10 @@ constexpr VkBorderColor ConvertBorderColor(const std::array& color) { auto usage = ImageUsageFlags(format_info, info.format); if (is_3d) { flags |= VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT; - usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + // Force usage to be VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT only on MoltenVK + if (device.IsMoltenVK()) { + usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + } } const auto [samples_x, samples_y] = VideoCommon::SamplesLog2(info.num_samples); return VkImageCreateInfo{ @@ -164,8 +167,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array& color) { [[nodiscard]] vk::Image MakeImage(const Device& device, const MemoryAllocator& allocator, const ImageInfo& info, std::span view_formats) { - const bool is_buffer = (info.type == ImageType::Buffer); - if (is_buffer) { + if (info.type == ImageType::Buffer) { return vk::Image{}; } VkImageCreateInfo image_ci = MakeImageCreateInfo(device, info); diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h index e3abe8ddfa..25c2a9f406 100644 --- a/src/video_core/vulkan_common/vulkan_device.h +++ b/src/video_core/vulkan_common/vulkan_device.h @@ -702,6 +702,11 @@ public: return properties.driver.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY; } + /// Checks if we are runing MolvenVK. + bool IsMoltenVK() const noexcept { + return properties.driver.driverID == VK_DRIVER_ID_MOLTENVK; + } + NvidiaArchitecture GetNvidiaArch() const noexcept { return nvidia_arch; }