SDL: Add point, line and rect support

From 90e0e5c29d55d29b76f62eabbcb9f33a52f2438e Mon Sep 17 00:00:00 2001
From: Daniel Santos <[EMAIL REDACTED]>
Date: Thu, 30 Jun 2022 19:50:22 -0300
Subject: [PATCH] Add point, line and rect support

---
 src/render/ps2/SDL_blendfillrect.c | 357 ------------
 src/render/ps2/SDL_blendfillrect.h |  33 --
 src/render/ps2/SDL_blendline.c     | 875 -----------------------------
 src/render/ps2/SDL_blendline.h     |  33 --
 src/render/ps2/SDL_blendpoint.c    | 362 ------------
 src/render/ps2/SDL_blendpoint.h    |  33 --
 src/render/ps2/SDL_drawline.c      | 213 -------
 src/render/ps2/SDL_drawline.h      |  33 --
 src/render/ps2/SDL_drawpoint.c     | 114 ----
 src/render/ps2/SDL_drawpoint.h     |  33 --
 src/render/ps2/SDL_render_ps2.c    | 154 ++++-
 src/video/ps2/SDL_ps2video.c       |   2 +-
 12 files changed, 134 insertions(+), 2108 deletions(-)
 delete mode 100644 src/render/ps2/SDL_blendfillrect.c
 delete mode 100644 src/render/ps2/SDL_blendfillrect.h
 delete mode 100644 src/render/ps2/SDL_blendline.c
 delete mode 100644 src/render/ps2/SDL_blendline.h
 delete mode 100644 src/render/ps2/SDL_blendpoint.c
 delete mode 100644 src/render/ps2/SDL_blendpoint.h
 delete mode 100644 src/render/ps2/SDL_drawline.c
 delete mode 100644 src/render/ps2/SDL_drawline.h
 delete mode 100644 src/render/ps2/SDL_drawpoint.c
 delete mode 100644 src/render/ps2/SDL_drawpoint.h

diff --git a/src/render/ps2/SDL_blendfillrect.c b/src/render/ps2/SDL_blendfillrect.c
deleted file mode 100644
index 41a0b83c1e0..00000000000
--- a/src/render/ps2/SDL_blendfillrect.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "../../SDL_internal.h"
-
-#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED
-
-#include "SDL_draw.h"
-#include "SDL_blendfillrect.h"
-
-
-static int
-SDL_BlendFillRect_RGB555(SDL_Surface * dst, const SDL_Rect * rect,
-                         SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    unsigned inva = 0xff - a;
-
-    switch (blendMode) {
-    case SDL_BLENDMODE_BLEND:
-        FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB555);
-        break;
-    case SDL_BLENDMODE_ADD:
-        FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB555);
-        break;
-    case SDL_BLENDMODE_MOD:
-        FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB555);
-        break;
-    case SDL_BLENDMODE_MUL:
-        FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB555);
-        break;
-    default:
-        FILLRECT(Uint16, DRAW_SETPIXEL_RGB555);
-        break;
-    }
-    return 0;
-}
-
-static int
-SDL_BlendFillRect_RGB565(SDL_Surface * dst, const SDL_Rect * rect,
-                         SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    unsigned inva = 0xff - a;
-
-    switch (blendMode) {
-    case SDL_BLENDMODE_BLEND:
-        FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB565);
-        break;
-    case SDL_BLENDMODE_ADD:
-        FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB565);
-        break;
-    case SDL_BLENDMODE_MOD:
-        FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB565);
-        break;
-    case SDL_BLENDMODE_MUL:
-        FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB565);
-        break;
-    default:
-        FILLRECT(Uint16, DRAW_SETPIXEL_RGB565);
-        break;
-    }
-    return 0;
-}
-
-static int
-SDL_BlendFillRect_RGB888(SDL_Surface * dst, const SDL_Rect * rect,
-                         SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    unsigned inva = 0xff - a;
-
-    switch (blendMode) {
-    case SDL_BLENDMODE_BLEND:
-        FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGB888);
-        break;
-    case SDL_BLENDMODE_ADD:
-        FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGB888);
-        break;
-    case SDL_BLENDMODE_MOD:
-        FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB888);
-        break;
-    case SDL_BLENDMODE_MUL:
-        FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB888);
-        break;
-    default:
-        FILLRECT(Uint32, DRAW_SETPIXEL_RGB888);
-        break;
-    }
-    return 0;
-}
-
-static int
-SDL_BlendFillRect_ARGB8888(SDL_Surface * dst, const SDL_Rect * rect,
-                           SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    unsigned inva = 0xff - a;
-
-    switch (blendMode) {
-    case SDL_BLENDMODE_BLEND:
-        FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_ARGB8888);
-        break;
-    case SDL_BLENDMODE_ADD:
-        FILLRECT(Uint32, DRAW_SETPIXEL_ADD_ARGB8888);
-        break;
-    case SDL_BLENDMODE_MOD:
-        FILLRECT(Uint32, DRAW_SETPIXEL_MOD_ARGB8888);
-        break;
-    case SDL_BLENDMODE_MUL:
-        FILLRECT(Uint32, DRAW_SETPIXEL_MUL_ARGB8888);
-        break;
-    default:
-        FILLRECT(Uint32, DRAW_SETPIXEL_ARGB8888);
-        break;
-    }
-    return 0;
-}
-
-static int
-SDL_BlendFillRect_RGB(SDL_Surface * dst, const SDL_Rect * rect,
-                      SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    SDL_PixelFormat *fmt = dst->format;
-    unsigned inva = 0xff - a;
-
-    switch (fmt->BytesPerPixel) {
-    case 2:
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            FILLRECT(Uint16, DRAW_SETPIXEL_BLEND_RGB);
-            break;
-        case SDL_BLENDMODE_ADD:
-            FILLRECT(Uint16, DRAW_SETPIXEL_ADD_RGB);
-            break;
-        case SDL_BLENDMODE_MOD:
-            FILLRECT(Uint16, DRAW_SETPIXEL_MOD_RGB);
-            break;
-        case SDL_BLENDMODE_MUL:
-            FILLRECT(Uint16, DRAW_SETPIXEL_MUL_RGB);
-            break;
-        default:
-            FILLRECT(Uint16, DRAW_SETPIXEL_RGB);
-            break;
-        }
-        return 0;
-    case 4:
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGB);
-            break;
-        case SDL_BLENDMODE_ADD:
-            FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGB);
-            break;
-        case SDL_BLENDMODE_MOD:
-            FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGB);
-            break;
-        case SDL_BLENDMODE_MUL:
-            FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGB);
-            break;
-        default:
-            FILLRECT(Uint32, DRAW_SETPIXEL_RGB);
-            break;
-        }
-        return 0;
-    default:
-        return SDL_Unsupported();
-    }
-}
-
-static int
-SDL_BlendFillRect_RGBA(SDL_Surface * dst, const SDL_Rect * rect,
-                       SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    SDL_PixelFormat *fmt = dst->format;
-    unsigned inva = 0xff - a;
-
-    switch (fmt->BytesPerPixel) {
-    case 4:
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            FILLRECT(Uint32, DRAW_SETPIXEL_BLEND_RGBA);
-            break;
-        case SDL_BLENDMODE_ADD:
-            FILLRECT(Uint32, DRAW_SETPIXEL_ADD_RGBA);
-            break;
-        case SDL_BLENDMODE_MOD:
-            FILLRECT(Uint32, DRAW_SETPIXEL_MOD_RGBA);
-            break;
-        case SDL_BLENDMODE_MUL:
-            FILLRECT(Uint32, DRAW_SETPIXEL_MUL_RGBA);
-            break;
-        default:
-            FILLRECT(Uint32, DRAW_SETPIXEL_RGBA);
-            break;
-        }
-        return 0;
-    default:
-        return SDL_Unsupported();
-    }
-}
-
-int
-SDL_BlendFillRect(SDL_Surface * dst, const SDL_Rect * rect,
-                  SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    SDL_Rect clipped;
-
-    if (!dst) {
-        return SDL_InvalidParamError("SDL_BlendFillRect(): dst");
-    }
-
-    /* This function doesn't work on surfaces < 8 bpp */
-    if (dst->format->BitsPerPixel < 8) {
-        return SDL_SetError("SDL_BlendFillRect(): Unsupported surface format");
-    }
-
-    /* If 'rect' == NULL, then fill the whole surface */
-    if (rect) {
-        /* Perform clipping */
-        if (!SDL_IntersectRect(rect, &dst->clip_rect, &clipped)) {
-            return 0;
-        }
-        rect = &clipped;
-    } else {
-        rect = &dst->clip_rect;
-    }
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(r, a);
-        g = DRAW_MUL(g, a);
-        b = DRAW_MUL(b, a);
-    }
-
-    switch (dst->format->BitsPerPixel) {
-    case 15:
-        switch (dst->format->Rmask) {
-        case 0x7C00:
-            return SDL_BlendFillRect_RGB555(dst, rect, blendMode, r, g, b, a);
-        }
-        break;
-    case 16:
-        switch (dst->format->Rmask) {
-        case 0xF800:
-            return SDL_BlendFillRect_RGB565(dst, rect, blendMode, r, g, b, a);
-        }
-        break;
-    case 32:
-        switch (dst->format->Rmask) {
-        case 0x00FF0000:
-            if (!dst->format->Amask) {
-                return SDL_BlendFillRect_RGB888(dst, rect, blendMode, r, g, b, a);
-            } else {
-                return SDL_BlendFillRect_ARGB8888(dst, rect, blendMode, r, g, b, a);
-            }
-            /* break; -Wunreachable-code-break */
-        }
-        break;
-    default:
-        break;
-    }
-
-    if (!dst->format->Amask) {
-        return SDL_BlendFillRect_RGB(dst, rect, blendMode, r, g, b, a);
-    } else {
-        return SDL_BlendFillRect_RGBA(dst, rect, blendMode, r, g, b, a);
-    }
-}
-
-int
-SDL_BlendFillRects(SDL_Surface * dst, const SDL_Rect * rects, int count,
-                   SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
-{
-    SDL_Rect rect;
-    int i;
-    int (*func)(SDL_Surface * dst, const SDL_Rect * rect,
-                SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a) = NULL;
-    int status = 0;
-
-    if (!dst) {
-        return SDL_InvalidParamError("SDL_BlendFillRects(): dst");
-    }
-
-    /* This function doesn't work on surfaces < 8 bpp */
-    if (dst->format->BitsPerPixel < 8) {
-        return SDL_SetError("SDL_BlendFillRects(): Unsupported surface format");
-    }
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(r, a);
-        g = DRAW_MUL(g, a);
-        b = DRAW_MUL(b, a);
-    }
-
-    /* FIXME: Does this function pointer slow things down significantly? */
-    switch (dst->format->BitsPerPixel) {
-    case 15:
-        switch (dst->format->Rmask) {
-        case 0x7C00:
-            func = SDL_BlendFillRect_RGB555;
-        }
-        break;
-    case 16:
-        switch (dst->format->Rmask) {
-        case 0xF800:
-            func = SDL_BlendFillRect_RGB565;
-        }
-        break;
-    case 32:
-        switch (dst->format->Rmask) {
-        case 0x00FF0000:
-            if (!dst->format->Amask) {
-                func = SDL_BlendFillRect_RGB888;
-            } else {
-                func = SDL_BlendFillRect_ARGB8888;
-            }
-            break;
-        }
-        break;
-    default:
-        break;
-    }
-
-    if (!func) {
-        if (!dst->format->Amask) {
-            func = SDL_BlendFillRect_RGB;
-        } else {
-            func = SDL_BlendFillRect_RGBA;
-        }
-    }
-
-    for (i = 0; i < count; ++i) {
-        /* Perform clipping */
-        if (!SDL_IntersectRect(&rects[i], &dst->clip_rect, &rect)) {
-            continue;
-        }
-        status = func(dst, &rect, blendMode, r, g, b, a);
-    }
-    return status;
-}
-
-#endif /* SDL_VIDEO_RENDER_SW */
-
-/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/render/ps2/SDL_blendfillrect.h b/src/render/ps2/SDL_blendfillrect.h
deleted file mode 100644
index 8ee62b198d5..00000000000
--- a/src/render/ps2/SDL_blendfillrect.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef SDL_blendfillrect_h_
-#define SDL_blendfillrect_h_
-
-#include "../../SDL_internal.h"
-
-
-extern int SDL_BlendFillRect(SDL_Surface * dst, const SDL_Rect * rect, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
-extern int SDL_BlendFillRects(SDL_Surface * dst, const SDL_Rect * rects, int count, SDL_BlendMode blendMode, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
-
-#endif /* SDL_blendfillrect_h_ */
-
-/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/render/ps2/SDL_blendline.c b/src/render/ps2/SDL_blendline.c
deleted file mode 100644
index d85eeb504eb..00000000000
--- a/src/render/ps2/SDL_blendline.c
+++ /dev/null
@@ -1,875 +0,0 @@
-/*
-  Simple DirectMedia Layer
-  Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-*/
-#include "../../SDL_internal.h"
-
-#if SDL_VIDEO_RENDER_PS2 && !SDL_RENDER_DISABLED
-
-#include "SDL_draw.h"
-#include "SDL_blendline.h"
-#include "SDL_blendpoint.h"
-
-
-static void
-SDL_BlendLine_RGB2(SDL_Surface * dst, int x1, int y1, int x2, int y2,
-                   SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
-                   SDL_bool draw_end)
-{
-    const SDL_PixelFormat *fmt = dst->format;
-    unsigned r, g, b, a, inva;
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(_r, _a);
-        g = DRAW_MUL(_g, _a);
-        b = DRAW_MUL(_b, _a);
-        a = _a;
-    } else {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = _a;
-    }
-    inva = (a ^ 0xff);
-
-    if (y1 == y2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end);
-            break;
-        default:
-            HLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end);
-            break;
-        }
-    } else if (x1 == x2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end);
-            break;
-        default:
-            VLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end);
-            break;
-        }
-    } else if (ABS(x1 - x2) == ABS(y1 - y2)) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB, draw_end);
-            break;
-        default:
-            DLINE(Uint16, DRAW_SETPIXEL_RGB, draw_end);
-            break;
-        }
-    } else {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY2_BLEND_RGB, DRAW_SETPIXELXY2_BLEND_RGB,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY2_ADD_RGB, DRAW_SETPIXELXY2_ADD_RGB,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY2_MOD_RGB, DRAW_SETPIXELXY2_MOD_RGB,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY2_MUL_RGB, DRAW_SETPIXELXY2_MUL_RGB,
-                   draw_end);
-            break;
-        default:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY2_RGB, DRAW_SETPIXELXY2_BLEND_RGB,
-                   draw_end);
-            break;
-        }
-    }
-}
-
-static void
-SDL_BlendLine_RGB555(SDL_Surface * dst, int x1, int y1, int x2, int y2,
-                     SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
-                     SDL_bool draw_end)
-{
-    unsigned r, g, b, a, inva;
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(_r, _a);
-        g = DRAW_MUL(_g, _a);
-        b = DRAW_MUL(_b, _a);
-        a = _a;
-    } else {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = _a;
-    }
-    inva = (a ^ 0xff);
-
-    if (y1 == y2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end);
-            break;
-        default:
-            HLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end);
-            break;
-        }
-    } else if (x1 == x2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end);
-            break;
-        default:
-            VLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end);
-            break;
-        }
-    } else if (ABS(x1 - x2) == ABS(y1 - y2)) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB555, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB555, draw_end);
-            break;
-        default:
-            DLINE(Uint16, DRAW_SETPIXEL_RGB555, draw_end);
-            break;
-        }
-    } else {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_BLEND_RGB555, DRAW_SETPIXELXY_BLEND_RGB555,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_ADD_RGB555, DRAW_SETPIXELXY_ADD_RGB555,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_MOD_RGB555, DRAW_SETPIXELXY_MOD_RGB555,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_MUL_RGB555, DRAW_SETPIXELXY_MUL_RGB555,
-                   draw_end);
-            break;
-        default:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_RGB555, DRAW_SETPIXELXY_BLEND_RGB555,
-                   draw_end);
-            break;
-        }
-    }
-}
-
-static void
-SDL_BlendLine_RGB565(SDL_Surface * dst, int x1, int y1, int x2, int y2,
-                     SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
-                     SDL_bool draw_end)
-{
-    unsigned r, g, b, a, inva;
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(_r, _a);
-        g = DRAW_MUL(_g, _a);
-        b = DRAW_MUL(_b, _a);
-        a = _a;
-    } else {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = _a;
-    }
-    inva = (a ^ 0xff);
-
-    if (y1 == y2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            HLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            HLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            HLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            HLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end);
-            break;
-        default:
-            HLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end);
-            break;
-        }
-    } else if (x1 == x2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            VLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            VLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            VLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            VLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end);
-            break;
-        default:
-            VLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end);
-            break;
-        }
-    } else if (ABS(x1 - x2) == ABS(y1 - y2)) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            DLINE(Uint16, DRAW_SETPIXEL_BLEND_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            DLINE(Uint16, DRAW_SETPIXEL_ADD_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            DLINE(Uint16, DRAW_SETPIXEL_MOD_RGB565, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            DLINE(Uint16, DRAW_SETPIXEL_MUL_RGB565, draw_end);
-            break;
-        default:
-            DLINE(Uint16, DRAW_SETPIXEL_RGB565, draw_end);
-            break;
-        }
-    } else {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_BLEND_RGB565, DRAW_SETPIXELXY_BLEND_RGB565,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_ADD_RGB565, DRAW_SETPIXELXY_ADD_RGB565,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_MOD_RGB565, DRAW_SETPIXELXY_MOD_RGB565,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_MUL_RGB565, DRAW_SETPIXELXY_MUL_RGB565,
-                   draw_end);
-            break;
-        default:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY_RGB565, DRAW_SETPIXELXY_BLEND_RGB565,
-                   draw_end);
-            break;
-        }
-    }
-}
-
-static void
-SDL_BlendLine_RGB4(SDL_Surface * dst, int x1, int y1, int x2, int y2,
-                   SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
-                   SDL_bool draw_end)
-{
-    const SDL_PixelFormat *fmt = dst->format;
-    unsigned r, g, b, a, inva;
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(_r, _a);
-        g = DRAW_MUL(_g, _a);
-        b = DRAW_MUL(_b, _a);
-        a = _a;
-    } else {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = _a;
-    }
-    inva = (a ^ 0xff);
-
-    if (y1 == y2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            HLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            HLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            HLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end);
-            break;
-        default:
-            HLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end);
-            break;
-        }
-    } else if (x1 == x2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            VLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            VLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            VLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end);
-            break;
-        default:
-            VLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end);
-            break;
-        }
-    } else if (ABS(x1 - x2) == ABS(y1 - y2)) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            DLINE(Uint32, DRAW_SETPIXEL_ADD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            DLINE(Uint32, DRAW_SETPIXEL_MOD_RGB, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            DLINE(Uint32, DRAW_SETPIXEL_MUL_RGB, draw_end);
-            break;
-        default:
-            DLINE(Uint32, DRAW_SETPIXEL_RGB, draw_end);
-            break;
-        }
-    } else {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY4_BLEND_RGB, DRAW_SETPIXELXY4_BLEND_RGB,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY4_ADD_RGB, DRAW_SETPIXELXY4_ADD_RGB,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY4_MOD_RGB, DRAW_SETPIXELXY4_MOD_RGB,
-                   draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY4_MUL_RGB, DRAW_SETPIXELXY4_MUL_RGB,
-                   draw_end);
-            break;
-        default:
-            AALINE(x1, y1, x2, y2,
-                   DRAW_SETPIXELXY4_RGB, DRAW_SETPIXELXY4_BLEND_RGB,
-                   draw_end);
-            break;
-        }
-    }
-}
-
-static void
-SDL_BlendLine_RGBA4(SDL_Surface * dst, int x1, int y1, int x2, int y2,
-                    SDL_BlendMode blendMode, Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a,
-                    SDL_bool draw_end)
-{
-    const SDL_PixelFormat *fmt = dst->format;
-    unsigned r, g, b, a, inva;
-
-    if (blendMode == SDL_BLENDMODE_BLEND || blendMode == SDL_BLENDMODE_ADD) {
-        r = DRAW_MUL(_r, _a);
-        g = DRAW_MUL(_g, _a);
-        b = DRAW_MUL(_b, _a);
-        a = _a;
-    } else {
-        r = _r;
-        g = _g;
-        b = _b;
-        a = _a;
-    }
-    inva = (a ^ 0xff);
-
-    if (y1 == y2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            HLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            HLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            HLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            HLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end);
-            break;
-        default:
-            HLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end);
-            break;
-        }
-    } else if (x1 == x2) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            VLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            VLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            VLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            VLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end);
-            break;
-        default:
-            VLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end);
-            break;
-        }
-    } else if (ABS(x1 - x2) == ABS(y1 - y2)) {
-        switch (blendMode) {
-        case SDL_BLENDMODE_BLEND:
-            DLINE(Uint32, DRAW_SETPIXEL_BLEND_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_ADD:
-            DLINE(Uint32, DRAW_SETPIXEL_ADD_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_MOD:
-            DLINE(Uint32, DRAW_SETPIXEL_MOD_RGBA, draw_end);
-            break;
-        case SDL_BLENDMODE_MUL:
-            DLINE(Uint32, DRAW_SETPIXEL_MUL_RGBA, draw_end);
-            break;
-        default:
-            DLINE(Uint32, DRAW_SETPIXEL_RGBA, draw_end);
-            break;
-        }
-    } else {
-        switch (blendMode) {
-        case SD

(Patch may be truncated, please check the link at the top of this post.)