77 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package com.mojang.blaze3d;
 | |
| 
 | |
| import com.mojang.blaze3d.platform.GLX;
 | |
| import com.mojang.blaze3d.systems.GpuDevice;
 | |
| import java.lang.ref.WeakReference;
 | |
| import java.util.List;
 | |
| import java.util.Locale;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class GraphicsWorkarounds {
 | |
| 	private static final List<String> INTEL_GEN11_CORE = List.of(
 | |
| 		"i3-1000g1",
 | |
| 		"i3-1000g4",
 | |
| 		"i3-1000ng4",
 | |
| 		"i3-1005g1",
 | |
| 		"i3-l13g4",
 | |
| 		"i5-1030g4",
 | |
| 		"i5-1030g7",
 | |
| 		"i5-1030ng7",
 | |
| 		"i5-1034g1",
 | |
| 		"i5-1035g1",
 | |
| 		"i5-1035g4",
 | |
| 		"i5-1035g7",
 | |
| 		"i5-1038ng7",
 | |
| 		"i5-l16g7",
 | |
| 		"i7-1060g7",
 | |
| 		"i7-1060ng7",
 | |
| 		"i7-1065g7",
 | |
| 		"i7-1068g7",
 | |
| 		"i7-1068ng7"
 | |
| 	);
 | |
| 	private static final List<String> INTEL_GEN11_ATOM = List.of("x6211e", "x6212re", "x6214re", "x6413e", "x6414re", "x6416re", "x6425e", "x6425re", "x6427fe");
 | |
| 	private static final List<String> INTEL_GEN11_CELERON = List.of("j6412", "j6413", "n4500", "n4505", "n5095", "n5095a", "n5100", "n5105", "n6210", "n6211");
 | |
| 	private static final List<String> INTEL_GEN11_PENTIUM = List.of("6805", "j6426", "n6415", "n6000", "n6005");
 | |
| 	@Nullable
 | |
| 	private static GraphicsWorkarounds instance;
 | |
| 	private final WeakReference<GpuDevice> gpuDevice;
 | |
| 	private final boolean alwaysCreateFreshImmediateBuffer;
 | |
| 
 | |
| 	private GraphicsWorkarounds(GpuDevice device) {
 | |
| 		this.gpuDevice = new WeakReference(device);
 | |
| 		this.alwaysCreateFreshImmediateBuffer = isIntelGen11(device);
 | |
| 	}
 | |
| 
 | |
| 	public static GraphicsWorkarounds get(GpuDevice device) {
 | |
| 		GraphicsWorkarounds graphicsWorkarounds = instance;
 | |
| 		if (graphicsWorkarounds == null || graphicsWorkarounds.gpuDevice.get() != device) {
 | |
| 			instance = graphicsWorkarounds = new GraphicsWorkarounds(device);
 | |
| 		}
 | |
| 
 | |
| 		return graphicsWorkarounds;
 | |
| 	}
 | |
| 
 | |
| 	public boolean alwaysCreateFreshImmediateBuffer() {
 | |
| 		return this.alwaysCreateFreshImmediateBuffer;
 | |
| 	}
 | |
| 
 | |
| 	private static boolean isIntelGen11(GpuDevice device) {
 | |
| 		String string = GLX._getCpuInfo().toLowerCase(Locale.ROOT);
 | |
| 		String string2 = device.getRenderer().toLowerCase(Locale.ROOT);
 | |
| 		if (!string.contains("intel") || !string2.contains("intel") || string2.contains("mesa")) {
 | |
| 			return false;
 | |
| 		} else if (string2.endsWith("gen11")) {
 | |
| 			return true;
 | |
| 		} else {
 | |
| 			return !string2.contains("uhd graphics") && !string2.contains("iris")
 | |
| 				? false
 | |
| 				: string.contains("atom") && INTEL_GEN11_ATOM.stream().anyMatch(string::contains)
 | |
| 					|| string.contains("celeron") && INTEL_GEN11_CELERON.stream().anyMatch(string::contains)
 | |
| 					|| string.contains("pentium") && INTEL_GEN11_PENTIUM.stream().anyMatch(string::contains)
 | |
| 					|| INTEL_GEN11_CORE.stream().anyMatch(string::contains);
 | |
| 		}
 | |
| 	}
 | |
| }
 |