![]() |
link_directories(${AGS_ROOT}/lib)
CrossFireInfo CrossFireDetector::GetCrossFireInfo() { CrossFireInfo info; info.isCrossFireEnabled = false; info.gpuCount = 0; info.isAMDPlatform = initialized;
initialized = true; return true; }
bool CrossFireDetector::Initialize() { // Initialize AGS AGSReturnCode result = agsInit(&agsContext, nullptr, &gpuInfo); if (result != AGS_SUCCESS) { initialized = false; return false; } agsgetcrossfiregpucount
// Get CrossFire GPU count directly int crossfireCount = detector.GetCrossFireGPUCout();
int CrossFireDetector::GetCrossFireGPUCout() { if (!initialized) { return 0; }
if (!detector.Initialize()) { std::cout << "Failed to initialize AMD AGS. Non-AMD system?" << std::endl; return -1; } info.isCrossFireEnabled = false
int crossfireGPUs = 0; // Core function: agsGetCrossfireGPUCount AGSReturnCode result = agsGetCrossfireGPUCount(agsContext, &crossfireGPUs); if (result != AGS_SUCCESS) { std::cerr << "Failed to get CrossFire GPU count. Error code: " << result << std::endl; return 0; }
CrossFireDetector::CrossFireDetector() : agsContext(nullptr), initialized(false) { ZeroMemory(&gpuInfo, sizeof(AGSGPUInfo)); }
// Retrieve GPU names from gpuInfo for (int i = 0; i < gpuInfo.numDevices && i < AGS_MAX_GPUS; i++) { if (gpuInfo.devices[i].deviceName[0] != '\0') { info.gpuNames.push_back(std::string(gpuInfo.devices[i].deviceName)); } } info.gpuCount = 0
struct CrossFireInfo { bool isCrossFireEnabled; int gpuCount; std::vector<std::string> gpuNames; bool isAMDPlatform; std::string errorMessage; };
// CrossFireGPUDetector.cpp #include "CrossFireGPUDetector.h" #include <iostream>
// Get CrossFire GPU count using agsGetCrossfireGPUCount int GetCrossFireGPUCout();
if (!initialized) { info.errorMessage = "AGS not initialized"; return info; }