diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp
index e17368a4ae755788542bfc2d305c0199813d84fc..b35413488281b2ff11cfdb445a7d7866c3c380a9 100644
--- a/src/video_core/shader/shader.cpp
+++ b/src/video_core/shader/shader.cpp
@@ -36,8 +36,7 @@ void Setup(UnitState<false>& state) {
 #ifdef ARCHITECTURE_x86_64
     if (VideoCore::g_shader_jit_enabled) {
         u64 cache_key = (Common::ComputeHash64(&g_state.vs.program_code, sizeof(g_state.vs.program_code)) ^
-            Common::ComputeHash64(&g_state.vs.swizzle_data, sizeof(g_state.vs.swizzle_data)) ^
-            g_state.regs.vs.main_offset);
+            Common::ComputeHash64(&g_state.vs.swizzle_data, sizeof(g_state.vs.swizzle_data)));
 
         auto iter = shader_map.find(cache_key);
         if (iter != shader_map.end()) {
@@ -98,7 +97,7 @@ OutputVertex Run(UnitState<false>& state, const InputVertex& input, int num_attr
 
 #ifdef ARCHITECTURE_x86_64
     if (VideoCore::g_shader_jit_enabled)
-        jit_shader->Run(&state.registers);
+        jit_shader->Run(&state.registers, g_state.regs.vs.main_offset);
     else
         RunInterpreter(state);
 #else
diff --git a/src/video_core/shader/shader_jit_x64.cpp b/src/video_core/shader/shader_jit_x64.cpp
index 3da4e51fa626e2e7ef8a635bcff29c0a1e6b7864..cbdc1e40fd3c88aa8ab3f318417d2344cca2e4ff 100644
--- a/src/video_core/shader/shader_jit_x64.cpp
+++ b/src/video_core/shader/shader_jit_x64.cpp
@@ -838,9 +838,7 @@ void JitCompiler::Compile() {
     fixup_branches.clear();
 
     // Jump to start of the shader program
-    if (g_state.regs.vs.main_offset != 0) {
-        fixup_branches.push_back({ J(true),  g_state.regs.vs.main_offset });
-    }
+    JMPptr(R(ABI_PARAM2));
 
     // Compile entire program
     Compile_Block(static_cast<unsigned>(g_state.vs.program_code.size()));
diff --git a/src/video_core/shader/shader_jit_x64.h b/src/video_core/shader/shader_jit_x64.h
index 19f9bdb5631833279c015ead27cc77ee1287bf02..1501d13bf9a7028694b0a635d9f7f959f9e90984 100644
--- a/src/video_core/shader/shader_jit_x64.h
+++ b/src/video_core/shader/shader_jit_x64.h
@@ -25,8 +25,6 @@ namespace Shader {
 /// Memory allocated for each compiled shader (64Kb)
 constexpr size_t MAX_SHADER_SIZE = 1024 * 64;
 
-using CompiledShader = void(void* registers);
-
 /**
  * This class implements the shader JIT compiler. It recompiles a Pica shader program into x86_64
  * code that can be executed on the host machine directly.
@@ -35,8 +33,8 @@ class JitCompiler : public Gen::XCodeBlock {
 public:
     JitCompiler();
 
-    void Run(void* registers) const {
-        program(registers);
+    void Run(void* registers, unsigned offset) const {
+        program(registers, code_ptr[offset]);
     }
 
     void Compile();
@@ -111,6 +109,7 @@ private:
     /// Branches that need to be fixed up once the entire shader program is compiled
     std::vector<std::pair<Gen::FixupBranch, unsigned>> fixup_branches;
 
+    using CompiledShader = void(void* registers, const u8* start_addr);
     CompiledShader* program = nullptr;
 };