From 14d0388a6537ded1be416188560296ad2cfdbb58 Mon Sep 17 00:00:00 2001 From: Paulo Date: Thu, 8 May 2025 17:10:03 +0000 Subject: [PATCH] Update Gigabyte Blackwell controller for multizone gpus --- ...gabyteRGBFusion2BlackwellGPUController.cpp | 72 ++++----- ...GigabyteRGBFusion2BlackwellGPUController.h | 15 +- ...RGBFusion2BlackwellGPUControllerDetect.cpp | 59 +++++-- ...igabyteRGBFusion2BlackwellGPUDefinitions.h | 2 +- ...troller_GigabyteRGBFusion2BlackwellGPU.cpp | 148 +++++++++++++++--- ...ontroller_GigabyteRGBFusion2BlackwellGPU.h | 3 +- pci_ids/pci_ids.h | 4 + 7 files changed, 224 insertions(+), 79 deletions(-) diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.cpp b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.cpp index 2aae7027..6e5048c5 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.cpp +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.cpp @@ -42,59 +42,41 @@ void RGBFusion2BlackwellGPUController::SaveConfig() bus->i2c_write_block(dev, sizeof(data_pkt), data_pkt); } -void RGBFusion2BlackwellGPUController::SetMode(uint8_t zone, uint8_t mode, fusion2_config zone_config, uint8_t mystery_flag) +void RGBFusion2BlackwellGPUController::SetMode(uint8_t zone, uint8_t mode, fusion2_config zone_config) { - if (zone < RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES) - { + if(zone < RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES) this->zone_color[zone] = zone_config.colors[0]; + + /************************************************************************************\ + * * + * Packet (total size = 64 bytes) * + * MODE SPD BRT R G B 0 ZONE SZ0-8 * + * 0x12 0x01 0x08 0x06 0x0A 0xFF 0xFF 0x00 0x00 0x00 0x08 [R] [G] [B] [R] [G] [B] ... * + * * + * SZ is the amount of colors that will be sent in the format of 3 bytes RGB * + * * + \************************************************************************************/ + uint8_t zone_pkt[64] = {RGB_FUSION2_BLACKWELL_GPU_REG_COLOR, 0x01, mode, zone_config.speed, zone_config.brightness, RGBGetRValue(this->zone_color[zone]), RGBGetGValue(this->zone_color[zone]), RGBGetBValue(this->zone_color[zone]), 0x00, zone, zone_config.numberOfColors, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + + if(zone_config.numberOfColors > 0) + { + int currentPos = 12; + for(uint8_t i = 0; i < zone_config.numberOfColors; i++) + { + zone_pkt[currentPos + 0] = RGBGetRValue(zone_config.colors[i]); + zone_pkt[currentPos + 1] = RGBGetGValue(zone_config.colors[i]); + zone_pkt[currentPos + 2] = RGBGetBValue(zone_config.colors[i]); + currentPos += 3; + } } - uint8_t zone_pkt[64] = {RGB_FUSION2_BLACKWELL_GPU_REG_COLOR, mystery_flag, mode, zone_config.speed, zone_config.brightness, RGBGetRValue(this->zone_color[zone]), RGBGetGValue(this->zone_color[zone]), RGBGetBValue(this->zone_color[zone]), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; bus->i2c_write_block(dev, sizeof(zone_pkt), zone_pkt); } void RGBFusion2BlackwellGPUController::SetZone(uint8_t zone, uint8_t mode, fusion2_config zone_config) { - std::string mode_name; - uint8_t mystery_flag = 0x01; + if(mode == RGB_FUSION2_BLACKWELL_GPU_MODE_BREATHING) + zone_config.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; - switch(mode) - { - case RGB_FUSION2_BLACKWELL_GPU_MODE_STATIC: - { - SetMode(zone, mode, zone_config, mystery_flag); - } - break; - - case RGB_FUSION2_BLACKWELL_GPU_MODE_BREATHING: - { - zone_config.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; - SetMode(zone, mode, zone_config, mystery_flag); - } - break; - - case RGB_FUSION2_BLACKWELL_GPU_MODE_FLASHING: - { - SetMode(zone, mode, zone_config, mystery_flag); - } - break; - - case RGB_FUSION2_BLACKWELL_GPU_MODE_DUAL_FLASHING: - { - SetMode(zone, mode, zone_config, mystery_flag); - } - break; - - case RGB_FUSION2_BLACKWELL_GPU_MODE_COLOR_CYCLE: - { - SetMode(zone, mode, zone_config, mystery_flag); - } - break; - - default: - { - LOG_TRACE("[%s] Mode %02d not found", "fusion2 blackwell gpu", mode); - } - break; - } + SetMode(zone, mode, zone_config); } diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h index 837e8454..f3a82271 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUController.h @@ -37,7 +37,11 @@ enum RGB_FUSION2_BLACKWELL_GPU_MODE_BREATHING = 0x02, RGB_FUSION2_BLACKWELL_GPU_MODE_FLASHING = 0x03, RGB_FUSION2_BLACKWELL_GPU_MODE_DUAL_FLASHING = 0x04, - RGB_FUSION2_BLACKWELL_GPU_MODE_COLOR_CYCLE = 0x05 + RGB_FUSION2_BLACKWELL_GPU_MODE_COLOR_CYCLE = 0x05, + RGB_FUSION2_BLACKWELL_GPU_MODE_WAVE = 0x06, //not available to Eagle/Aero + RGB_FUSION2_BLACKWELL_GPU_MODE_GRADIENT = 0x07, //not available to Eagle/Aero + RGB_FUSION2_BLACKWELL_GPU_MODE_COLOR_SHIFT = 0x08, //not available to Eagle/Aero + RGB_FUSION2_BLACKWELL_GPU_MODE_DAZZLE = 0x0A, //not available to Eagle/Aero }; enum @@ -53,6 +57,12 @@ enum RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX = 0x0A }; +enum +{ + RGB_FUSION2_BLACKWELL_GPU_SINGLE_ZONE = 0, + RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT = 1, +}; + class RGBFusion2BlackwellGPUController { public: @@ -65,8 +75,7 @@ public: void SaveConfig(); void SetZone(uint8_t zone, uint8_t mode, fusion2_config zone_config); - void SetMode(uint8_t zone, uint8_t mode, fusion2_config zone_config, uint8_t mystery_flag); - + void SetMode(uint8_t zone, uint8_t mode, fusion2_config zone_config); private: i2c_smbus_interface* bus; rgb_fusion_dev_id dev; diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp index 455712bf..f39fc39a 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUControllerDetect.cpp @@ -43,7 +43,9 @@ bool TestForGigabyteRGBFusion2BlackwellGPUController(i2c_smbus_interface* bus, u res = bus->i2c_read_block(address, &pktsz, data_readpkt); //What we have seen returned so far... - //GeForce RTX 5070 Ti EAGLE OC 16G 0x01 0x01 0x01 0x00 + //GeForce RTX 5070 Ti Eagle OC 16G 0x01 0x01 0x01 0x00 + //GeForce RTX 5070 Ti Gaming OC 16G 0x01 0x01 0x01 0x00 + //GeForce RTX 5070 Gaming OC 12G 0x01 0x01 0x01 0x00 if(res < 0 || data_readpkt[0] != 0x01 || data_readpkt[1] != 0x01 || data_readpkt[2] != 0x01) { @@ -66,34 +68,71 @@ bool TestForGigabyteRGBFusion2BlackwellGPUController(i2c_smbus_interface* bus, u /*******************************************************************************************\ * * -* DetectRGBFusion2BlackwellGPUControllers * +* DetectGigabyteRGBFusion2BlackwellGPUControllers * * * -* Detect GigabyteRGB Fusion2 controllers on the enumerated I2C busses. * +* Detect GigabyteRGB Fusion2 controllers with a specified 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 DetectGigabyteRGBFusion2BlackwellGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +void DetectGigabyteRGBFusion2BlackwellGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name, uint8_t led_zones) { // Check for RGB Fusion2 controller if(TestForGigabyteRGBFusion2BlackwellGPUController(bus, i2c_addr)) { - RGBFusion2BlackwellGPUController* controller = new RGBFusion2BlackwellGPUController(bus, i2c_addr); - RGBController_RGBFusion2BlackwellGPU* rgb_controller = new RGBController_RGBFusion2BlackwellGPU(controller); - rgb_controller->name = name; + RGBFusion2BlackwellGPUController* controller = new RGBFusion2BlackwellGPUController(bus, i2c_addr); + RGBController_RGBFusion2BlackwellGPU* rgb_controller = new RGBController_RGBFusion2BlackwellGPU(controller, led_zones); + rgb_controller->name = name; ResourceManager::get()->RegisterRGBController(rgb_controller); } -} /* DetectGigabyteRGBFusion2BlackwellGPUControllers() */ +} /* DetectGigabyteRGBFusion2BlackwellMultiZoneGPUControllers() */ + +/*******************************************************************************************\ +* * +* DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers * +* * +* Detect GigabyteRGB Fusion2 controllers with one zone 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 DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +{ + DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_SINGLE_ZONE); +} /* DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers() */ + +/*******************************************************************************************\ +* * +* DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers * +* * +* Detect GigabyteRGB Fusion2 controllers with gaming layouts 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 DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers(i2c_smbus_interface* bus, uint8_t i2c_addr, const std::string& name) +{ + DetectGigabyteRGBFusion2BlackwellGPUControllers(bus, i2c_addr, name, RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT); +} /* DetectGigabyteRGBFusion2BlackwellMultiZoneGPUControllers() */ /*-----------------------------------------*\ | Nvidia GPUs | \*-----------------------------------------*/ -REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Eagle OC", DetectGigabyteRGBFusion2BlackwellGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070TI_EAGLE_OC_16G_SUB_DEV, 0x75); -REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Aero OC", DetectGigabyteRGBFusion2BlackwellGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070TI_AERO_OC_16G_SUB_DEV, 0x75); +REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Gaming OC", DetectGigabyteRGBFusion2BlackwellGamingLayoutGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070_GAMING_OC_16G_SUB_DEV, 0x75); +REGISTER_I2C_PCI_DETECTOR("Gigabyte GeForce RTX 5070 Ti Eagle OC", DetectGigabyteRGBFusion2BlackwellSingleZoneGPUControllers, NVIDIA_VEN, NVIDIA_RTX5070TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_RTX5070TI_EAGLE_OC_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); /*-----------------------------------------*\ | AMD GPUs | diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUDefinitions.h b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUDefinitions.h index 39475634..d0cac908 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUDefinitions.h +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/GigabyteRGBFusion2BlackwellGPUDefinitions.h @@ -9,4 +9,4 @@ #pragma once -#define RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES 1 +#define RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES 6 diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp b/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp index 29367921..5faf8dec 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.cpp @@ -22,10 +22,12 @@ @comment \*-------------------------------------------------------------------*/ -RGBController_RGBFusion2BlackwellGPU::RGBController_RGBFusion2BlackwellGPU(RGBFusion2BlackwellGPUController* controller_ptr) +RGBController_RGBFusion2BlackwellGPU::RGBController_RGBFusion2BlackwellGPU(RGBFusion2BlackwellGPUController* controller_ptr, uint8_t led_layout) { controller = controller_ptr; + gpu_layout = led_layout; + name = "Gigabyte GPU"; vendor = "Gigabyte"; description = "Gigabyte RGB Fusion 2 Blackwell GPU"; @@ -85,7 +87,7 @@ RGBController_RGBFusion2BlackwellGPU::RGBController_RGBFusion2BlackwellGPU(RGBFu mode SpectrumCycle; SpectrumCycle.name = "Color Cycle"; SpectrumCycle.value = RGB_FUSION2_BLACKWELL_GPU_MODE_COLOR_CYCLE; - SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS; + SpectrumCycle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; SpectrumCycle.speed_min = RGB_FUSION2_BLACKWELL_GPU_SPEED_SLOWEST; SpectrumCycle.speed_max = RGB_FUSION2_BLACKWELL_GPU_SPEED_FASTEST; SpectrumCycle.speed = RGB_FUSION2_BLACKWELL_GPU_SPEED_NORMAL; @@ -95,6 +97,69 @@ 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) + { + mode Wave; + Wave.name = "Wave"; + Wave.value = RGB_FUSION2_BLACKWELL_GPU_MODE_WAVE; + Wave.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + Wave.speed_min = RGB_FUSION2_BLACKWELL_GPU_SPEED_SLOWEST; + Wave.speed_max = RGB_FUSION2_BLACKWELL_GPU_SPEED_FASTEST; + Wave.speed = RGB_FUSION2_BLACKWELL_GPU_SPEED_NORMAL; + Wave.color_mode = MODE_COLORS_NONE; + Wave.brightness_min = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MIN; + Wave.brightness_max = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + Wave.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + modes.push_back(Wave); + + mode Gradient; + Gradient.name = "Gradient"; + Gradient.value = RGB_FUSION2_BLACKWELL_GPU_MODE_GRADIENT; + Gradient.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + Gradient.speed_min = RGB_FUSION2_BLACKWELL_GPU_SPEED_SLOWEST; + Gradient.speed_max = RGB_FUSION2_BLACKWELL_GPU_SPEED_FASTEST; + Gradient.speed = RGB_FUSION2_BLACKWELL_GPU_SPEED_NORMAL; + Gradient.color_mode = MODE_COLORS_PER_LED; + Gradient.brightness_min = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MIN; + Gradient.brightness_max = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + Gradient.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + modes.push_back(Gradient); + + mode ColorShift; + ColorShift.name = "Color Shift"; + ColorShift.value = RGB_FUSION2_BLACKWELL_GPU_MODE_COLOR_SHIFT; + ColorShift.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + ColorShift.speed_min = RGB_FUSION2_BLACKWELL_GPU_SPEED_SLOWEST; + ColorShift.speed_max = RGB_FUSION2_BLACKWELL_GPU_SPEED_FASTEST; + ColorShift.speed = RGB_FUSION2_BLACKWELL_GPU_SPEED_NORMAL; + ColorShift.color_mode = MODE_COLORS_MODE_SPECIFIC; + ColorShift.colors_min = 1; + ColorShift.colors_max = 8; + ColorShift.colors.resize(8); + ColorShift.brightness_min = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MIN; + ColorShift.brightness_max = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + ColorShift.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + modes.push_back(ColorShift); + + /* Disabled Dazzle as it seems to only execute once, would need to loop it maybe? + * + mode Dazzle; + Dazzle.name = "Dazzle"; + Dazzle.value = RGB_FUSION2_BLACKWELL_GPU_MODE_DAZZLE; + Dazzle.flags = MODE_FLAG_HAS_SPEED | MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE; + Dazzle.speed_min = RGB_FUSION2_BLACKWELL_GPU_SPEED_SLOWEST; + Dazzle.speed_max = RGB_FUSION2_BLACKWELL_GPU_SPEED_FASTEST; + Dazzle.speed = RGB_FUSION2_BLACKWELL_GPU_SPEED_NORMAL; + Dazzle.color_mode = MODE_COLORS_MODE_SPECIFIC; + Dazzle.colors_min = 1; + Dazzle.colors_max = 8; + Dazzle.colors.resize(8); + Dazzle.brightness_min = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MIN; + Dazzle.brightness_max = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + Dazzle.brightness = RGB_FUSION2_BLACKWELL_GPU_BRIGHTNESS_MAX; + modes.push_back(Dazzle);*/ + } + SetupZones(); } @@ -110,25 +175,53 @@ void RGBController_RGBFusion2BlackwellGPU::SetupZones() | LED's in the zone and does not allow per LED control. | \*---------------------------------------------------------*/ - for(uint8_t zone_idx = 0; zone_idx < RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES; zone_idx++) + if(gpu_layout == RGB_FUSION2_BLACKWELL_GPU_SINGLE_ZONE) { zone new_zone; led new_led; - new_zone.name = "GPU zone " + std::to_string(zone_idx + 1); - 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_zone.name = "Side"; + 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; + 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); } + else if(gpu_layout == RGB_FUSION2_BLACKWELL_GPU_GAMING_LAYOUT) + { + for(uint8_t zone_idx = 0; zone_idx < 4; zone_idx++) + { + zone new_zone; + led new_led; + + switch(zone_idx) + { + case 0: new_zone.name = "Right fan"; break; + case 1: new_zone.name = "Left fan"; break; + case 2: new_zone.name = "Center fan"; break; + case 3: new_zone.name = "Side"; 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(); } @@ -147,30 +240,47 @@ void RGBController_RGBFusion2BlackwellGPU::DeviceUpdateLEDs() zone_config.brightness = modes[active_mode].brightness; zone_config.speed = modes[active_mode].speed; zone_config.direction = modes[active_mode].direction; - zone_config.numberOfColors = (uint8_t)modes[active_mode].colors.size(); + zone_config.numberOfColors = 0; + if(modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) + zone_config.numberOfColors = (uint8_t)modes[active_mode].colors.size(); - for(uint8_t zone_idx = 0; zone_idx < RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES; zone_idx++) + if(zones.size() == 1) { - zone_config.colors[0] = colors[zone_idx]; + zone_config.colors[0] = colors[0]; - if (modes[active_mode].color_mode == MODE_COLORS_MODE_SPECIFIC) + for(uint8_t i = 0; i < zone_config.numberOfColors; i++) { - for (uint8_t i = 0; i < zone_config.numberOfColors; i++) + zone_config.colors[i] = modes[active_mode].colors[i]; + } + + controller->SetZone(0, modes[active_mode].value, zone_config); + } + else + { + // replicating GCC that sends up to 0x05 even when there is less zones + for(uint8_t zone_idx = 0; zone_idx < RGB_FUSION_2_BLACKWELL_GPU_NUMBER_OF_ZONES; zone_idx++) + { + if(zone_idx >= zones.size()) + zone_config.colors[0] = colors.back(); + else + zone_config.colors[0] = colors[zone_idx]; + + for(uint8_t i = 0; i < zone_config.numberOfColors; i++) { zone_config.colors[i] = modes[active_mode].colors[i]; } - } - controller->SetZone(zone_idx, modes[active_mode].value, zone_config); + controller->SetZone(zone_idx, modes[active_mode].value, zone_config); + } } } -void RGBController_RGBFusion2BlackwellGPU::UpdateZoneLEDs(int zone) +void RGBController_RGBFusion2BlackwellGPU::UpdateZoneLEDs(int /*zone*/) { DeviceUpdateLEDs(); } -void RGBController_RGBFusion2BlackwellGPU::UpdateSingleLED(int led) +void RGBController_RGBFusion2BlackwellGPU::UpdateSingleLED(int /*led*/) { DeviceUpdateLEDs(); } diff --git a/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.h b/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.h index 48c0df49..edf3e08f 100644 --- a/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.h +++ b/Controllers/GigabyteRGBFusion2BlackwellGPUController/RGBController_GigabyteRGBFusion2BlackwellGPU.h @@ -15,7 +15,7 @@ class RGBController_RGBFusion2BlackwellGPU : public RGBController { public: - RGBController_RGBFusion2BlackwellGPU(RGBFusion2BlackwellGPUController* controller_ptr); + RGBController_RGBFusion2BlackwellGPU(RGBFusion2BlackwellGPUController* controller_ptr, uint8_t led_layout); ~RGBController_RGBFusion2BlackwellGPU(); void SetupZones(); @@ -31,4 +31,5 @@ public: private: RGBFusion2BlackwellGPUController* controller; + uint8_t gpu_layout; }; diff --git a/pci_ids/pci_ids.h b/pci_ids/pci_ids.h index ccba35c2..00254706 100644 --- a/pci_ids/pci_ids.h +++ b/pci_ids/pci_ids.h @@ -119,6 +119,7 @@ #define NVIDIA_RTX4080_DEV 0x2704 #define NVIDIA_RTX4080S_DEV 0x2702 #define NVIDIA_RTX4090_DEV 0x2684 +#define NVIDIA_RTX5070_DEV 0x2F04 #define NVIDIA_RTX5070TI_DEV 0x2C05 #define NVIDIA_RTX5080_DEV 0x2C02 #define NVIDIA_RTX5090_DEV 0x2B85 @@ -668,8 +669,11 @@ #define GIGABYTE_RTX4090_GAMING_OC_24G_SUB_DEV 0x40BF #define GIGABYTE_AORUS_RTX4090_MASTER_24G_SUB_DEV 0x40C0 #define GIGABYTE_RX7800XT_GAMING_OC_16G_SUB_DEV 0x2413 +#define GIGABYTE_RTX5070_GAMING_OC_16G_SUB_DEV 0x4174 #define GIGABYTE_RTX5070TI_EAGLE_OC_16G_SUB_DEV 0x4180 #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_RTX5090_MASTER_32G_SUB_DEV 0x416E #define GIGABYTE_AORUS_RTX5090_MASTER_ICE_32G_SUB_DEV 0x4199 #define GIGABYTE_AORUS_RTX5090D_MASTER_32G_SUB_DEV 0x4188