video_core: Formalize HasBrokenCompute
Also limits it to only affected Intel proprietrary driver versions. vulkan_device: Move broken compute determination vk_device: Remove errant back quote
This commit is contained in:
		| @@ -705,10 +705,7 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline( | |||||||
| std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline( | std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline( | ||||||
|     ShaderPools& pools, const ComputePipelineCacheKey& key, Shader::Environment& env, |     ShaderPools& pools, const ComputePipelineCacheKey& key, Shader::Environment& env, | ||||||
|     PipelineStatistics* statistics, bool build_in_parallel) try { |     PipelineStatistics* statistics, bool build_in_parallel) try { | ||||||
|     // TODO: Remove this when Intel fixes their shader compiler. |     if (device.HasBrokenCompute() && !Settings::values.enable_compute_pipelines.GetValue()) { | ||||||
|     //       https://github.com/IGCIT/Intel-GPU-Community-Issue-Tracker-IGCIT/issues/159 |  | ||||||
|     if (device.GetDriverID() == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS && |  | ||||||
|         !Settings::values.enable_compute_pipelines.GetValue()) { |  | ||||||
|         LOG_ERROR(Render_Vulkan, "Skipping 0x{:016x}", key.Hash()); |         LOG_ERROR(Render_Vulkan, "Skipping 0x{:016x}", key.Hash()); | ||||||
|         return nullptr; |         return nullptr; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -562,6 +562,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||||||
|         LOG_WARNING(Render_Vulkan, "Intel proprietary drivers do not support MSAA image blits"); |         LOG_WARNING(Render_Vulkan, "Intel proprietary drivers do not support MSAA image blits"); | ||||||
|         cant_blit_msaa = true; |         cant_blit_msaa = true; | ||||||
|     } |     } | ||||||
|  |     has_broken_compute = | ||||||
|  |         CheckBrokenCompute(properties.driver.driverID, properties.properties.driverVersion); | ||||||
|     if (is_intel_anv || (is_qualcomm && !is_s8gen2)) { |     if (is_intel_anv || (is_qualcomm && !is_s8gen2)) { | ||||||
|         LOG_WARNING(Render_Vulkan, "Driver does not support native BGR format"); |         LOG_WARNING(Render_Vulkan, "Driver does not support native BGR format"); | ||||||
|         must_emulate_bgr565 = true; |         must_emulate_bgr565 = true; | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ | |||||||
| #include <vector> | #include <vector> | ||||||
|  |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "common/logging/log.h" | ||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
| #include "video_core/vulkan_common/vulkan_wrapper.h" | #include "video_core/vulkan_common/vulkan_wrapper.h" | ||||||
|  |  | ||||||
| @@ -518,6 +519,11 @@ public: | |||||||
|         return has_renderdoc || has_nsight_graphics || Settings::values.renderer_debug.GetValue(); |         return has_renderdoc || has_nsight_graphics || Settings::values.renderer_debug.GetValue(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// @returns True if compute pipelines can cause crashing. | ||||||
|  |     bool HasBrokenCompute() const { | ||||||
|  |         return has_broken_compute; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Returns true when the device does not properly support cube compatibility. |     /// Returns true when the device does not properly support cube compatibility. | ||||||
|     bool HasBrokenCubeImageCompability() const { |     bool HasBrokenCubeImageCompability() const { | ||||||
|         return has_broken_cube_compatibility; |         return has_broken_cube_compatibility; | ||||||
| @@ -579,6 +585,22 @@ public: | |||||||
|         return supports_conditional_barriers; |         return supports_conditional_barriers; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     [[nodiscard]] static constexpr bool CheckBrokenCompute(VkDriverId driver_id, | ||||||
|  |                                                            u32 driver_version) { | ||||||
|  |         if (driver_id == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS) { | ||||||
|  |             const u32 major = VK_API_VERSION_MAJOR(driver_version); | ||||||
|  |             const u32 minor = VK_API_VERSION_MINOR(driver_version); | ||||||
|  |             const u32 patch = VK_API_VERSION_PATCH(driver_version); | ||||||
|  |             if (major == 0 && minor == 405 && patch < 286) { | ||||||
|  |                 LOG_WARNING( | ||||||
|  |                     Render_Vulkan, | ||||||
|  |                     "Intel proprietary drivers 0.405.0 until 0.405.286 have broken compute"); | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return {}; | ||||||
|  |     } | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     /// Checks if the physical device is suitable and configures the object state |     /// Checks if the physical device is suitable and configures the object state | ||||||
|     /// with all necessary info about its properties. |     /// with all necessary info about its properties. | ||||||
| @@ -672,6 +694,7 @@ private: | |||||||
|     bool is_integrated{};                   ///< Is GPU an iGPU. |     bool is_integrated{};                   ///< Is GPU an iGPU. | ||||||
|     bool is_virtual{};                      ///< Is GPU a virtual GPU. |     bool is_virtual{};                      ///< Is GPU a virtual GPU. | ||||||
|     bool is_non_gpu{};                      ///< Is SoftwareRasterizer, FPGA, non-GPU device. |     bool is_non_gpu{};                      ///< Is SoftwareRasterizer, FPGA, non-GPU device. | ||||||
|  |     bool has_broken_compute{};              ///< Compute shaders can cause crashes | ||||||
|     bool has_broken_cube_compatibility{};   ///< Has broken cube compatibility bit |     bool has_broken_cube_compatibility{};   ///< Has broken cube compatibility bit | ||||||
|     bool has_renderdoc{};                   ///< Has RenderDoc attached |     bool has_renderdoc{};                   ///< Has RenderDoc attached | ||||||
|     bool has_nsight_graphics{};             ///< Has Nsight Graphics attached |     bool has_nsight_graphics{};             ///< Has Nsight Graphics attached | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user