summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-07-05 23:49:45 -0300
committerGravatar ReinUsesLisp2019-07-06 00:37:56 -0300
commitf7691ebe57d083f12969b5e186154a301f7bfae1 (patch)
tree03f494770c8686d1dffd835f2cac88d92776f23f
parentgl_rasterizer: Minor style changes (diff)
downloadyuzu-f7691ebe57d083f12969b5e186154a301f7bfae1.tar.gz
yuzu-f7691ebe57d083f12969b5e186154a301f7bfae1.tar.xz
yuzu-f7691ebe57d083f12969b5e186154a301f7bfae1.zip
gl_rasterizer: Fix nullptr dereference on disabled buffers
-rw-r--r--src/video_core/buffer_cache.h4
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h4
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/video_core/buffer_cache.h b/src/video_core/buffer_cache.h
index eb0ec45c2..e51f2418c 100644
--- a/src/video_core/buffer_cache.h
+++ b/src/video_core/buffer_cache.h
@@ -162,6 +162,8 @@ public:
162 return std::exchange(invalidated, false); 162 return std::exchange(invalidated, false);
163 } 163 }
164 164
165 virtual const BufferType* GetEmptyBuffer(std::size_t size) = 0;
166
165protected: 167protected:
166 void FlushObjectInner(const Buffer& entry) override { 168 void FlushObjectInner(const Buffer& entry) override {
167 DownloadBufferData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr()); 169 DownloadBufferData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr());
@@ -171,8 +173,6 @@ protected:
171 173
172 virtual const BufferType* ToHandle(const BufferStorageType& storage) = 0; 174 virtual const BufferType* ToHandle(const BufferStorageType& storage) = 0;
173 175
174 virtual const BufferType* GetEmptyBuffer(std::size_t size) = 0;
175
176 virtual void UploadBufferData(const BufferStorageType& buffer, std::size_t offset, 176 virtual void UploadBufferData(const BufferStorageType& buffer, std::size_t offset,
177 std::size_t size, const u8* data) = 0; 177 std::size_t size, const u8* data) = 0;
178 178
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index 3befdc6ab..8c8ac4038 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:
27 std::size_t stream_size); 27 std::size_t stream_size);
28 ~OGLBufferCache(); 28 ~OGLBufferCache();
29 29
30 const GLuint* GetEmptyBuffer(std::size_t) override;
31
30protected: 32protected:
31 OGLBuffer CreateBuffer(std::size_t size) override; 33 OGLBuffer CreateBuffer(std::size_t size) override;
32 34
33 const GLuint* ToHandle(const OGLBuffer& buffer) override; 35 const GLuint* ToHandle(const OGLBuffer& buffer) override;
34 36
35 const GLuint* GetEmptyBuffer(std::size_t) override;
36
37 void UploadBufferData(const OGLBuffer& buffer, std::size_t offset, std::size_t size, 37 void UploadBufferData(const OGLBuffer& buffer, std::size_t offset, std::size_t size,
38 const u8* data) override; 38 const u8* data) override;
39 39
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index b8430f16d..0bb5c068c 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
788 const GLShader::ConstBufferEntry& entry) { 788 const GLShader::ConstBufferEntry& entry) {
789 if (!buffer.enabled) { 789 if (!buffer.enabled) {
790 // Set values to zero to unbind buffers 790 // Set values to zero to unbind buffers
791 bind_ubo_pushbuffer.Push(0, 0, 0); 791 bind_ubo_pushbuffer.Push(buffer_cache.GetEmptyBuffer(sizeof(float)), 0, sizeof(float));
792 return; 792 return;
793 } 793 }
794 794