diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 593ceeaf6ca1c9b535ec5168fa46bbf7e6c16bdd..24c87127d9a7640ca9dc6cce36fa5b637599bdf9 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -483,6 +483,18 @@ private:
         const auto host_ptr{memory_manager->GetPointer(gpu_addr)};
         const auto cache_addr{ToCacheAddr(host_ptr)};
 
+        // Step 0: guarantee a valid surface
+        if (!cache_addr) {
+            // Return a null surface if it's invalid
+            SurfaceParams new_params = params;
+            new_params.width = 1;
+            new_params.height = 1;
+            new_params.depth = 1;
+            new_params.block_height = 0;
+            new_params.block_depth = 0;
+            return InitializeSurface(gpu_addr, new_params, false);
+        }
+
         // Step 1
         // Check Level 1 Cache for a fast structural match. If candidate surface
         // matches at certain level we are pretty much done.