mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 14:56:40 +08:00 
			
		
		
		
	Merge pull request #11216 from lat9nq/no-mesa-astc
gl_device: Detect Mesa to disable their ASTC
This commit is contained in:
		
						commit
						85e3575496
					
				| @ -106,6 +106,43 @@ bool IsASTCSupported() { | |||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static bool HasSlowSoftwareAstc(std::string_view vendor_name, std::string_view renderer) { | ||||||
|  | // ifdef for Unix reduces string comparisons for non-Windows drivers, and Intel
 | ||||||
|  | #ifdef YUZU_UNIX | ||||||
|  |     // Sorted vaguely by how likely a vendor is to appear
 | ||||||
|  |     if (vendor_name == "AMD") { | ||||||
|  |         // RadeonSI
 | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     if (vendor_name == "Intel") { | ||||||
|  |         // Must be inside YUZU_UNIX ifdef as the Windows driver uses the same vendor string
 | ||||||
|  |         // iris, crocus
 | ||||||
|  |         const bool is_intel_dg = (renderer.find("DG") != std::string_view::npos); | ||||||
|  |         return is_intel_dg; | ||||||
|  |     } | ||||||
|  |     if (vendor_name == "nouveau") { | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     if (vendor_name == "X.Org") { | ||||||
|  |         // R600
 | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  |     if (vendor_name == "Collabora Ltd") { | ||||||
|  |         // Zink
 | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     if (vendor_name == "Microsoft Corporation") { | ||||||
|  |         // d3d12
 | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     if (vendor_name == "Mesa/X.org") { | ||||||
|  |         // llvmpipe, softpipe, virgl
 | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |     return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| [[nodiscard]] bool IsDebugToolAttached(std::span<const std::string_view> extensions) { | [[nodiscard]] bool IsDebugToolAttached(std::span<const std::string_view> extensions) { | ||||||
|     const bool nsight = std::getenv("NVTX_INJECTION64_PATH") || std::getenv("NSIGHT_LAUNCHED"); |     const bool nsight = std::getenv("NVTX_INJECTION64_PATH") || std::getenv("NSIGHT_LAUNCHED"); | ||||||
|     return nsight || HasExtension(extensions, "GL_EXT_debug_tool") || |     return nsight || HasExtension(extensions, "GL_EXT_debug_tool") || | ||||||
| @ -120,12 +157,16 @@ Device::Device(Core::Frontend::EmuWindow& emu_window) { | |||||||
|     } |     } | ||||||
|     vendor_name = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); |     vendor_name = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); | ||||||
|     const std::string_view version = reinterpret_cast<const char*>(glGetString(GL_VERSION)); |     const std::string_view version = reinterpret_cast<const char*>(glGetString(GL_VERSION)); | ||||||
|  |     const std::string_view renderer = reinterpret_cast<const char*>(glGetString(GL_RENDERER)); | ||||||
|     const std::vector extensions = GetExtensions(); |     const std::vector extensions = GetExtensions(); | ||||||
| 
 | 
 | ||||||
|     const bool is_nvidia = vendor_name == "NVIDIA Corporation"; |     const bool is_nvidia = vendor_name == "NVIDIA Corporation"; | ||||||
|     const bool is_amd = vendor_name == "ATI Technologies Inc."; |     const bool is_amd = vendor_name == "ATI Technologies Inc."; | ||||||
|     const bool is_intel = vendor_name == "Intel"; |     const bool is_intel = vendor_name == "Intel"; | ||||||
| 
 | 
 | ||||||
|  |     const bool has_slow_software_astc = | ||||||
|  |         !is_nvidia && !is_amd && HasSlowSoftwareAstc(vendor_name, renderer); | ||||||
|  | 
 | ||||||
| #ifdef __unix__ | #ifdef __unix__ | ||||||
|     constexpr bool is_linux = true; |     constexpr bool is_linux = true; | ||||||
| #else | #else | ||||||
| @ -152,7 +193,7 @@ Device::Device(Core::Frontend::EmuWindow& emu_window) { | |||||||
|     has_vertex_viewport_layer = GLAD_GL_ARB_shader_viewport_layer_array; |     has_vertex_viewport_layer = GLAD_GL_ARB_shader_viewport_layer_array; | ||||||
|     has_image_load_formatted = HasExtension(extensions, "GL_EXT_shader_image_load_formatted"); |     has_image_load_formatted = HasExtension(extensions, "GL_EXT_shader_image_load_formatted"); | ||||||
|     has_texture_shadow_lod = HasExtension(extensions, "GL_EXT_texture_shadow_lod"); |     has_texture_shadow_lod = HasExtension(extensions, "GL_EXT_texture_shadow_lod"); | ||||||
|     has_astc = IsASTCSupported(); |     has_astc = !has_slow_software_astc && IsASTCSupported(); | ||||||
|     has_variable_aoffi = TestVariableAoffi(); |     has_variable_aoffi = TestVariableAoffi(); | ||||||
|     has_component_indexing_bug = is_amd; |     has_component_indexing_bug = is_amd; | ||||||
|     has_precise_bug = TestPreciseBug(); |     has_precise_bug = TestPreciseBug(); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user