gl_rasterizer: Fix nullptr dereference on disabled buffers
This commit is contained in:
		| @@ -162,6 +162,8 @@ public: | |||||||
|         return std::exchange(invalidated, false); |         return std::exchange(invalidated, false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     virtual const BufferType* GetEmptyBuffer(std::size_t size) = 0; | ||||||
|  |  | ||||||
| protected: | protected: | ||||||
|     void FlushObjectInner(const Buffer& entry) override { |     void FlushObjectInner(const Buffer& entry) override { | ||||||
|         DownloadBufferData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr()); |         DownloadBufferData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr()); | ||||||
| @@ -171,8 +173,6 @@ protected: | |||||||
|  |  | ||||||
|     virtual const BufferType* ToHandle(const BufferStorageType& storage) = 0; |     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, |     virtual void UploadBufferData(const BufferStorageType& buffer, std::size_t offset, | ||||||
|                                   std::size_t size, const u8* data) = 0; |                                   std::size_t size, const u8* data) = 0; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -27,13 +27,13 @@ public: | |||||||
|                             std::size_t stream_size); |                             std::size_t stream_size); | ||||||
|     ~OGLBufferCache(); |     ~OGLBufferCache(); | ||||||
|  |  | ||||||
|  |     const GLuint* GetEmptyBuffer(std::size_t) override; | ||||||
|  |  | ||||||
| protected: | protected: | ||||||
|     OGLBuffer CreateBuffer(std::size_t size) override; |     OGLBuffer CreateBuffer(std::size_t size) override; | ||||||
|  |  | ||||||
|     const GLuint* ToHandle(const OGLBuffer& buffer) 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, |     void UploadBufferData(const OGLBuffer& buffer, std::size_t offset, std::size_t size, | ||||||
|                           const u8* data) override; |                           const u8* data) override; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -788,7 +788,7 @@ void RasterizerOpenGL::SetupConstBuffer(const Tegra::Engines::ConstBufferInfo& b | |||||||
|                                         const GLShader::ConstBufferEntry& entry) { |                                         const GLShader::ConstBufferEntry& entry) { | ||||||
|     if (!buffer.enabled) { |     if (!buffer.enabled) { | ||||||
|         // Set values to zero to unbind buffers |         // 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; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
					ReinUsesLisp