The if/switch statement is bound to grow with more types and
subtypes. Pull this out into its own funcion to make things more
manageable and readable.

Signed-off-by: Harry Wentland <harry.wentl...@amd.com>
---
 drivers/gpu/drm/vkms/vkms_composer.c | 48 ++++++++++++++++------------
 1 file changed, 28 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/vkms/vkms_composer.c 
b/drivers/gpu/drm/vkms/vkms_composer.c
index 9493bdb1ba3f..25b786b49db0 100644
--- a/drivers/gpu/drm/vkms/vkms_composer.c
+++ b/drivers/gpu/drm/vkms/vkms_composer.c
@@ -164,6 +164,31 @@ static void apply_lut(const struct vkms_crtc_state 
*crtc_state, struct line_buff
        }
 }
 
+static void apply_colorop(struct pixel_argb_u16 *pixel, struct drm_colorop 
*colorop)
+{
+       /* TODO is this right? */
+       struct drm_colorop_state *colorop_state = colorop->state;
+
+       if (colorop->type == DRM_COLOROP_1D_CURVE) {
+               switch (colorop_state->curve_1d_type) {
+                       case DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF:
+                               pixel->r = 
apply_lut_to_channel_value(&srgb_inv_eotf, pixel->r, LUT_RED);
+                               pixel->g = 
apply_lut_to_channel_value(&srgb_inv_eotf, pixel->g, LUT_GREEN);
+                               pixel->b = 
apply_lut_to_channel_value(&srgb_inv_eotf, pixel->b, LUT_BLUE);
+                               break;
+                       case DRM_COLOROP_1D_CURVE_SRGB_EOTF:
+                               pixel->r = 
apply_lut_to_channel_value(&srgb_eotf, pixel->r, LUT_RED);
+                               pixel->g = 
apply_lut_to_channel_value(&srgb_eotf, pixel->g, LUT_GREEN);
+                               pixel->b = 
apply_lut_to_channel_value(&srgb_eotf, pixel->b, LUT_BLUE);
+                               break;
+                       default:
+                               DRM_DEBUG_DRIVER("unkown colorop 1D curve type 
%d\n", colorop_state->curve_1d_type);
+                               break;
+               }
+       }
+
+}
+
 static void pre_blend_color_transform(const struct vkms_plane_state 
*plane_state, struct line_buffer *output_buffer)
 {
        struct drm_colorop *colorop = plane_state->base.base.color_pipeline;
@@ -180,26 +205,9 @@ static void pre_blend_color_transform(const struct 
vkms_plane_state *plane_state
                if (!colorop_state)
                        return;
 
-               for (size_t x = 0; x < output_buffer->n_pixels; x++) {
-                       struct pixel_argb_u16 *pixel = 
&output_buffer->pixels[x];
-
-                       if (colorop->type == DRM_COLOROP_1D_CURVE &&
-                               colorop_state->bypass == false) {
-                               switch (colorop_state->curve_1d_type) {
-                                       case DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF:
-                                               pixel->r = 
apply_lut_to_channel_value(&srgb_inv_eotf, pixel->r, LUT_RED);
-                                               pixel->g = 
apply_lut_to_channel_value(&srgb_inv_eotf, pixel->g, LUT_GREEN);
-                                               pixel->b = 
apply_lut_to_channel_value(&srgb_inv_eotf, pixel->b, LUT_BLUE);
-                                               break;
-                                       case DRM_COLOROP_1D_CURVE_SRGB_EOTF:
-                                       default:
-                                               pixel->r = 
apply_lut_to_channel_value(&srgb_eotf, pixel->r, LUT_RED);
-                                               pixel->g = 
apply_lut_to_channel_value(&srgb_eotf, pixel->g, LUT_GREEN);
-                                               pixel->b = 
apply_lut_to_channel_value(&srgb_eotf, pixel->b, LUT_BLUE);
-                                               break;
-                               }
-                       }
-               }
+               for (size_t x = 0; x < output_buffer->n_pixels; x++)
+                       if (!colorop_state->bypass)
+                               apply_colorop(&output_buffer->pixels[x], 
colorop);
 
                colorop = colorop->next;
        }
-- 
2.44.0

Reply via email to