diff options
| author | 2019-07-05 23:49:45 -0300 | |
|---|---|---|
| committer | 2019-07-06 00:37:56 -0300 | |
| commit | f7691ebe57d083f12969b5e186154a301f7bfae1 (patch) | |
| tree | 03f494770c8686d1dffd835f2cac88d92776f23f | |
| parent | gl_rasterizer: Minor style changes (diff) | |
| download | yuzu-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.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.h | 4 | ||||
| -rw-r--r-- | 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 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 | |||
| 165 | protected: | 167 | protected: |
| 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 | |||
| 30 | protected: | 32 | protected: |
| 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 | ||