From bf310a41b8bd1618c45040aaf039b9d44cb2c45f Mon Sep 17 00:00:00 2001
From: Subv <subv2112@gmail.com>
Date: Fri, 16 Mar 2018 19:24:41 -0500
Subject: [PATCH] GPU: Assert that we get a 0 CODE_ADDRESS register in the 3D
 engine.

Shader address calculation depends on this value to some extent, we do not currently know what it being 0 entails.
---
 src/video_core/engines/maxwell_3d.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index 842c5a014..8c6d1172c 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -19,6 +19,14 @@ void Maxwell3D::WriteReg(u32 method, u32 value) {
 #define MAXWELL3D_REG_INDEX(field_name) (offsetof(Regs, field_name) / sizeof(u32))
 
     switch (method) {
+    case MAXWELL3D_REG_INDEX(code_address.code_address_high):
+    case MAXWELL3D_REG_INDEX(code_address.code_address_low): {
+        // Note: For some reason games (like Puyo Puyo Tetris) seem to write 0 to the CODE_ADDRESS
+        // register, we do not currently know if that's intended or a bug, so we assert it lest
+        // stuff breaks in other places (like the shader address calculation).
+        ASSERT_MSG(regs.code_address.CodeAddress() == 0, "Unexpected CODE_ADDRESS register value.");
+        break;
+    }
     case MAXWELL3D_REG_INDEX(draw.vertex_end_gl): {
         DrawArrays();
         break;