From 7fc516cc1ad81b02308b5b23fd18562e651c770e Mon Sep 17 00:00:00 2001
From: Subv <subv2112@gmail.com>
Date: Tue, 17 Apr 2018 10:08:10 -0500
Subject: [PATCH 1/2] MaxwellToGL: Added a TODO and partial implementation of
 maxwell wrap mode 4 (Clamp, GL_CLAMP).

This clamp mode was removed from OpenGL as of 3.1, we can emulate it by using GL_CLAMP_TO_BORDER to get the border color of the texture, and then manually sampling the edge to mix them in the fragment shader.
---
 src/video_core/renderer_opengl/maxwell_to_gl.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/video_core/renderer_opengl/maxwell_to_gl.h b/src/video_core/renderer_opengl/maxwell_to_gl.h
index 7909dcfc3..9d04a4d65 100644
--- a/src/video_core/renderer_opengl/maxwell_to_gl.h
+++ b/src/video_core/renderer_opengl/maxwell_to_gl.h
@@ -74,6 +74,11 @@ inline GLenum WrapMode(Tegra::Texture::WrapMode wrap_mode) {
     switch (wrap_mode) {
     case Tegra::Texture::WrapMode::ClampToEdge:
         return GL_CLAMP_TO_EDGE;
+    case Tegra::Texture::WrapMode::ClampOGL:
+        // TODO(Subv): GL_CLAMP was removed as of OpenGL 3.1, to implement GL_CLAMP, we can use
+        // GL_CLAMP_TO_BORDER to get the border color of the texture, and then sample the edge to
+        // manually mix them. However the shader part of this is not yet implemented.
+        return GL_CLAMP_TO_BORDER;
     }
     LOG_CRITICAL(Render_OpenGL, "Unimplemented texture wrap mode=%u", static_cast<u32>(wrap_mode));
     UNREACHABLE();

From 636ad347071b387bd8ff3c45190115fa5b6caf65 Mon Sep 17 00:00:00 2001
From: Subv <subv2112@gmail.com>
Date: Tue, 17 Apr 2018 10:17:18 -0500
Subject: [PATCH 2/2] MaxwellToGL: Implemented tex wrap mode 1 (Wrap,
 GL_REPEAT).

---
 src/video_core/renderer_opengl/maxwell_to_gl.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/video_core/renderer_opengl/maxwell_to_gl.h b/src/video_core/renderer_opengl/maxwell_to_gl.h
index 9d04a4d65..8600ea91a 100644
--- a/src/video_core/renderer_opengl/maxwell_to_gl.h
+++ b/src/video_core/renderer_opengl/maxwell_to_gl.h
@@ -72,6 +72,8 @@ inline GLenum TextureFilterMode(Tegra::Texture::TextureFilter filter_mode) {
 
 inline GLenum WrapMode(Tegra::Texture::WrapMode wrap_mode) {
     switch (wrap_mode) {
+    case Tegra::Texture::WrapMode::Wrap:
+        return GL_REPEAT;
     case Tegra::Texture::WrapMode::ClampToEdge:
         return GL_CLAMP_TO_EDGE;
     case Tegra::Texture::WrapMode::ClampOGL: