From f85cff0f48a62ae6ae645bb1dd25689135603d69 Mon Sep 17 00:00:00 2001
From: Subv <subv2112@gmail.com>
Date: Wed, 25 Jul 2018 23:19:15 -0500
Subject: [PATCH] GPU: Allow using R16F as a render target format.

---
 src/video_core/gpu.h                                 | 1 +
 src/video_core/renderer_opengl/gl_rasterizer_cache.h | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h
index de276c559..c464fc6d1 100644
--- a/src/video_core/gpu.h
+++ b/src/video_core/gpu.h
@@ -29,6 +29,7 @@ enum class RenderTargetFormat : u32 {
     RG16_UINT = 0xDD,
     RG16_FLOAT = 0xDE,
     R11G11B10_FLOAT = 0xE0,
+    R16_FLOAT = 0xF2,
     R8_UNORM = 0xF3,
 };
 
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
index bb39c0a6f..bf0458b94 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h
@@ -230,7 +230,8 @@ struct SurfaceParams {
             return PixelFormat::RG16;
         case Tegra::RenderTargetFormat::RG16_SNORM:
             return PixelFormat::RG16S;
-
+        case Tegra::RenderTargetFormat::R16_FLOAT:
+            return PixelFormat::R16F;
         default:
             LOG_CRITICAL(HW_GPU, "Unimplemented format={}", static_cast<u32>(format));
             UNREACHABLE();
@@ -437,6 +438,7 @@ struct SurfaceParams {
         case Tegra::RenderTargetFormat::RGBA32_FLOAT:
         case Tegra::RenderTargetFormat::RG32_FLOAT:
         case Tegra::RenderTargetFormat::RG16_FLOAT:
+        case Tegra::RenderTargetFormat::R16_FLOAT:
             return ComponentType::Float;
         case Tegra::RenderTargetFormat::RGBA32_UINT:
         case Tegra::RenderTargetFormat::RG16_UINT: