From f7691ebe57d083f12969b5e186154a301f7bfae1 Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Fri, 5 Jul 2019 23:49:45 -0300
Subject: [PATCH] gl_rasterizer: Fix nullptr dereference on disabled buffers

---
 src/video_core/buffer_cache.h                    | 4 ++--
 src/video_core/renderer_opengl/gl_buffer_cache.h | 4 ++--
 src/video_core/renderer_opengl/gl_rasterizer.cpp | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/video_core/buffer_cache.h b/src/video_core/buffer_cache.h
index eb0ec45c26..e51f2418c5 100644
--- a/src/video_core/buffer_cache.h
+++ b/src/video_core/buffer_cache.h
@@ -162,6 +162,8 @@ public:
         return std::exchange(invalidated, false);
     }
 
+    virtual const BufferType* GetEmptyBuffer(std::size_t size) = 0;
+
 protected:
     void FlushObjectInner(const Buffer& entry) override {
         DownloadBufferData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr());
@@ -171,8 +173,6 @@ protected:
 
     virtual const BufferType* ToHandle(const BufferStorageType& storage) = 0;
 
-    virtual const BufferType* GetEmptyBuffer(std::size_t size) = 0;
-
     virtual void UploadBufferData(const BufferStorageType& buffer, std::size_t offset,
                                   std::size_t size, const u8* data) = 0;
 
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index 3befdc6abd..8c8ac4038e 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -27,13 +27,13 @@ public:
                             std::size_t stream_size);
     ~OGLBufferCache();
 
+    const GLuint* GetEmptyBuffer(std::size_t) override;
+
 protected:
     OGLBuffer CreateBuffer(std::size_t size) override;
 
     const GLuint* ToHandle(const OGLBuffer& buffer) override;
 
-    const GLuint* GetEmptyBuffer(std::size_t) override;
-
     void UploadBufferData(const OGLBuffer& buffer, std::size_t offset, std::size_t size,
                           const u8* data) override;
 
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index b8430f16d8..0bb5c068c3 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -788,7 +788,7 @@ void RasterizerOpenGL::SetupConstBuffer(const Tegra::Engines::ConstBufferInfo& b
                                         const GLShader::ConstBufferEntry& entry) {
     if (!buffer.enabled) {
         // Set values to zero to unbind buffers
-        bind_ubo_pushbuffer.Push(0, 0, 0);
+        bind_ubo_pushbuffer.Push(buffer_cache.GetEmptyBuffer(sizeof(float)), 0, sizeof(float));
         return;
     }
 
-- 
GitLab