gl_rasterizer: Fix nullptr dereference on disabled buffers

master
ReinUsesLisp 2019-07-05 23:49:45 +07:00
parent 7ecf64257a
commit f7691ebe57
3 changed files with 5 additions and 5 deletions

@ -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;
} }