@ -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