@@ -59,26 +59,39 @@ RGBController_PNYARGBEpicXGPU::~RGBController_PNYARGBEpicXGPU()
5959void RGBController_PNYARGBEpicXGPU::SetupZones ()
6060{
6161 /* -----------------------------------------------------*\
62- | The logo zone has 4 LEDs, but they are part of the |
63- | FRONT register zone |
62+ | The side logo zone has 4 LEDs, but they are part of |
63+ | the FRONT register zone |
64+ | |
65+ | This card has two variants, large and small. Large |
66+ | is used on the 5080 and 5090 and has an extra logo |
67+ | zone on the rear of the card as well as additional |
68+ | LEDs in the arrow zone. The small variant is used on |
69+ | the 5070 Ti and lower cards. |
6470 \*-----------------------------------------------------*/
65- zone logo;
66- logo.name = " Logo" ;
67- logo.type = ZONE_TYPE_LINEAR;
68- logo.leds_min = 4 ;
69- logo.leds_max = 4 ;
70- logo.leds_count = 4 ;
71- logo.matrix_map = NULL ;
72- zones.push_back (logo);
73-
74- for (std::size_t led_idx = 0 ; led_idx < logo.leds_count ; led_idx++)
71+ zone side_logo;
72+
73+ if (controller->IsLargeVariant ())
74+ {
75+ side_logo.name = " Side Logo" ;
76+ }
77+ else
7578 {
76- led logo_led;
79+ side_logo.name = " Logo" ;
80+ }
7781
78- logo_led.name = " Logo LED " + std::to_string (led_idx);
79- logo_led.value = PNY_GPU_REG_ZONE_FRONT;
82+ side_logo.type = ZONE_TYPE_LINEAR;
83+ side_logo.leds_min = 4 ;
84+ side_logo.leds_max = 4 ;
85+ side_logo.leds_count = 4 ;
86+ side_logo.matrix_map = NULL ;
87+ zones.push_back (side_logo);
8088
81- leds.push_back (logo_led);
89+ for (std::size_t led_idx = 0 ; led_idx < side_logo.leds_count ; led_idx++)
90+ {
91+ led side_logo_led;
92+ side_logo_led.name = side_logo.name + " LED " + std::to_string (led_idx);
93+ side_logo_led.value = PNY_GPU_REG_ZONE_FRONT;
94+ leds.push_back (side_logo_led);
8295 zone_led_idx.push_back ((unsigned char )(led_idx + 20 ));
8396 }
8497
@@ -98,37 +111,67 @@ void RGBController_PNYARGBEpicXGPU::SetupZones()
98111 for (std::size_t led_idx = 0 ; led_idx < front.leds_count ; led_idx++)
99112 {
100113 led front_led;
101-
102114 front_led.name = " Front LED " + std::to_string (led_idx);
103115 front_led.value = PNY_GPU_REG_ZONE_FRONT;
104-
105116 leds.push_back (front_led);
106117 zone_led_idx.push_back ((unsigned char )led_idx);
107118 }
108119
109120 /* -----------------------------------------------------*\
110- | The arrow zone has 17 LEDs |
121+ | The arrow zone has 17 LEDs on the small variant, 19 |
122+ | LEDs on the large variant |
111123 \*-----------------------------------------------------*/
124+ unsigned int arrow_led_count;
125+
126+ if (controller->IsLargeVariant ())
127+ {
128+ arrow_led_count = 19 ;
129+ }
130+ else
131+ {
132+ arrow_led_count = 17 ;
133+ }
134+
112135 zone arrow;
113136 arrow.name = " Arrow" ;
114137 arrow.type = ZONE_TYPE_LINEAR;
115- arrow.leds_min = 17 ;
116- arrow.leds_max = 17 ;
117- arrow.leds_count = 17 ;
138+ arrow.leds_min = arrow_led_count ;
139+ arrow.leds_max = arrow_led_count ;
140+ arrow.leds_count = arrow_led_count ;
118141 arrow.matrix_map = NULL ;
119142 zones.push_back (arrow);
120143
121144 for (std::size_t led_idx = 0 ; led_idx < arrow.leds_count ; led_idx++)
122145 {
123146 led arrow_led;
124-
125147 arrow_led.name = " Arrow LED " + std::to_string (led_idx);
126148 arrow_led.value = PNY_GPU_REG_ZONE_ARROW;
127-
128149 leds.push_back (arrow_led);
129150 zone_led_idx.push_back ((unsigned char )led_idx);
130151 }
131152
153+ /* -----------------------------------------------------*\
154+ | The rear logo zone is only present on the large |
155+ | variant |
156+ \*-----------------------------------------------------*/
157+ if (controller->IsLargeVariant ())
158+ {
159+ zone rear_logo;
160+ rear_logo.name = " Rear Logo" ;
161+ rear_logo.type = ZONE_TYPE_SINGLE;
162+ rear_logo.leds_min = 1 ;
163+ rear_logo.leds_max = 1 ;
164+ rear_logo.leds_count = 1 ;
165+ rear_logo.matrix_map = NULL ;
166+ zones.push_back (rear_logo);
167+
168+ led rear_logo_led;
169+ rear_logo_led.name = " Rear Logo LED" ;
170+ rear_logo_led.value = PNY_GPU_REG_ZONE_LOGO;
171+ leds.push_back (rear_logo_led);
172+ zone_led_idx.push_back (0 );
173+ }
174+
132175 SetupColors ();
133176}
134177
@@ -166,11 +209,22 @@ void RGBController_PNYARGBEpicXGPU::DeviceUpdateMode()
166209 {
167210 controller->SetZoneMode (PNY_GPU_REG_ZONE_FRONT, modes[active_mode].value , modes[active_mode].speed , modes[active_mode].brightness , 0 , modes[active_mode].colors [0 ]);
168211 controller->SetZoneMode (PNY_GPU_REG_ZONE_ARROW, modes[active_mode].value , modes[active_mode].speed , modes[active_mode].brightness , 0 , modes[active_mode].colors [0 ]);
212+
213+ if (controller->IsLargeVariant ())
214+ {
215+ controller->SetZoneMode (PNY_GPU_REG_ZONE_LOGO, modes[active_mode].value , modes[active_mode].speed , modes[active_mode].brightness , 0 , modes[active_mode].colors [0 ]);
216+ }
169217 }
170218 else if (modes[active_mode].color_mode == MODE_COLORS_PER_LED)
171219 {
172220 controller->SetZoneMode (PNY_GPU_REG_ZONE_FRONT, modes[active_mode].value , 0 , 0xFF , 0 , 0 );
173221 controller->SetZoneMode (PNY_GPU_REG_ZONE_ARROW, modes[active_mode].value , 0 , 0xFF , 0 , 0 );
222+
223+ if (controller->IsLargeVariant ())
224+ {
225+ controller->SetZoneMode (PNY_GPU_REG_ZONE_LOGO, modes[active_mode].value , 0 , 0xFF , 0 , 0 );
226+ }
227+
174228 DeviceUpdateLEDs ();
175229 }
176230}
0 commit comments