Browse Source

renderer_opengl: Implement RGB565 framebuffer format

ReinUsesLisp 7 năm trước cách đây
mục cha
commit
80702aa88f

+ 1 - 0
src/video_core/gpu.h

@@ -91,6 +91,7 @@ class DebugContext;
 struct FramebufferConfig {
 struct FramebufferConfig {
     enum class PixelFormat : u32 {
     enum class PixelFormat : u32 {
         ABGR8 = 1,
         ABGR8 = 1,
+        RGB565 = 4,
         BGRA8 = 5,
         BGRA8 = 5,
     };
     };
 
 

+ 5 - 1
src/video_core/renderer_opengl/renderer_opengl.cpp

@@ -285,7 +285,11 @@ void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
         internal_format = GL_RGBA8;
         internal_format = GL_RGBA8;
         texture.gl_format = GL_RGBA;
         texture.gl_format = GL_RGBA;
         texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
         texture.gl_type = GL_UNSIGNED_INT_8_8_8_8_REV;
-
+        break;
+    case Tegra::FramebufferConfig::PixelFormat::RGB565:
+        internal_format = GL_RGB565;
+        texture.gl_format = GL_RGB;
+        texture.gl_type = GL_UNSIGNED_SHORT_5_6_5;
         break;
         break;
     default:
     default:
         internal_format = GL_RGBA8;
         internal_format = GL_RGBA8;

+ 3 - 2
src/video_core/surface.cpp

@@ -445,11 +445,12 @@ PixelFormat PixelFormatFromGPUPixelFormat(Tegra::FramebufferConfig::PixelFormat
     switch (format) {
     switch (format) {
     case Tegra::FramebufferConfig::PixelFormat::ABGR8:
     case Tegra::FramebufferConfig::PixelFormat::ABGR8:
         return PixelFormat::ABGR8U;
         return PixelFormat::ABGR8U;
+    case Tegra::FramebufferConfig::PixelFormat::RGB565:
+        return PixelFormat::B5G6R5U;
     case Tegra::FramebufferConfig::PixelFormat::BGRA8:
     case Tegra::FramebufferConfig::PixelFormat::BGRA8:
         return PixelFormat::BGRA8;
         return PixelFormat::BGRA8;
     default:
     default:
-        LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
-        UNREACHABLE();
+        UNIMPLEMENTED_MSG("Unimplemented format={}", static_cast<u32>(format));
         return PixelFormat::ABGR8U;
         return PixelFormat::ABGR8U;
     }
     }
 }
 }