diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h index e55dd669d..047b8e329 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h @@ -64,6 +64,7 @@ enum RGB_FUSION2_BLACKWELL_GPU_SINGLE_ZONE = 0, RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT = 1, RGB_FUSION2_BLACKWELL_GPU_WATERFORCE_LAYOUT = 2, + RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT = 3, }; class RGBFusion2BlackwellGPUController diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp index 4470689f3..41a0515a5 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp @@ -140,6 +140,23 @@ void DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers(i2c_smbus_i DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_WATERFORCE_LAYOUT); } /* DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers() */ +/*******************************************************************************************\ +* * +* DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers * +* * +* Detect GigabyteRGB Fusion2 controllers with AORUS waterforce layout on the * +* enumerated I2C busses. * +* * +* bus - pointer to i2c_smbus_interface where RGB Fusion2 device is connected * +* dev - I2C address of RGB Fusion2 device * +* * +\*******************************************************************************************/ + +void DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +{ + DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT); +} /* DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers() */ + /*-----------------------------------------*\ | Nvidia GPUs | \*-----------------------------------------*/ @@ -151,9 +168,10 @@ REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Eagle OC", REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Eagle OC ICE", DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070TI_EAGLE_OC_ICE_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Aero OC", DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070TI_AERO_OC_16G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070TI_GAMING_OC_16G_SUB_DEV, 0x75); -REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5080 Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5080_GAMING_OC_16G_SUB_DEV, 0x75); -REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5080 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5080_XTREME_WATERFORCE_16G_SUB_DEV, 0x75); -REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_GAMING_OC_32G_SUB_DEV, 0x75); +REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5080 Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5080_GAMING_OC_16G_SUB_DEV, 0x75); +REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5080 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellAorusWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5080_XTREME_WATERFORCE_16G_SUB_DEV, 0x75); +REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5080 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5080_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5080_XTREME_WATERFORCE_16G_SUB_DEV, 0x75); +REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_GAMING_OC_32G_SUB_DEV, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV1, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5090 XTREME WATERFORCE", DetectGigabyteRGBFusion2BlackwellWaterforceLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5090_XTREME_WATERFORCE_32G_SUB_DEV2, 0x75); REGISTER_I2C_PCI_DETECTOR("Gigabyte AORUS GeForce RTX 5090 MASTER", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5090_DEV, GIGABYTE_SUB_VEN, GIGABYTE_AORUS_RTX5090_MASTER_32G_SUB_DEV, 0x75); diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp b/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp index a27b8970a..b1d8b7ba3 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp @@ -106,7 +106,7 @@ RGBController_RGBFusion2BlackwellGPU::RGBController_RGBFusion2BlackwellGPU(RGBFu SpectrumCycle.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; modes.push_back(SpectrumCycle); - if(led_layout == RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT || led_layout == RGB_FUSION2_BLACKWELL_GPU_WATERFORCE_LAYOUT) + if(led_layout == RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT || led_layout == RGB_FUSION2_BLACKWELL_GPU_WATERFORCE_LAYOUT || led_layout == RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT) { mode Wave; Wave.name = "Wave"; @@ -277,6 +277,47 @@ void RGBController_RGBFusion2BlackwellGPU::SetupZones() zones.push_back(new_zone); } } + else if(gpu_layout == RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT) + { + /*---------------------------------------------------------*\ + | Skip zone 0 - it doesn't exist on this card variant | + | Only add zones 1, 2, 3 to the UI | + \*---------------------------------------------------------*/ + for(uint8_t zone_idx = 1; zone_idx < 4; zone_idx++) + { + zone new_zone; + led new_led; + + switch(zone_idx) + { + case 1: + new_zone.name = "Bottom Logo"; + break; + + case 2: + new_zone.name = "Radiator Fans"; + break; + + case 3: + new_zone.name = "Top and Side Logos"; + break; + } + + new_zone.type = ZONE_TYPE_SINGLE; + new_zone.leds_min = 1; + new_zone.leds_max = 1; + new_zone.leds_count = 1; + new_zone.matrix_map = NULL; + + new_led.name = new_zone.name; + + /*---------------------------------------------------------*\ + | Push the zone and LED on to device vectors | + \*---------------------------------------------------------*/ + leds.push_back(new_led); + zones.push_back(new_zone); + } + } SetupColors(); } @@ -317,6 +358,10 @@ void RGBController_RGBFusion2BlackwellGPU::DeviceUpdateLEDs() gpu_zones = 3; break; + case RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT: + gpu_zones = 6; + break; + default: LOG_TRACE("[%s] Invalid GPU layout (%d) when updating LEDs.", name.c_str(), gpu_layout); return; // should not happen @@ -324,13 +369,32 @@ void RGBController_RGBFusion2BlackwellGPU::DeviceUpdateLEDs() for(uint8_t zone_idx = 0; zone_idx < gpu_zones; zone_idx++) { - if(zone_idx >= zones.size()) + /*---------------------------------------------------------*\ + | For AORUS WATERFORCE layout, map UI zones to hardware | + | UI zone 0 -> HW zone 1 (Bottom Logo) | + | UI zone 1 -> HW zone 2 (Radiator Fans) | + | UI zone 2 -> HW zone 3 (Top and Side Logos) | + | Skip HW zone 0 (doesn't exist on this card) | + \*---------------------------------------------------------*/ + uint8_t hardware_zone_idx = zone_idx; + uint8_t ui_zone_idx = zone_idx; + + if(gpu_layout == RGB_FUSION2_BLACKWELL_GPU_AORUS_WATERFORCE_LAYOUT) { - zone_config.colors[zone_idx] = colors.back(); + if(zone_idx == 0) + { + continue; // Skip hardware zone 0 + } + ui_zone_idx = zone_idx - 1; // Map: HW zone 1->UI zone 0, HW zone 2->UI zone 1, HW zone 3->UI zone 2 + } + + if(ui_zone_idx >= zones.size()) + { + zone_config.colors[hardware_zone_idx] = colors.back(); } else { - zone_config.colors[zone_idx] = colors[zone_idx]; + zone_config.colors[hardware_zone_idx] = colors[ui_zone_idx]; } for(uint8_t i = 0; i < zone_config.numberOfColors; i++) // specific for MODE_COLORS_MODE_SPECIFIC @@ -338,7 +402,7 @@ void RGBController_RGBFusion2BlackwellGPU::DeviceUpdateLEDs() zone_config.colors[i] = modes[active_mode].colors[i]; } - controller->SetZone(zone_idx, modes[active_mode].value, zone_config); + controller->SetZone(hardware_zone_idx, modes[active_mode].value, zone_config); } } diff --git a/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp b/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp index 5618a9e38..25847cf21 100644 --- a/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp +++ b/Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect_Windows_Linux.cpp @@ -76,8 +76,8 @@ static const nv_gpu_pci_device device_list[] = {NVIDIA_VEN, NVIDIA_RTX4080S_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX4080S_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 4080 SUPER FE" }, {NVIDIA_VEN, NVIDIA_RTX4090_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX4090_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 4090 FE" }, {NVIDIA_VEN, NVIDIA_RTX4090_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX4090_FE_SUB_DEV2, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 4090 FE" }, - {NVIDIA_VEN, NVIDIA_RTX5080_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX5080_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 5080 FE" }, - {NVIDIA_VEN, NVIDIA_RTX5090_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX5090_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 5090 FE" }, + {NVIDIA_VEN, NVIDIA_RTX5080_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX5080_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 5080 FE" }, + {NVIDIA_VEN, NVIDIA_RTX5090_DEV, NVIDIA_SUB_VEN, NVIDIA_RTX5090_FE_SUB_DEV, NVIDIA_ILLUMINATION_V1, TREATS_RGBW_AS_RGBW, "NVIDIA GeForce RTX 5090 FE" }, }; void DetectNVIDIAIllumGPUs() diff --git a/pci_ids/pci_ids.h b/pci_ids/pci_ids.h index af0cb555a..b3653e9a2 100644 --- a/pci_ids/pci_ids.h +++ b/pci_ids/pci_ids.h @@ -700,6 +700,7 @@ #define GIGABYTE_RTX5070TI_AERO_OC_16G_SUB_DEV 0x417F #define GIGABYTE_RTX5070TI_GAMING_OC_16G_SUB_DEV 0x4181 #define GIGABYTE_RTX5080_GAMING_OC_16G_SUB_DEV 0x4176 +#define GIGABYTE_AORUS_RTX5080_XTREME_WATERFORCE_16G_SUB_DEV 0x418A #define GIGABYTE_RTX5080_XTREME_WATERFORCE_16G_SUB_DEV 0x418B #define GIGABYTE_RTX5090_GAMING_OC_32G_SUB_DEV 0x416F #define GIGABYTE_AORUS_RTX5090_MASTER_32G_SUB_DEV 0x416E