From a6cab532f89ada46988e391708eb06b3be5ade19 Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Sun, 25 Mar 2018 00:09:53 -0400
Subject: [PATCH] gl_rasterizer: Normalize vertex array data as appropriate.

---
 src/video_core/engines/maxwell_3d.h              | 4 ++++
 src/video_core/renderer_opengl/gl_rasterizer.cpp | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index 9d63fa8038..0e1ae59120 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -222,6 +222,10 @@ public:
                 UNREACHABLE();
                 return {};
             }
+
+            bool IsNormalized() const {
+                return (type == Type::SignedNorm) || (type == Type::UnsignedNorm);
+            }
         };
 
         enum class PrimitiveTopology : u32 {
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index dfc4beb9ad..7950bac9e1 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -178,7 +178,7 @@ void RasterizerOpenGL::SetupVertexArray(u8* array_ptr, GLintptr buffer_offset) {
     for (unsigned index = 0; index < 16; ++index) {
         auto& attrib = regs.vertex_attrib_format[index];
         glVertexAttribPointer(index, attrib.ComponentCount(), MaxwellToGL::VertexType(attrib),
-                              GL_FALSE, vertex_array.stride,
+                              attrib.IsNormalized() ? GL_TRUE : GL_FALSE, vertex_array.stride,
                               reinterpret_cast<GLvoid*>(buffer_offset + attrib.offset));
         glEnableVertexAttribArray(index);
         hw_vao_enabled_attributes[index] = true;