diff --git a/src/core/renderer_gl/textures.cpp b/src/core/renderer_gl/textures.cpp
index e6ac3534..3d4c67fc 100644
--- a/src/core/renderer_gl/textures.cpp
+++ b/src/core/renderer_gl/textures.cpp
@@ -99,6 +99,19 @@ u32 Texture::decodeTexel(u32 u, u32 v, Texture::Formats fmt, const void* data) {
             return (alpha << 24) | (b << 16) | (g << 8) | r;
         }
 
+        case Formats::RGBA5551: {
+            u32 offset = getSwizzledOffset(u, v, size.u(), 2);
+            auto ptr = static_cast<const u8*>(data);
+            u16 texel = u16(ptr[offset]) | (u16(ptr[offset + 1]) << 8);
+
+            u8 alpha = (texel & 1) ? 0xff : 0;
+            u8 b = Colour::convert5To8Bit((texel >> 1) & 0x1f);
+            u8 g = Colour::convert5To8Bit((texel >> 6) & 0x1f);
+            u8 r = Colour::convert5To8Bit((texel >> 11) & 0x1f);
+
+            return (alpha << 24) | (b << 16) | (g << 8) | r;
+        }
+
         case Formats::RGB565: {
             u32 offset = getSwizzledOffset(u, v, size.u(), 2);
             auto ptr = static_cast<const u8*>(data);