mirror of
https://gitea.shironeko-all.duckdns.org/shironeko/Hytale-F2P-2.git
synced 2026-02-26 10:41:46 -03:00
feat: auto-detect GPU for Windows and MacOS (#87)
This commit is contained in:
@@ -66,15 +66,27 @@ function setupWaylandEnvironment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function detectGpu() {
|
function detectGpu() {
|
||||||
if (process.platform !== 'linux') {
|
const platform = getOS();
|
||||||
return { mode: 'integrated', vendor: 'intel', integratedName: 'Unknown', dedicatedName: null };
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (platform === 'linux') {
|
||||||
|
return detectGpuLinux();
|
||||||
|
} else if (platform === 'windows') {
|
||||||
|
return detectGpuWindows();
|
||||||
|
} else if (platform === 'darwin') {
|
||||||
|
return detectGpuMac();
|
||||||
|
} else {
|
||||||
|
return { mode: 'integrated', vendor: 'intel', integratedName: 'Unknown', dedicatedName: null };
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('GPU detection failed, falling back to integrated:', error.message);
|
||||||
|
return { mode: 'integrated', vendor: 'intel', integratedName: 'Unknown', dedicatedName: null };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function detectGpuLinux() {
|
||||||
const output = execSync('lspci -nn | grep \'VGA\\|3D\'', { encoding: 'utf8' });
|
const output = execSync('lspci -nn | grep \'VGA\\|3D\'', { encoding: 'utf8' });
|
||||||
// console.log('GPU detection raw output:', output);
|
|
||||||
const lines = output.split('\n').filter(line => line.trim());
|
const lines = output.split('\n').filter(line => line.trim());
|
||||||
// console.log('GPU detection parsed lines:', lines);
|
|
||||||
|
|
||||||
let integratedName = null;
|
let integratedName = null;
|
||||||
let dedicatedName = null;
|
let dedicatedName = null;
|
||||||
@@ -82,10 +94,7 @@ function detectGpu() {
|
|||||||
let hasAmd = false;
|
let hasAmd = false;
|
||||||
|
|
||||||
for (const line of lines) {
|
for (const line of lines) {
|
||||||
// console.log('Checking line:', line);
|
|
||||||
if (line.includes('VGA') || line.includes('3D')) {
|
if (line.includes('VGA') || line.includes('3D')) {
|
||||||
// console.log('Line contains VGA or 3D');
|
|
||||||
|
|
||||||
const match = line.match(/\[([^\]]+)\]/g);
|
const match = line.match(/\[([^\]]+)\]/g);
|
||||||
let modelName = null;
|
let modelName = null;
|
||||||
if (match && match.length >= 2) {
|
if (match && match.length >= 2) {
|
||||||
@@ -107,7 +116,39 @@ function detectGpu() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.log('hasNvidia:', hasNvidia, 'hasAmd:', hasAmd, 'integratedName:', integratedName, 'dedicatedName:', dedicatedName);
|
if (hasNvidia) {
|
||||||
|
return { mode: 'dedicated', vendor: 'nvidia', integratedName: integratedName || 'Intel GPU', dedicatedName };
|
||||||
|
} else if (hasAmd) {
|
||||||
|
return { mode: 'dedicated', vendor: 'amd', integratedName: integratedName || 'Intel GPU', dedicatedName };
|
||||||
|
} else {
|
||||||
|
return { mode: 'integrated', vendor: 'intel', integratedName: integratedName || 'Intel GPU', dedicatedName: null };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function detectGpuWindows() {
|
||||||
|
const output = execSync('wmic path win32_VideoController get name', { encoding: 'utf8' });
|
||||||
|
const lines = output.split('\n').map(line => line.trim()).filter(line => line && line !== 'Name');
|
||||||
|
|
||||||
|
let integratedName = null;
|
||||||
|
let dedicatedName = null;
|
||||||
|
let hasNvidia = false;
|
||||||
|
let hasAmd = false;
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
const lowerLine = line.toLowerCase();
|
||||||
|
if (lowerLine.includes('nvidia')) {
|
||||||
|
hasNvidia = true;
|
||||||
|
dedicatedName = line;
|
||||||
|
console.log('Detected NVIDIA GPU:', dedicatedName);
|
||||||
|
} else if (lowerLine.includes('amd') || lowerLine.includes('radeon')) {
|
||||||
|
hasAmd = true;
|
||||||
|
dedicatedName = line;
|
||||||
|
console.log('Detected AMD GPU:', dedicatedName);
|
||||||
|
} else if (lowerLine.includes('intel')) {
|
||||||
|
integratedName = line;
|
||||||
|
console.log('Detected Intel GPU:', integratedName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (hasNvidia) {
|
if (hasNvidia) {
|
||||||
return { mode: 'dedicated', vendor: 'nvidia', integratedName: integratedName || 'Intel GPU', dedicatedName };
|
return { mode: 'dedicated', vendor: 'nvidia', integratedName: integratedName || 'Intel GPU', dedicatedName };
|
||||||
@@ -116,9 +157,45 @@ function detectGpu() {
|
|||||||
} else {
|
} else {
|
||||||
return { mode: 'integrated', vendor: 'intel', integratedName: integratedName || 'Intel GPU', dedicatedName: null };
|
return { mode: 'integrated', vendor: 'intel', integratedName: integratedName || 'Intel GPU', dedicatedName: null };
|
||||||
}
|
}
|
||||||
} catch (error) {
|
}
|
||||||
console.warn('GPU detection failed, falling back to integrated:', error.message);
|
|
||||||
return { mode: 'integrated', vendor: 'intel', integratedName: 'Unknown', dedicatedName: null };
|
function detectGpuMac() {
|
||||||
|
const output = execSync('system_profiler SPDisplaysDataType', { encoding: 'utf8' });
|
||||||
|
const lines = output.split('\n');
|
||||||
|
|
||||||
|
let integratedName = null;
|
||||||
|
let dedicatedName = null;
|
||||||
|
let hasNvidia = false;
|
||||||
|
let hasAmd = false;
|
||||||
|
|
||||||
|
for (const line of lines) {
|
||||||
|
if (line.includes('Chipset Model:')) {
|
||||||
|
const gpuName = line.split('Chipset Model:')[1].trim();
|
||||||
|
const lowerGpu = gpuName.toLowerCase();
|
||||||
|
if (lowerGpu.includes('nvidia')) {
|
||||||
|
hasNvidia = true;
|
||||||
|
dedicatedName = gpuName;
|
||||||
|
console.log('Detected NVIDIA GPU:', dedicatedName);
|
||||||
|
} else if (lowerGpu.includes('amd') || lowerGpu.includes('radeon')) {
|
||||||
|
hasAmd = true;
|
||||||
|
dedicatedName = gpuName;
|
||||||
|
console.log('Detected AMD GPU:', dedicatedName);
|
||||||
|
} else if (lowerGpu.includes('intel') || lowerGpu.includes('iris') || lowerGpu.includes('uhd')) {
|
||||||
|
integratedName = gpuName;
|
||||||
|
console.log('Detected Intel GPU:', integratedName);
|
||||||
|
} else if (!dedicatedName && !integratedName) {
|
||||||
|
// Fallback for Apple Silicon or other
|
||||||
|
integratedName = gpuName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasNvidia) {
|
||||||
|
return { mode: 'dedicated', vendor: 'nvidia', integratedName: integratedName || 'Integrated GPU', dedicatedName };
|
||||||
|
} else if (hasAmd) {
|
||||||
|
return { mode: 'dedicated', vendor: 'amd', integratedName: integratedName || 'Integrated GPU', dedicatedName };
|
||||||
|
} else {
|
||||||
|
return { mode: 'integrated', vendor: 'intel', integratedName: integratedName || 'Integrated GPU', dedicatedName: null };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user