summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_buffer_cache.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2019-11-06 16:08:55 +0100
committerGitHub <noreply@github.com>2019-11-06 16:08:55 +0100
commit468576284d8e102f84f456a7d4ab3701c3e0280a (patch)
treed0530d0795ca205447fabe757c4e8f057daf16c9 /src/video_core/renderer_opengl/gl_buffer_cache.h
parentMerge pull request #3076 from DarkLordZach/telem-names (diff)
parentgl_rasterizer: Re-enable stream buffer memory due to global memory (diff)
downloadyuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.tar
yuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.tar.gz
yuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.tar.bz2
yuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.tar.lz
yuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.tar.xz
yuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.tar.zst
yuzu-468576284d8e102f84f456a7d4ab3701c3e0280a.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_buffer_cache.h')
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index 022e7bfa9..8c7145443 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -4,10 +4,12 @@
#pragma once
+#include <array>
#include <memory>
#include "common/common_types.h"
#include "video_core/buffer_cache/buffer_cache.h"
+#include "video_core/engines/maxwell_3d.h"
#include "video_core/rasterizer_cache.h"
#include "video_core/renderer_opengl/gl_resource_manager.h"
#include "video_core/renderer_opengl/gl_stream_buffer.h"
@@ -18,12 +20,14 @@ class System;
namespace OpenGL {
+class Device;
class OGLStreamBuffer;
class RasterizerOpenGL;
class CachedBufferBlock;
using Buffer = std::shared_ptr<CachedBufferBlock>;
+using GenericBufferCache = VideoCommon::BufferCache<Buffer, GLuint, OGLStreamBuffer>;
class CachedBufferBlock : public VideoCommon::BufferBlock {
public:
@@ -38,14 +42,18 @@ private:
OGLBuffer gl_buffer{};
};
-class OGLBufferCache final : public VideoCommon::BufferCache<Buffer, GLuint, OGLStreamBuffer> {
+class OGLBufferCache final : public GenericBufferCache {
public:
explicit OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system,
- std::size_t stream_size);
+ const Device& device, std::size_t stream_size);
~OGLBufferCache();
const GLuint* GetEmptyBuffer(std::size_t) override;
+ void Acquire() noexcept {
+ cbuf_cursor = 0;
+ }
+
protected:
Buffer CreateBlock(CacheAddr cache_addr, std::size_t size) override;
@@ -61,6 +69,14 @@ protected:
void CopyBlock(const Buffer& src, const Buffer& dst, std::size_t src_offset,
std::size_t dst_offset, std::size_t size) override;
+
+ BufferInfo ConstBufferUpload(const void* raw_pointer, std::size_t size) override;
+
+private:
+ std::size_t cbuf_cursor = 0;
+ std::array<GLuint, Tegra::Engines::Maxwell3D::Regs::MaxConstBuffers *
+ Tegra::Engines::Maxwell3D::Regs::MaxShaderProgram>
+ cbufs;
};
} // namespace OpenGL